使用Application.Run在另一个userForm中调用userForm的子例程

时间:2019-10-24 09:40:57

标签: excel vba

我尝试创建一个名为“ UtilTextBox”的用户窗体,该窗体将接收来自用户的文本输入。结果将发送回创建“ UtilTextBox”的用户窗体。 “ UtilTextBox”应可用于将来的任何用户窗体。

我试图将传出的用户窗体的名称传递给TextBox用户窗体,并在用户单击提交按钮时使用Application.Run对其进行调用。

第一个UserForm中名为“ 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

第一个UserForm的子例程,它将接收文本输入

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

两个UserForm都在同一工作簿中。

我期望用户发送的文本会被MsgBox传递并打印出来。

相反,我收到运行时错误“ 1004”:无法运行宏。

不能通过Application.Run从UserForm调用公共子吗?

2 个答案:

答案 0 :(得分:0)

您应该更改行

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

答案 1 :(得分:0)

是的,唯一的方法是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