我有一个VBA代码,通过用户表单获取用户输入(条件),创建符合所述条件的项目列表,并通过消息框随机输出其中一个列表项。
我想创建第二个用户窗体,它将在上面的代码完成后打开,并让用户窗体显示随机输出。
关于如何做到,我有几个问题。
任何人都有这方面的经验吗?
答案 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