在Excel中,使用VBA,我打开了非模态窗体,其中是执行宏的按钮。我使用.Open事件来提升表单。
我的桌面很忙,需要在表单的底层电子表格和其他应用程序之间来回切换。我想在a)缩小excel窗口时折叠/隐藏表单,或者b)当我激活另一个应用程序的窗口时。
我的目的是将一个form.hide和form.show放在一个相关的事件子例程中,当我在另一个应用程序中时删除该表单,并在我关注excel电子表格时重新出现
我原以为会有一个事件响应失去焦点(或停用)。但是,在设置类和应用程序事件时,应用程序的windowactivate和deactivate仅在整个应用程序打开和关闭时触发,但不会在我仅将另一个窗口置于顶部时触发。
让用户表单隐藏和返回对我来说在收缩窗口的过程中对我有用。
所以,我的问题是:什么是关于appevent_windowactivate不能让它按照我期望的方式工作?为什么没有一种简单的方法来实现这一目标。应用程序级事件代码派生自MS站点。虽然,由于某种原因,调整大小的事件也不起作用。
----代码---(我尝试了所有可能的事件,如下所示,并使用msgbox找出有效的方法)
- 模块中的代码 -
dim myobject As New Class1
Sub setEvents() 'this is called from the workbook open event
Set myobject.appevent = Application
MsgBox "hello from myEvent"
End Sub
- 班级中的班级代码 -
Public WithEvents appevent As Application
Private Sub appevent_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
frmMacroButtons.Show
MsgBox "appevent_WindowActivate"
End Sub
Private Sub appevent_WindowDeactivate(ByVal Wb As Workbook, ByVal Wn As Window)
frmMacroButtons.Hide
MsgBox "appevent_WindowDeactivate"
End Sub
Private Sub appevent_WindowResize(ByVal Wb As Workbook, ByVal Wn As Window)
MsgBox "appenvent_WindowResize"
End Sub
Private Sub appevent_WorkbookActivate(ByVal Wb As Workbook)
frmMacroButtons.Show
MsgBox "appevent_WorkbookActivate"
End Sub
Private Sub appevent_WorkbookDeactivate(ByVal Wb As Workbook)
frmMacroButtons.Hide
MsgBox "appevent_WorkbookDeactivate"
End Sub
- 本工作手册中的代码
Private Sub Workbook_Activate()
frmMacroButtons.Show
MsgBox "Workbook_activate "
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
frmMacroButtons.Show
MsgBox "Workbook_Windowactivate"
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
frmMacroButtons.Hide
MsgBox "Workbook_WindowDeactivate"
End Sub
Private Sub Workbook_Deactivate()
frmMacroButtons.Hide
MsgBox "Workbook_Deactivate "
End Sub
Private Sub Workbook_Open()
setEvents
frmMacroButtons.Show
End Sub