Userform在通过命令VBA.Userform.Add(“UF”)加载时重新初始化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Userform在通过命令VBA.Userform.Add(“UF”)加载时重新初始化相关的知识,希望对你有一定的参考价值。
我陷入了VBA编码问题。有两个用户表单,名为“UsersForm”和“Registration”。
在“UsersForm”中有一个名为CreateProfile的命令按钮,通过单击它应该显示“注册”表单。
为此目的,一个名为“ShowNextUF”的过程已经写入模块中,我在其中提供如下所示的参数:
Private Sub CreateProfile_Click() ' <----its an activex Command button of the userform "UsersForm"
Call ShowNextUF("Registration", Me, True)
End Sub
在模块中:
Sub ShowNextUF(ByVal NxtUF As String, ByVal PrevUF As Object, Optional ByVal UnLd As Boolean = False)
Dim nUF As Object
Set nUF = VBA.UserForms.Add(NxtUF)
If UnLd Then Unload PrevUF
nUF.Show
End Sub
现在的问题是:当我想检查用户表单“注册”的文本框的值时,它的工作正常..
Private Sub tbStdName_Change() '<---- A TextBox of "Registration" userform
StudenName = UCase(tbStdName.Value)
End Sub
但它没有(下图);实际上,在这种情况下,“注册”表单再次进行初始化。不知道为什么它会重新初始化。
Private Sub tbStdName_Change()
StudenName = UCase(Registration.tbStdName.Value) '<---- Reinitilizing...
End Sub
当我在隐藏“注册”表单后调用新的用户表单时,我需要在另一个新用户表单中使用这个:UCase(Registration.tbStdName.Value)。我哪里错了?
答案
@Arno van Boven
感谢您的亲切信息,这让我想到'.Add'将在USerform中添加新的集合......刚试过这个想法就解决了!
摆脱这种方法的方法是将参数作为Object而不是String传递...
Private Sub CreateProfile_Click()
Call ShowNextUF(Registration, Me, True)
End Sub
在模块中:
Sub ShowNextUF(ByVal NxtUF As Object, ByVal PrevUF As Object, Optional ByVal UnLd As Boolean = False)
If UnLd Then Unload PrevUF
NxtUF.Show
End Sub
再次感谢...干杯!!!!
以上是关于Userform在通过命令VBA.Userform.Add(“UF”)加载时重新初始化的主要内容,如果未能解决你的问题,请参考以下文章