如何通过VBA宏触发自定义窗体并将输入值传递到模块代码
已创建的自定义窗体效果如下:
你可以通过「显示窗体获取用户选择→读取窗体公共变量→销毁窗体释放内存」的流程完成值传递,具体操作如下:
步骤1:完善窗体代码
你的现有窗体代码缺少按钮点击后隐藏窗体的逻辑,会导致窗体一直处于显示状态无法向下执行,补充后完整代码如下:
Option Explicit Public InputMsg As String ' YTD按钮点击事件 Public Sub CommandButton1_Click() InputMsg = "YTD" ' 隐藏窗体,继续执行模块后续代码 Me.Hide End Sub ' Specific Months按钮点击事件 Public Sub CommandButton2_Click() InputMsg = "Specific Months" Me.Hide End Sub ' 处理用户点击窗体右上角关闭按钮的场景 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = vbFormControlMenu Then ' 用户点击关闭按钮时可自定义返回值,比如赋值为"Cancel" InputMsg = "Cancel" Me.Hide Cancel = True End If End Sub
步骤2:在模块中调用窗体获取返回值
在你标注的需要获取值的位置,插入如下代码(注意将代码中的UserForm1替换为你实际的窗体名称,可在VBA编辑器按F4调出属性窗口,查看(名称)属性获取真实窗体名):
'****此处我需要获取窗体的输入值(点击YTD或特定月份按钮的结果)*** Dim selectOption As String Dim frm As UserForm1 Set frm = New UserForm1 ' 显示窗体等待用户操作 frm.Show ' 读取窗体公共变量存储的用户选择 selectOption = frm.InputMsg ' 销毁窗体释放内存 Unload frm Set frm = Nothing ' 后续可以根据selectOption的值走不同逻辑,示例: If selectOption = "YTD" Then ' 编写YTD场景的业务代码 ElseIf selectOption = "Specific Months" Then ' 编写特定月份场景的业务代码 ElseIf selectOption = "Cancel" Then ' 用户点击关闭按钮,可直接退出过程 Exit Sub End If
内容的提问来源于stack exchange,提问作者mrk777
相关产品推荐
相关产品推荐

