【发布时间】:2018-07-01 20:30:59
【问题描述】:
我又回来了,我希望这是一个相当简单的问题。
我正在尝试在 VBA 中创建用户表单。用户将在表单中输入某些信息,然后关闭表单。我希望用户表单在用户关闭后保留输入的数据。我将它视为一个类模块,因为从技术上讲它们是,或者至少我是这样理解的。这是我正在使用的代码:
在显示用户表单的主子中:
Sub NonACATMemo()
Dim UserInput As MemoReasons
Set UserInput = New MemoReasons
UserInput.Show
...然后在用户窗体本身中关闭它...
Private Sub UserForm_Terminate()
MemoReasons.Hide
End Sub
我还从表单上的命令按钮调用此子程序。我遇到的问题是,当我使用此方法时,出现错误“运行时错误'402':必须首先关闭或隐藏最顶层的模态表单。”如果我使用 unload me,当我尝试从表单中获取数据时,它会被清除,并且会出现“服务器不可用”错误或类似情况。
那么,关于隐藏用户表单但保留其中数据的任何想法?
最后几点说明:这是项目中唯一的用户表单,下面是我如何尝试使用 Public Property Get 方法从中获取数据的示例:
Debug.Print UserInput.EmailFlag
Debug.Print UserInput.ContraFirm
Debug.Print UserInput.MemoReason
好吧,如果有人有任何建议,我会全力以赴。
【问题讨论】:
-
你说只有一个用户表单,但是,UserInput = 1 个表单,MemoReasons = 2 个表单?
-
我以前没有见过这种方法。为什么不直接做
MemoReasons.Show?另外,我认为问题在于您试图从其Terminate事件中隐藏表单。我会发布一个建议。 -
@user2140261 我的印象是我必须调暗并为此设置一个类的实例,但看来我错了。看起来我可以按照我最初充电的方式执行它,但我必须将 UserInput 声明为全局变量,然后在用户表单上使用“UserInput.Hide”来获得我正在寻找的功能。事实上,删除声明和设置,我可以使用 MemoReasons.Show 和 MemoReasons.EmailFlag 等。
-
@DavidZemens 我把它放在终止事件中,因为我的印象是这样做,无论用户是否使用右上角的 X 控件关闭表单,表单中的信息都会保留,或我放在上面的“完成”命令按钮。我发现它不是那样工作的,而且我似乎没有正确理解终止事件。
标签: class vba user-controls automation