当我使用按钮在Userformes(UF2和UF3)之间传输值时,我遇到了问题。
我的目的是使用不同的按钮来更改userform3标签中的内容。例如,如果我点击' aaa到3',则会显示userform3,标签中的文字将为' aaa'。
,代码在这里:
Public UF3 As UserForm3
Public Zone As String
Private Sub CommandButton2_Click()
Set UF3 = UserForm3
Zone = "aaa"
UF3.Show
Zone = "aaa"
End Sub
Private Sub CommandButton3_Click()
Set UF3 = UserForm3
Zone = "bbb"
UF3.Show
End Sub
Public UF2 As UserForm2
Private Sub CommandButton1_Click()
Me.Hide
End Sub
Private Sub UserForm_Initialize()
Set UF2 = UserForm2
Label1 = UF2.Zone
End Sub
但是当我运行它时,UF3中的标签总是空的。
答案 0 :(得分:1)
在您的代码中,Initialize
事件Userform3
将在您设置Zone
之前被调用,就在您设置UF3时(如果某个地方尚未加载userform3的默认实例)其他人)。
由于您没有使用关键字new
来实例化新的userforms对象,因此它使用默认实例。
在您的特定情况下,您需要在设置UF3之前设置Zone,以便在Userform3中调用Initialize时Zone将具有值,或者您可以在调用UF3.Show之前直接将UF3.Label1设置为正确的值。
Private UF3 As UserForm5
Public Zone As String
Private Sub CommandButton1_Click()
'Either this possibility
Zone = "test"
Set UF3 = UserForm3
'or this one
UF3.Label1 = "aaa"
UF3.Show
End Sub
请注意,如果您使用的是userforms的默认实例,则甚至不需要设置它们,并且可以直接使用以下代码:
Private Sub CommandButton1_Click()
Userform3.Label1 = "aaa" 'If the Userform3 default instance doesn't already exists,
'the fist call to a method or a property will create and initialize it.
'So here the Initialize event of Userform3 will be called
'and then the value of Label1 will be changed.
Userform3.Show
End Sub
其他信息:请记住,只有每个userform实例都会调用一次Initialize,并且调用Me.Hide
不会卸载userform但只会“取消显示”它。因此,在原始代码中,Userform3的label1仅在您第一次调用Set UF3 = Userform3
时设置。如果您希望更好地控制加载和卸载userform的实例的时间,则可能必须使用userform的特定实例而不是默认实例。