Excel 从UserForm_QueryClose调用按钮单击代码未按预期工作

Excel 从UserForm_QueryClose调用按钮单击代码未按预期工作,excel,vba,Excel,Vba,我有一个工作簿,它缩小了workbook\u Open上的Excel窗口大小,并在其上启动了一个用户表单,从而产生了一种错觉,即它是一个应用程序(而不是电子表格),而没有完全隐藏应用程序的风险。当用户窗体关闭时,我们必须将应用程序窗口设置返回到合理的大小 当用户单击“取消”时,这在当前代码中起作用,这将最大化窗口并保存更改,但当从UserForm\u QueryClose调用相同的代码时,似乎不会触发Application.WindowState=xlMaximize 以下是为UserForm\

我有一个工作簿,它缩小了
workbook\u Open
上的Excel窗口大小,并在其上启动了一个用户表单,从而产生了一种错觉,即它是一个应用程序(而不是电子表格),而没有完全隐藏应用程序的风险。当用户窗体关闭时,我们必须将应用程序窗口设置返回到合理的大小

当用户单击“取消”时,这在当前代码中起作用,这将最大化窗口并保存更改,但当从
UserForm\u QueryClose
调用相同的代码时,似乎不会触发
Application.WindowState=xlMaximize

以下是为
UserForm\u QueryClose
cmdCancel\u Click
编写的相关代码:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  If CloseMode = vbFormControlMenu Then
    Cancel = True
    Call cmdCancel_Click
  End If
End Sub

Private Sub cmdCancel_Click()
    Call Unload(Me)
    Application.WindowState = xlMaximized
    Application.DisplayAlerts = False
        ThisWorkbook.Close True
    Application.DisplayAlerts = True
End Sub
我知道(已经尝试并成功)将
Call cmdCancel\u Click
替换为
Call MsgBox(“Click'Cancel'”,vbOKOnly)
将强制执行正确的行为(因为它强制用户通过“取消”按钮),但这更混乱,需要用户执行额外的步骤。出于类似的原因,我不想只关闭X按钮(我也成功地做到了这一点),因为用户不会意外地关闭该功能


你知道为什么单击“取消”时,
Application.WindowState
方法能正常工作(如预期的那样),但在从QueryClose调用时却不能?这能按预期工作吗,或者我在VBA处理此类调用时遇到了一些不可避免的不一致吗?

您不需要
Cancel=True
行。它阻止执行
If-Then
块。

按照您的建议尝试。行为持续存在。试图将
应用程序.WindowState
直接放入
用户表单_QueryClose
中,无论
Cancel=True
与否,此操作都将失败。听到此消息,我很抱歉。我能够使用您的代码复制该问题,并按照所述进行修复。我不知道会有什么不同。祝你好运