В одной из моих книг я использую как триггер Worksheet_Activate()
, так и триггер Workbook_SheetActivate
. Я использую последний как обработчик верховой езды, чтобы контролировать, какие пользователи могут видеть, какие рабочие листы. Используя следующее:Триггеры Excel и события
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
один. Есть ли способ изменить порядок, в котором эти огоньки?
Переместить код из 'Workbook_SheetActivate()' в начало 'Worksheet_Acivate()'? –
@ OlleSjögren Но тогда мне пришлось бы повторить один и тот же код 5-10 раз, когда я мог бы обработать его на листе 'ThisWorkbook'? – Tom
, если это действительно проблема, из-за которой срабатывает код. вы можете написать код в открытый Sub (в отдельном модуле), а затем просто вызвать код в каждом событии «Worksheet_Activate». –