Excel工作表触发器和事件

在我的工作簿中,我同时使用了Worksheet_Activate()触发器和Workbook_SheetActivate触发器。 我使用后者作为一个骑马处理程序来控制哪些用户可以看到哪些工作表。 使用以下内容:

 Private Sub Workbook_SheetActivate(ByVal ws As Object) Dim HigherAccess As String HigherAccess = "Sheet1, Sheet2, Sheet3" If InStr(1, HigherAccess, ws.Name, vbTextCompare) > 0 Then If UserList.Count = 0 Or ThisUser = "" Then Call UserDL Application.EnableEvents = True On Error GoTo err If Not UserList.item(ThisUser)(7) = "Employee" Then ThisWorkbook.Sheets(ws.Name).Activate Else ThisWorkbook.Sheets("Landing Page").Activate MsgBox "You do not have permission to view this." & vbNewLine _ & "If this is an error please contact xxxx" End If End If Exit Sub err: MsgBox "An Error has occurred. The application will now refresh" ThisWorkbook.Sheets("Landing Page").Activate End Sub 

我的问题是, Worksheet_Acivate()触发器似乎在Workbook_SheetActivate之前触发。 无论如何要改变这些火灾的顺序吗?

当事件从“最小”对象(在Excel对象模型中)被激发到“最大”对象(工作表到应用程序)时,您无法更改激发事件的顺序。

但是,您可以按照该顺序来完成您的目标,正如@MacroMan所说的,他在testing导致Workbook_SheetChange事件中发生Change EventWorksheet示例。

有关更多信息,请参阅Chuck Pearson关于Events的教程。