Userform在通过命令VBA.Userform.Add(“UF”)加载时重新初始化

问题描述 投票:0回答:1

我陷入了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)。我哪里错了?

excel vba excel-vba excel-2007 userform
1个回答
0
投票

@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 

再次感谢...干杯!!!!

© www.soinside.com 2019 - 2024. All rights reserved.