【发布时间】:2019-01-12 20:21:08
【问题描述】:
我陷入了 VBA 编码问题。有两个用户表单,分别命名为“UsersForm”和“Registration”。
在“UsersForm”中有一个名为 CreateProfile 的命令按钮,点击它应该会显示“Registration”表单。
为此,一个名为“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)。我哪里错了?
【问题讨论】:
-
Add 会将一个新的用户表单添加到用户表单的集合中。也许您正在寻找表演?
-
@ArnovanBoven,感谢您的热情回复...我在“ShowNextUF”过程中将字符串参数作为“NxtUF”传递,用于加载以及激活下一个用户表单...我有我的项目中有大约 32 个用户表单,这就是为什么我调用该过程以最小化代码大小...请指导我如何通过使用该用户表单的名称(
-
@ArnovanBoven 是的,我最终是在寻找表演!但我需要为 VBA 用户表单设置一个对象,该对象可以通过“.show”命令显示...将参数传递:“NxtUF”作为用户表单帮助吗?我的意思是如果写类似: 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然后卸载 PrevUF NxtUF.Show End Sub
-
@TinMan 是不是 '.Add' 正在添加一个新实例?否则,为什么在它自己的模块中调用它的默认名称(例如:Userform.TextBox.Value)时该实例会过期!
-
不太确定我是否遵循您的推理,但想法是您添加一次用户窗体,然后在需要时显示/隐藏它。
标签: vba excel excel-2007 userform