Вызов подпрограммы userForm в другой userForm с Application.Run - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь создать пользовательскую форму с именем "UtilTextBox", которая будет получать ввод текста от пользователя. Результат будет отправлен обратно в пользовательскую форму, которая создала «UtilTextBox». «UtilTextBox» должен многократно использоваться для любой будущей пользовательской формы.

Я пытался передать имя исходящей пользовательской формы в пользовательскую форму TextBox и вызвать ее с помощью Application.Run, когда пользователь нажимает кнопку отправки.

Подпрограмма в первой пользовательской форме с именем «TextEditor»

Private Sub Between1Edit_Click()
    UtilTextBox.Show
    UtilTextBox.callback = "TextEditor.GetResult"
End Sub

Код «UtilTextBox»

Public callback As String


Private Sub Send_Click()
    Application.Run callback, TextBox.text
End Sub

Подпрограмма первой пользовательской формы, которая получит ввод текста

Public Sub GetResult(result As String)
    MsgBox result
End Sub

Кстати, обе пользовательские формы находятся в одной книге.

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

Вместо этогоиз этого я получил ошибку во время выполнения '1004': невозможно запустить макрос.
Разве невозможно вызвать публичные подпрограммы из пользовательской формы с помощью Application.Run?

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Да, единственный метод - CallByName:

Код из TextEditor

Private Sub Between1Edit_Click()
    UtilTextBox.callback = "GetResult"
    Set UtilTextBox.frm = Me
    UtilTextBox.Show
End Sub

Public Sub GetResult(result As String)
    MsgBox result
End Sub

Код из UtilTextBox

Public callback     As String
Public frm          As Object

Private Sub Send_Click()
    CallByName Me.frm, Me.callback, VbMethod, Me.TextBox.Text
End Sub
0 голосов
/ 24 октября 2019

Вы должны изменить строки

Private Sub Between1Edit_Click()
    UtilTextBox.callback = "TextEditor.GetResult"
    UtilTextBox.Show
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...