首页 > 解决方案 > ThisWorkbook.close 无法始终如一地工作

问题描述

ThisWorkbook.Close 的工作方式不同,具体取决于宏的执行方式。如果用户单击工作簿按钮执行宏,则当一切完成且宏完成时,ThisWorkbook.Close将按预期关闭工作簿。如果宏在工作簿打开时自动执行(Workbook_Open()),则 ThisWorkbook.Close 不会关闭工作簿。

打开工作簿后,Workbook_Open()调用主例程 Notes.OpenForm。在Workbook_Open()模块中"ThisWorkbook",OpenForm 在模块中"Notes"

如果用户点击一个按钮,它会执行SendETSNote_Click()它也调用Notes.OpenForm. SendETSNoteSheet1(ETS Notes Form)module 中并从 module 调用 OpenForm Notes

我已经包含了 的代码Workbook_Open()SendETSNote()以及尝试关闭工作簿的例程 -Done_Click()存储在Notes模块中。

更多背景知识:OpenForm 将工作簿调整为最小尺寸并打开用户表单。我希望用户看不到 Excel 工作簿而只看到用户表单。用户填写表单并通过电子邮件发送其内容后,用户可以单击“完成”,这将关闭表单并关闭工作簿。

如前所述,如果宏通过 Workbook_Open() 启动,ThisWorkbook.Close 不会关闭工作簿。如果宏在 之前启动SendETSNote_Click(),则工作簿将关闭。

Private Sub Workbook_Open()
    Call Notes.OpenForm
End Sub


Private Sub SendETSNote_Click()
    Call Notes.OpenForm
End Sub


Sub Done_Click()
'
' Upon document close, shut down Outlook if running and started within this code
'

    If outlookRunning = True Then
        'If we started Outlook from within this code, then close it
        oOutlookApp.Quit
    End If
'
'   Turn off screen updating so user doesn't see resizing
'   Resize Excel sheet to max before closing
'   Close without saving changes
'

    Application.ScreenUpdating = False
    Application.WindowState = xlMaximized
    ActiveWindow.WindowState = xlMaximized
'
'   Close the form
'

    Unload Me

    ThisWorkbook.Activate
    Application.ScreenUpdating = True
    ThisWorkbook.Saved = True
    ThisWorkbook.Close False
    Exit Sub

End Sub

无论宏如何启动,我都希望 ThisWorkbook.Close 关闭工作簿。

标签: excelvba

解决方案


推荐阅读