Как запустить код на отдельном листе для запуска, используя код в текущем листе VBA - PullRequest
0 голосов
/ 25 января 2019

У меня есть этот код, и то, что он делает, не важно, он работает правильно. Однако в выделенной точке мне нужно вызвать код на листе «SCP Status Paynter», на который я указываю, чтобы запустить его ДО ПЕРЕД кодом ниже этой точки. Я не хочу просто вставлять другую кнопку или что-то еще, я просто хочу, чтобы она достигла этой точки в коде и запустила код на этом другом листе. Я не смог найти то, что мне нужно, в Google, и я новичок в этом, поэтому я не уверен, что делать. Спасибо!

enter image description here

1 Ответ

0 голосов
/ 25 января 2019

В 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, а не кодом пользователя.Принятие привычки реализовывать логику вне обработчиков событий (и заставлять их вызывать логику вместо этого) - очень хорошая привычка на раннем этапе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...