微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过单击关闭 Word 中的表单 (VBA)

如何解决通过单击关闭 Word 中的表单 (VBA)

我是 VBA 新手,有一个包含多个 ActiveX 按钮的文档,每个按钮打开一个带有一些信息文本的表单。用户应该能够通过“点击离开”关闭窗口,而不必点击每个窗口的“x”。

(可能有更好的方法显示“信息框”,但 MsgBox 更糟糕,因为它还会触发声音警报。我选择了 ActiveX 按钮,因为可以轻松加载图像)

enter image description here

解决方法

这有效

经过广泛的研究(但仍然没有真正的经验),我想出了这个解决方案:

  1. 插入 ActiveX 按钮,右键单击并选择“查看代码”

  2. 您应该被定向到相应单击子中“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
    
  3. 创建新表单。表单名称必须是上面指定的“frmHelp”。现在按下创建的按钮时,将显示此表单。

  4. 要关闭打开的表单,需要一个 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
    
  5. 创建一个新的模块'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 举报,一经查实,本站将立刻删除。