用户窗体在通过命令VBA加载时重新初始化。Userform.Add( "UF" )



我遇到了VBA编码的问题。有两个用户表单,分别命名为"UsersForm"one_answers"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

现在的问题是:当我想检查用户表单"Registration"的文本框的值时,它可以正常工作。。

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'将在USperform中添加新集合。。。刚试过这个主意就解决了!

摆脱这种情况的方法是将参数作为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 

再次感谢。。。干杯

最新更新