Excel宏和命令按钮

时间:2018-10-22 18:29:23

标签: vba outlook

我已经在Outlook VBA中创建了一个用户窗体,并且设置了选项按钮,以便在选择时提供不同的选项,但是如果我只经历一次,一切都可以正常工作

1 个答案:

答案 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,这是我去年写的一篇文章,详细介绍了默认实例方法的问题。