我遇到了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
再次感谢。。。干杯