Chr*_*Day 1 vba caption solidworks userform
我正在从SolidWorks运行VBA宏.该表单兼作两种文档的输入.在UserForm.Initialize子例程中,我正在Caption根据打开的文档类型更改UserForm的名称.每当我这样做时,程序会重新运行UserForm.Initialize,当它完成后,它会从它离开的地方继续运行,有效地运行两次.
有没有人知道解决这种奇怪行为的方法?我尝试将命令放入自己的Sub中,但结果是一样的.FormName.Caption
非常感谢.
我无法复制问题而且我不知道SolidWorks是什么,因此可能与它有关.也许您可以发布一个示例,显示Initialize被调用两次.
我的猜测是它与自动实例化变量有关.当您使用UserForm1时,您实例化一个名为UserForm1的对象变量,该变量指向一个对象,也称为UserForm1.它类似于在Dim语句中使用New关键字.你从来没有定义过UserForm1(变量),但VBA做了,第一次使用它时,它会自动实例化.
在userforms类模块中工作时应该尝试使用Me关键字(userforms类似于其他对象,除了它们具有用户界面元素).在Initialize事件中,比方说
Me.Caption = "blah"
Run Code Online (Sandbox Code Playgroud)
代替
UserForm1.Caption = "blah"
Run Code Online (Sandbox Code Playgroud)
它可能(只是一个我无法证明的理论)被设置为"我指向一个真实实例"的标志不是在你更改Caption属性时设置的,而是由使用自动实例化变量UserForm1,您正在强制另一个实例化.
更好的是,不要使用自动实例化变量,尽管它们很方便(并且不要在Dim语句中使用New关键字).您可以控制何时创建和销毁变量,这是最佳实践.在标准模块中有类似的东西
Sub uftst()
Dim uf As UserForm1
Set uf = New UserForm1 'you control instantiation here
'Now you can change properties before you show it
uf.Caption = "blech"
uf.Show
Set uf = Nothing 'overkill, but you control destruction here
End Sub
Run Code Online (Sandbox Code Playgroud)
请注意,如果将ShowModal属性设置为False,则代码将继续执行,因此如果运行无模式,请不要销毁该变量.
| 归档时间: |
|
| 查看次数: |
3111 次 |
| 最近记录: |