Событие
A Worksheet_SelectionChange
не обязательно должно находиться в модуле, специфичном для листа. Например, он также может находиться в class module
и, что важно для этого экземпляра, в модуле ThisWorkbook (хотя там он называется событием Workbook_SheetSelectionChange
).
Если вы всегда хотите запустить событие Workbook_SheetSelectionChange, независимо от
в каком листе выбор изменился, попробуйте следующее
'place in the ThisWorkbook module
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'Do stuff
MsgBox "Changes were made in worksheet: " & Sh.Name, vbInformation
End Sub
Если вы хотите запустить событие только на последней сделанной WS
1) Вы можете быть уверены, что последний сделанный WS всегда будет последним в WB
'In a regular module
Sub addnwsheet()
Dim shtname As String
With ThisWorkbook
shtname = "temp" & .Sheets.Count
'add a sheet at the end
.Sheets.Add(after:=.Sheets(.Sheets.Count)).Name = shtname
End With
End Sub
'place in the ThisWorkbook module
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Index = ThisWorkbook.Sheets.Count Then
'Do stuff
MsgBox "Selection changed in worksheet: " & Sh.Name, vbInformation
End If
End Sub
2) Более безопасный способ - объявить вновь созданный лист как переменную Global
. Они постоянны и общедоступны.
'In a regular module
Global nwsht As Sheet
Sub addnwsheet()
Dim shtname As String
With ThisWorkbook
shtname = "temp" & .Sheets.Count
'add a sheet at the end
.Sheets.Add(after:=.Sheets(.Sheets.Count)).Name = shtname
Set nwsht = .Sheets(shtname)
End With
End Sub
'place in the ThisWorkbook module
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Sh = nwsht Then
'Do stuff
MsgBox "Selection changed in worksheet: " & Sh.Name, vbInformation
End If
End Sub
EDIT
Если вы хотите указать диапазон, событие должно сработать на
'place in the ThisWorkbook module
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim r as Range
Set r = Workbooks(REF).Sheets(REF).Range("D2:D100") 'event will only get triggered by this range
If Not Intersect(Target, r) Is Nothing Then
'Do stuff
MsgBox "Selection changed in worksheet: " & Sh.Name, vbInformation
End If
End Sub