Как я могу получить ссылку на рабочий лист, на котором было сгенерировано событие?

#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:

Еще немного информации о кодовых именах:

http://www.ozgrid.com/VBA/excel-vba-sheet-names.htm