В Project Explorer VBE довольно сложно сказать / угадать, какую конкретную процедуру вы намереваетесь вызвать ( Rubberduck Code Explorer , углубляясь вЗдесь бы помогли узлы уровня процедуры! Примечание: я один из администраторов этого проекта с открытым исходным кодом), но в любом случае похоже, что вам нужно вызывать процедуру, расположенную в модуле Sheet1
document.
Скажем, ваша процедура выглядит следующим образом:
Public Sub DoSomething()
' do stuff
End Sub
Затем из любого места в вашем проекте вы можете сделать это:
Sheet1.DoSomething
Что ничем не отличается от того, когда вы делаете это:
MsgBox "hello, world"
Это вызывает функцию public / global-scope, расположенную в стандартной библиотечной функции, полное имя которой будет:
VBA.Interaction.MsgBox "hello, world"
Теперь, если ваша процедура выглядитthis:
Private Sub Worksheet_Change()
' do stuff
End Sub
Тогда у вас проблема: это Private
, и это обработчик событий.Обработчики событий могут быть сделаны Public
и вызываться так, как указано выше, однако лучшей практикой будет использование тела в отдельной процедуре, например:
Private Sub Worksheet_Change()
DoSomething
End Sub
Public Sub DoSomething()
' do stuff
End Sub
Таким образом, вы уходитеодни обработчики событий.Средства обработки событий рабочего листа должны вызываться Excel, а не кодом пользователя;то же самое относится, например, к CommandButton1_Click
обработчикам: они должны быть Private
и вызываться библиотекой MSForms, а не кодом пользователя.Принятие привычки реализовывать логику вне обработчиков событий (и заставлять их вызывать логику вместо этого) - очень хорошая привычка на раннем этапе.