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

在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,如下图所示。
《如何防止Excel工作表名称被修改》
第3行代码恢复工作表名称。
第4行代码保存文件。

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

    原文作者:taller_2000
    原文地址: https://blog.csdn.net/taller_2000/article/details/104106686
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞