Excel窗口和用户窗体的最小化和最大化功能

5
我目前在打开一个用户窗体,它在Excel实例的顶部,并设置为除了用户窗体之外不能与任何东西进行交互。由于没有办法最小化这个程序,我在用户窗体上创建了一个“最小化”按钮。当单击该按钮时,隐藏用户窗体并缩小Excel窗口,就像预期的那样。
然而,当我点击被最小化的Excel应用程序来恢复窗口时,我希望用户窗体再次出现,并像以前一样显示在其后面的Excel窗口也能显示(现在只有Excel窗口显示)。
是否有任何函数或触发器可以监听,允许我在单击并恢复Excel实例时再次显示我的用户窗体?以下是我当前如何最小化所有内容的方式:
Private Sub CommandButton15_Click()
Me.Hide
Application.WindowState = xlMinimized
End Sub

你使用的 Excel 版本是哪个? - David Zemens
1个回答

7
当您显示表单时,可能会执行以下操作:
UserForm.Show
Show方法接受一个可选参数,用于指定是以模态(Modal)还是非模态(Modeless)方式显示表单。默认情况下使用模态显示,这将不允许与工作表/工作簿对象交互。因此,当您要显示表单时,请执行以下操作:
UserForm.Show vbModeless
这样可以让用户与工作表/工作簿进行交互,从而避免了自定义按钮的需要,并且不需要执行Me.Hide。最小化应用程序会使UserForm也最小化。最大化应用程序将重新显示工作簿和用户窗体。
如果您必须使用UserForm的vbModal显示(在许多应用程序中,这是一个故意要求,以防止用户与工作簿/工作表交互),请告诉我。可能有一些事件或应用程序事件可以更好地捕获最小化/最大化。
更新:
或者,您可以采用以下方法。此方法会隐藏Excel应用程序,并缩小UserForm的大小,然后在单击Userform并再次显示Excel应用程序时调整其大小。
Private Sub CommandButton15_Click()
'Hide Excel and minimize the UserForm
    Application.Visible = False
    Me.Height = 10
    Me.Width = 10

End Sub

Private Sub UserForm_Click()
'Show Excel and resize the UserForm
    Application.Visible = True
    Me.Height = 180
    Me.Width = 240
End Sub

Private Sub UserForm_Terminate()
'Ensure that the Application is visible and the form resized
    UserForm_Click
End Sub

是的,如果可能的话,我不希望用户能够与实际的Excel工作表等进行交互。保持vbModal状态将是理想的。 - Glynbeard
这看起来应该可以做到你想要的事情,http://social.msdn.microsoft.com/Forums/office/en-US/94dbe32c-d0b2-4875-b098-f27aabd2b1ae/excel-deactivate-event 但理想情况下,通常应该避免使用这种方法。最小化应用程序通常不是理想的选择,而且这些WinAPI调用很棘手。在Excel中,没有本地事件可捕获应用程序最小化/最大化。 - David Zemens
我有一个可能行得通的替代方案。我会更新我的答案。 - David Zemens
1
虽然这不完全是我想要的,但我认为这会起作用。或者至少给我足够的想法来解决这个问题。谢谢! - Glynbeard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接