Как вызвать процедуру ActiveX вне ее области действия? - PullRequest
0 голосов
/ 22 марта 2019

У меня обширный проект. Среди прочего, он содержит

  • UserForm
  • Рабочий лист (Data) с кнопкой под названием import_button

В любом случае, у меня есть одна процедура в UserForm vba-коде, которая действует как моя.

После ее выполнения я захотел Call процедуру import_button_Click с рабочего листа Data, однако очевидно, что ссылка неизвестна, учитывая, что процедура import_button_Click это Private внутри Data Модуль рабочего листа.

Возможно, есть способ, которым я мог бы вызвать процедуру import_button_Click вне модуля Sheet1 (Data)?

enter image description here


EDIT:

Следует, наверное, заметить, что это структура процедуры import_button_Click.

Public Sub import_button_Click()

    Dim prva As Range: Set prva = Sheets("Zdrojove").Range("A1")
    Call import_data(get_delimeter(prva, ";", ",", ".", "-", "/"), False) 
    Call validate_format

End Sub

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Можно было бы заменить кнопку ActiveX на рабочем листе на кнопку Управление формой . Это позволит вам получить точную процедуру, теперь размещенную в модуле, а не на рабочем листе ... Затем вы можете получить кнопку для выполнения любого макроса (или подпрограммы), который вы хотите, при этом вызывая эту процедуру из другой части. кода одновременно.

1 голос
/ 22 марта 2019

Я не могу воссоздать проблему, изменив Sub на Public.Внутри CommandButton1:

Cmd1

Внутри Module1:

mod

Бег Test:

clik

1 голос
/ 22 марта 2019

Есть несколько способов заставить это работать:

  • Вы объявляете import_button_Click Публичный
Public Sub import_button_Click()
    'Your code
End Sub


  • Вы создаете еще один Общий Sub (внутри Sheet1 (Data)) для вызова Частный один.
Private Sub import_button_Click()
    'Your code
End Sub

'Use this outside the sheet
Public Sub public_import_button_Click()
    Call import_button_Click
End Sub

Надеюсь, это поможет.

...