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”)加载时重新初始化的主要内容,如果未能解决你的问题,请参考以下文章

在userform中使用办公室图标作为命令按钮上的图像

如何加载和卸载Userform

通过userform列表框上的名称管理器的动态范围

Excel 单元格公式可以引用 UserForm 控件吗?

使用非连续范围的值通过RowSource属性填充UserForm Combobox

从 MS Access 启动 Excel 和引用 UserForm 对象