在Excel中重命名工作表事件

Excel工作表重命名时,获得一些VBA代码的最佳方法是什么?

这是一种方法。 诀窍是通过专门的课程将应用程序中的事件进行陷阱。 使用SheetActivate事件,存储对活动工作表的引用及其名称。 当工作表处于停用状态(另一个已激活)时,将工作表参考的名称与存储的string进行比较。 这里是类(称为CExcelEvents):

Option Explicit Private WithEvents xl As Application Private CurrSheet As Worksheet Private CurrSheetName As String Private Sub Class_Initialize() Set xl = Excel.Application Set CurrSheet = ActiveSheet CurrSheetName = CurrSheet.Name End Sub Private Sub Class_Terminate() Set xl = Nothing End Sub Private Sub xl_SheetActivate(ByVal Sh As Object) If CurrSheetName <> CurrSheet.Name Then Debug.Print "You've renamed the sheet: " & CurrSheetName & " to " & CurrSheet.Name ' Do something here - rename the sheet to original name? End If Set CurrSheet = Sh CurrSheetName = CurrSheet.Name End Sub 

使用Workbook打开事件使用全局variables来实例化该事件:

 Public xlc As CExcelEvents Sub Workbook_Open() Set xlc = New CExcelEvents End Sub 

上面的例子只会在用户select另一个工作表时触发。 如果您需要更多粒度,请同时监控Sheet Change事件。

显然没有事件来处理这个,甚至使用Application对象。 多烦人

我可能会尝试通过存储工作表的启动值并在尽可能多的事件上检查它来捕获它 – 这是公认的黑客行为。

以下似乎为我工作,希望它有帮助。

在ThisWorkbook模块中:

 Private strWorksheetName As String Private Sub Workbook_Open() strWorksheetName = shtMySheet.Name End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Call CheckWorksheetName End Sub Private Sub Workbook_NewSheet(ByVal Sh As Object) Call CheckWorksheetName End Sub Private Sub Workbook_WindowDeactivate(ByVal Wn As Window) Call CheckWorksheetName End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) Call CheckWorksheetName End Sub Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Call CheckWorksheetName End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Call CheckWorksheetName End Sub Private Sub CheckWorksheetName() 'If the worksheet has changed name' If shtMySheet.Name <> strWorksheetName Then DoSomething End If End Sub 

我急切地等待着这个答案,因为我经过多次search后还没有弄明白。 在我发现的工作表上没有重命名事件,所以你不得不有一个替代方法。

我见过的最好的(这是可怕的 )是通过使它们为只读或不可见来禁止重命名,然后提供自己的工具栏或button来重命名。 非常丑陋,用户讨厌它。

我也看到在办公室工具栏中禁用重命名菜单项的应用程序,但是这并不妨碍双击该选项卡并在那里重命名。 也非常丑陋,用户讨厌它。

祝你好运,我希望有人提出一个更好的答案。