在Excel / VBA中,为什么appevent_WindowDeactivate不按我期望的方式工作?

时间:2014-12-03 07:45:03

标签: excel vba excel-vba events

在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

0 个答案:

没有答案