如何解决通过单击关闭 Word 中的表单 (VBA)
我是 VBA 新手,有一个包含多个 ActiveX 按钮的文档,每个按钮打开一个带有一些信息文本的表单。用户应该能够通过“点击离开”来关闭窗口,而不必点击每个窗口的“x”。
(可能有更好的方法来显示“信息框”,但 MsgBox 更糟糕,因为它还会触发声音警报。我选择了 ActiveX 按钮,因为可以轻松加载图像)
解决方法
这有效
经过广泛的研究(但仍然没有真正的经验),我想出了这个解决方案:
-
插入 ActiveX 按钮,右键单击并选择“查看代码”
-
您应该被定向到相应单击子中“ThisDocument”下的 VBA。在此创建一个新表单(参见步骤 3)并将该表单显示到窗口。使用 0 是必需的,否则窗口以后不会关闭。第 4 步和第 5 步需要第二个 Sub。
Private Sub cmdHelp_Click() Dim frm As New frmHelp frm.Show 0 ' with 0 it is possible to unload window,with 1 not! Set frm = Nothing End Sub Private Sub DocumentActivateEvent() Call Register_Event_Handler End Sub
-
创建新表单。表单名称必须是上面指定的“frmHelp”。现在按下创建的按钮时,将显示此表单。
-
要关闭打开的表单,需要一个 eventHandler,即在 Word 屏幕激活(从表单切换到 Word)时触发。要关闭表单,请选择所有表单的循环。将其插入一个新的 Class 'Class1':
Private WithEvents app As Application Private Sub app_WindowSelectionChange(ByVal Sel As Selection) 'Debug.Print "Event occurred!" Dim frm As UserForm For Each frm In UserForms If frm.Enabled Then Unload frm 'form is unloaded End If Next frm End Sub Private Sub Class_Initialize() Set app = Application End Sub Private Sub Class_Terminate() Set app = Nothing End Sub
-
创建一个新的模块'modEventHandler1':
Private X As Class1 Sub Register_Event_Handler() Set X = New Class1 End Sub Sub Unregister_Event_Handler() Set X = Nothing End Sub
应该可以!重新启动 word 或手动执行“Register_Event_Handler”Makro。现在,当第 2 步中的“DocumentAcrivateEvent”被触发时,EventHandler 被初始化。希望我能帮上忙。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。