首页 > 解决方案 > 使用 Application.Run 在另一个用户表单中调用用户表单的子例程

问题描述

我尝试创建一个名为“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 从 UserForm 调用公共子程序?

标签: excelvba

解决方案


是的,唯一的方法是 CallByName:

来自文本编辑器的代码

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

推荐阅读