#excel #vba
#excel #vba
Вопрос:
На рабочем листе я могу прикрепить код к событию следующим образом:
Private Sub Worksheet_Calculate()
' .. code here
End Sub
Как я могу получить ссылку на рабочий лист, на котором было сгенерировано событие?
Я хочу иметь 100% безопасный способ, поэтому мне не нужно беспокоиться о взломе кода при изменении имени рабочего листа и т.д.
ActiveSheet
неверно, потому что не гарантируется, что какой-либо лист активен при (повторном) вычислении.
Ответ №1:
Вы можете использовать вызывающий:
Application.Caller.Worksheet.Name
Ответ №2:
Вы можете использовать свойство Codename:
Private Sub Worksheet_Calculate()
Debug.Print Me.CodeName
End Sub
По умолчанию это то же имя, что и у листа, но вы можете изменить его в окне свойств VBE — это свойство Name. Пользователь не может его изменить. (Копирование листа добавляет номер к имени, например, Лист1 становится Листом11.
Вы также можете использовать его в событии уровня рабочей книги:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
If Sh.CodeName = "TheSheetICareAbout" Then
Debug.Print Sh.Name
End If
End Sub
Трудно быть более полезным, поскольку вы не говорите, как вы будете использовать ссылку.
Ответ №3:
Еще немного информации о кодовых именах: