VBA:多个用户表单引用相同代码

VBA: Multiple Userforms Referencing Same Code

我有一个 VBA 代码,它通过用户表单获取用户输入(标准),创建满足所述标准的项目列表,并通过消息框随机输出列表项目之一。

我想创建第二个用户窗体,它将在上述代码完成后打开,并让用户窗体显示随机输出。

关于如何做到这一点,我有几个问题。

  1. 我希望第二个用户表单包含一个标签,其标题将反映随机输出。
  2. 我希望第二个用户表单允许用户re-execute原始代码(即更改随机结果)

有人有这方面的经验吗?

我想您只是想使用用户在取消时中断的无限循环。 像这样:

Sub MySub()
    Dim myRandOutput As Single
    Do
        myRandOutput = myRand()
    Loop While MsgBox(myRandOutput, vbRetryCancel) = vbRetry
End Sub

Function myRand() As Single
    myRand = Rnd()
End Function

我会在第二种形式中使用 属性 过程来获取随机值。

以新的空白工作簿为例: 插入一个新模块并粘贴下面的代码。此代码代表您输出随机结果的代码。

Public Function RandomNumber() As Double

    RandomNumber = Rnd(10)

End Function

创建一个新的用户窗体(UserForm2),添加一个命令按钮(CommandButton1) 和一个标签(Label1)。将以下代码添加到此表单。我在那里放了四个程序。 MyProp设置ThePassedNumber的值,UpdateLabel1更新标签显示的值,UserForm_Initialize 在表单加载时执行,CommandButton1_Click 在您单击按钮时执行。

Private ThePassedNumber As Double

Property Let MyProp(TheNumber As Double)
    ThePassedNumber = TheNumber
    UpdateLabel1
End Property


Private Sub CommandButton1_Click()

    ThePassedNumber = RandomNumber
    UpdateLabel1

End Sub

Private Sub UserForm_Initialize()

    UpdateLabel1

End Sub

Private Sub UpdateLabel1()

    Me.Label1.Caption = ThePassedNumber

End Sub

添加第二个窗体 (UserForm1) 并添加命令按钮 (CommandButton1) 并将此代码放在窗体中。
它将创建一个用户窗体的新实例,将一个随机值传递给它,然后显示该窗体。

Private Sub CommandButton1_Click()

    Dim frm2 As UserForm2

    Set frm2 = New UserForm2
    frm2.MyProp = RandomNumber
    frm2.Show

End Sub

现在您只需将 RandomNumber 函数重写为 return 您的列表项而不是数字。