我有一个工作簿可以减少Workbook_Open
上的Excel窗口大小,并在其上启动一个用户窗体,这会产生一种幻觉,即它充当应用程序(而不是电子表格)而没有隐藏的风险完全申请。当用户窗体关闭时,我们必须将应用程序窗口设置恢复到合理的大小。
当用户单击“取消”时,这适用于当前代码,这会使窗口最大化并保存更改,但是当从UserForm_QueryClose
调用相同的代码时,似乎Application.WindowState = xlMaximize
不会触发。
以下是针对UserForm_QueryClose
和cmdCancel_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如何处理此类调用时遇到了一些不可避免的不一致?
答案 0 :(得分:0)
您不需要Cancel = True
行。它阻止了If-Then
块的执行。