我已经在Outlook VBA中创建了一个用户窗体,并且设置了选项按钮,以便在选择时提供不同的选项,但是如果我只经历一次,一切都可以正常工作
答案 0 :(得分:1)
如果我第二次返回,则仍会选择上一次运行的选项按钮。
您正在显示表单的默认实例。
UserForm1.Show
您所看到的意味着您有一个临时的全局对象,该对象在两次调用之间保持其状态。
如果您希望每次显示该表单时都“开始清理”,则有两种选择-一种是在处理完临时对象后Unload
:
UserForm1.Show
'do stuff
Unload UserForm1
另一个(更清洁的IMO)将停止使用该全局对象,而创建一个局部作用域的对象,寿命更长得多:
With New UserForm1 ' object created here
.Show
'do stuff
End With ' object dies here
或者:
Dim frm As UserForm1
Set frm = New UserForm1 ' object created here
frm.Show
'do stuff
'frm object goes out of scope and is destroyed at the end of the procedure
是否破坏您的其他代码,取决于在表单的默认实例中写入了多少其他代码。您在提供的示例代码中使用了Me
,这是一个好兆头:这意味着您是针对无论当前实例是什么(而不是例如)编写代码的。 For Each c In UserForm1.Controls
,它将迭代表单的 default 实例中的控件-处于与 current 实例中的控件不同的状态。
有关使用表单的更多信息,请参见UserForm1.Show,这是我去年写的一篇文章,详细介绍了默认实例方法的问题。