如果已经问过这个问题,我似乎无法找到答案。我想在UserForm上设置一些东西,因为它是根据从属性传递给它的值加载的。我所拥有的是Excel工作表上的一个按钮,它按如下方式加载用户表单:
Sub button()
Dim fm As New UserForm1
fm.ValueToPass = "Hello"
fm.Show
End Sub
表单后面是以下代码:
Private myString As String
Public Property Let ValueToPass(ByVal x As String)
myString = x
End Property
Private Sub UserForm_Initialize()
If myString = "Hello" Then
'Do something on my form
else
'Do something else on my form
end if
End Sub
问题是当表单被加载时,myString为空。我相信原因是在设置属性ValueToPass
之前初始化了表单。什么是最好的解决方案?
答案 0 :(得分:1)
最简单的方法:
Sub button()
Dim fm As New UserForm1
fm.Label1.Caption = "Hello"
fm.Show
End Sub
答案 1 :(得分:1)
当你打电话时,你可能会认为:
fm.ValueToPass = "Hello"
在Private Sub UserForm_Initialize()
中,有可能在初始化表单之前传递myString
值。例如,你在某种程度上期望myString
可能与""
不同(因此你有条件)。情况并非如此 - 首先执行_Initialize
构造函数,然后执行其他任何操作:
使用您的代码,您需要以某种方式告诉表单,它应该更新其标签。在表格中考虑这个:
Public Sub ShowForm()
Me.Label1 = myString
Me.Show
End Sub
然后在模块中,将其称为fm.ShowForm
而不是fm.Show
。
实际上,如果您使用用户表单,则遵循Model-View-Controller模式是个好主意。为此你需要一个单独的类。
Userform closes after "End Sub" without ever calling "Unload Me"
答案 2 :(得分:0)
你应该使用initialize事件:
Sub OpenForm()
MyForm.show
end sub
然后在userform的initialize事件中,输入:
Me.LabelName.Caption = "Your label text"
(双击用户窗体查看其代码,然后从右上角的下拉菜单中选择"初始化"。)