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

时间:2015-08-06 15:48:03

标签: excel vba label userform caption

我有一个VBA代码,通过用户表单获取用户输入(条件),创建符合所述条件的项目列表,并通过消息框随机输出其中一个列表项。

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

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

  1. 我希望第二个用户表单包含一个标签,其标题将反映随机输出。
  2. 我希望第二个userform允许用户重新执行原始代码(即更改随机结果)
  3. 任何人都有这方面的经验吗?

2 个答案:

答案 0 :(得分:1)

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

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

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)并将此代码放在表单中。
它将创建userform的新实例,将随机值传递给它,然后显示表单。

Private Sub CommandButton1_Click()

    Dim frm2 As UserForm2

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

End Sub

现在您只需要重写RandomNumber函数以返回列表项而不是数字。

答案 1 :(得分:0)

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

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