从UserForm_QueryClose调用按钮单击代码不能按预期工作

时间:2014-04-15 02:45:40

标签: excel excel-vba vba

我有一个工作簿可以减少Workbook_Open上的Excel窗口大小,并在其上启动一个用户窗体,这会产生一种幻觉,即它充当应用程序(而不是电子表格)而没有隐藏的风险完全申请。当用户窗体关闭时,我们必须将应用程序窗口设置恢复到合理的大小。

当用户单击“取消”时,这适用于当前代码,这会使窗口最大化并保存更改,但是当从UserForm_QueryClose调用相同的代码时,似乎Application.WindowState = xlMaximize不会触发。

以下是针对UserForm_QueryClosecmdCancel_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_Click替换为Call MsgBox("Click 'Cancel'", vbOKOnly)将强制执行正确的行为(因为它强制用户通过“取消”按钮),但它更加混乱,需要额外的步骤为用户。出于类似的原因,我不想只关闭X按钮(我也成功地做了),因为用户不会想到要关闭该功能。

单击“取消”时,Application.WindowState方法为什么工作(按预期方式)的任何想法,但不是从QueryClose调用时?这可以按预期工作,还是我在VBA如何处理此类调用时遇到了一些不可避免的不一致?

1 个答案:

答案 0 :(得分:0)

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