即使使用 Application 对象,显然也没有 Event 来处理这个问题。多么烦人。
我可能会尝试通过存储工作表的启动值并在尽可能多的事件上检查它来捕获它 - 这无疑是一个黑客。
以下似乎对我有用,希望它有所帮助。
在 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
Run Code Online (Sandbox Code Playgroud)
小智 5
这是一种方法。诀窍是通过专用类在应用程序级别捕获事件。使用 SheetActivate 事件,存储对活动工作表及其名称的引用。当工作表被停用(并且另一个工作表被激活)时,将工作表引用的名称与存储的字符串进行比较。这是该类(称为 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
Run Code Online (Sandbox Code Playgroud)
使用工作簿打开事件用全局变量实例化它:
Public xlc As CExcelEvents
Sub Workbook_Open()
Set xlc = New CExcelEvents
End Sub
Run Code Online (Sandbox Code Playgroud)
仅当用户选择另一个工作表时,上面的示例才会触发。如果您想要更详细的信息,还可以监视“Sheet Change”事件。
| 归档时间: |
|
| 查看次数: |
10553 次 |
| 最近记录: |