尝试从VBA中的用户表单返回值

时间:2018-08-21 15:43:30

标签: excel vba excel-vba userform

我试图将一个用户窗体中的值返回到另一个宏中。我一直在寻找答案,即使它似乎对其他人也有用,但我却无法工作。

这是我想返回值intMonth的一段代码的示例:

sub comparison()
    UserForm1.Show
end sub

然后我有用户表单代码:

Private Sub initialize()
    OptionButton1 = False
End Sub

Private Sub OptionButton1_Click()
    intMonth = 1
    Me.Hide
End Sub

如何将intMonth的{​​{1}}值恢复为原始的1函数?不管我做什么,我似乎都无法获得这个价值。

2 个答案:

答案 0 :(得分:3)

这是一个最小的示例,但应该有所帮助。

screenshot of UserForm

在用户窗体中:

Option Explicit
Option Base 0

Public intMonth As Long    ' <-- the variable that will hold your output

Private Sub initialize()
    OptionButton1 = False
    intMonth = 0
End Sub

Private Sub CommandButton1_Click()  ' OK button
    Me.Hide
End Sub

Private Sub OptionButton1_Click()
    intMonth = 1    '<-- set the value corresponding to the selected radio button
End Sub

Private Sub OptionButton2_Click()
    intMonth = 2
End Sub

在模块或ThisWorkbook中:

Option Explicit
Option Base 0

Sub comparison()
    UserForm1.Show
    MsgBox CStr(UserForm1.intMonth)   ' <-- retrieve the value
End Sub

答案 1 :(得分:0)

实现所需功能的另一种有用方法是将代码包装在用户窗体的公共函数中。

在用户窗体中:

Option Explicit
Option Base 0

Private intMonth As Long

Public Function Choose_Option()
    OptionButton1 = False
    intMonth = 0
    Me.show()

    Choose_Option = intMonth 
End sub

Private Sub CommandButton1_Click()  ' OK button
    Me.Hide
End Sub

Private Sub OptionButton1_Click()
    intMonth = 1 
End Sub

Private Sub OptionButton2_Click()
    intMonth = 2
End Sub

然后在模块中,就这么简单:

Option Explicit
Option Base 0

Sub comparison()
    MsgBox Userform1.Choose_Option() 
End Sub

这样,该函数负责显示用户表单,提示用户并返回值。

如果调试此函数,您将看到在调用Me.Show()之后,该函数仅在隐藏用户窗体(在“确定”按钮中完成)后才停止并继续。