如何防止Excel工作表名称被修改

39 篇文章 0 订阅
20 篇文章 2 订阅

在Excel工作表标签上双击可以修改名称,如果其他工作簿中公式使用了对于此工作表的外部引用,那么工作表名称变化后,这些外部引用经失效,在VBA代码中通过工作表名称引用对象也将出错。利用VBA对象事件代码可以一定程度上的实现防止Excel工作表名称被修改。

假设实例文件中的工作表名称为“DEMO”,在该工作表模块中增加如下事件代码。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Me.Name <> "DEMO" Then Me.Name = "DEMO"
End Sub
Private Sub Worksheet_Deactivate()
    If Me.Name <> "DEMO" Then Me.Name = "DEMO"
End Sub

【代码解析】
第1~3行代码为工作表的SelectionChange事件代码,用户在工作表中选中单元格或者区域时,将激活此事件执行相关代码。
第2行代码判断该工作表的名称是否被修改,如果已经被修改,将自动恢复为“DEMO”,其中的Me用于指代代码模块所在对象,此处就是名称为“DEMO”的工作表。
如果用户修改了工作表名称之后,直接切换工作表,那么并不会激活SelectionChange事件,针对此场景需要在Deactivate事件中添加同样的代码用于恢复工作表名称。


使用了两个工作表事件是否将完美解决这个问题呢?其实并不是,如果用户修改了工作表名称之后,直接保存并关闭工作簿文件,那么该工作表的名称应不再是“DEMO”。为了应对此场景,需要使用工作簿的事件代码。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If shtDEMO.Name <> "DEMO" Then
        shtDEMO.Name = "DEMO"
        ThisWorkbook.Save
    End If
End Sub

【代码解析】
工作簿事件代码保存在ThisWorkbook模块中, 就无法像上面两个工作表事件代码一样直接使用Me.Name获取工作表名称。此处可以使用工作表的CodeName作为工作表对象的标识,此例中名称为“DEMO”的工作表的CodeNameshtDEMO,如下图所示。
在这里插入图片描述
第3行代码恢复工作表名称。
第4行代码保存文件。


本文所讲解的方法只是“基本上”实现了防止Excel工作表名称被修改,并不能确保时候所有场景。如果希望完美的实现禁止工作表改名,应该使用“保护工作簿”的功能,工作表的重命名功能被禁用,但是需要注意的是工作表相关一些其他操作也同时被禁用,如下图所示。
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值