Объединение кнопок ActiveX от нескольких листов до одной кнопки - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь создать кнопку в таблице Excel, которая активирует все остальные кнопки в книге в определенном порядке. Эти кнопки расположены на 4 разных листах. Я попытался просто создать кнопку на одном листе и вызвать другие кнопки с этой кнопки, как показано ниже:

Public Sub CommandButton1_Click()
    Button2_Click
    Button3_Click
    Button4_Click
    Button5_Click
    Button6_Click
End Sub

Это не сработало. Я думал, что, возможно, мне нужен какой-то способ ссылки на лист, в котором находится каждая кнопка?

Ответы [ 2 ]

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

Даже частные обработчики событий внутри модулей листа могут быть запущены следующим образом.Предполагая, что у вас есть рабочий лист с именем «ActiveXButtons» (его заголовок) с Button2 на нем и следующим кодом события кнопки на этом рабочем листе:

Private Sub Button2_Click()
    ' ...
End Sub

Затем вы можете инициировать указанное выше событие кнопки, косвенно обратившись к кодовому имени рабочего листа:

Application.Run Worksheets("ActiveXButtons").CodeName & ".Button2_Click"

или сокращенно:

Run “Sheet2.Button2_Click“
0 голосов
/ 21 января 2019

Обработчики событий Private по причине. Создание их Public будет работать, но это не то, что вы должны делать.

Переместить код из этих обработчиков в их собственные публичные процедуры; затем вызовите эти процедуры из соответствующих обработчиков - и вызовите те же процедуры в соответствующем порядке из этого обработчика кнопки команды.

Например, вы берете это:

Private Sub Button2_Click()
    'do stuff
End Sub

Преврати это в:

Private Sub Button2_Click()
    DoStuff
End Sub

Public Sub DoStuff()
    'do stuff
End Sub

Тогда вы можете вызывать DoStuff откуда угодно.

Обработчики событий никогда не должны вызываться напрямую, и никогда не должны быть вызваны.

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