[英]How to close blank excel workbook along with Macro workbook?
我有2个Excel工作簿,一个包含宏,另一个工作簿称为宏工作簿。
在主工作簿打开事件中,宏工作簿将在同一应用程序实例中打开,当工作簿关闭时,我正在关闭宏工作簿,然后编写了Appication.Quit,但是这里的问题是在关闭宏工作簿后打开了一个空白的Excel Remians。
如何通过VBA关闭空白工作簿?
顺便说一句,我仅在2013年就在Office 2007和2010中面临此问题,没有空白的Excel。
以下是Macro.xlsm
- Module1
的代码
Public Sub Test()
MsgBox "Test"
End Sub
Public Sub Auto_Close()
ThisWorkbook.Saved = True
End Sub
以下是Test.xlsm - Thisworkbook
的代码Test.xlsm - Thisworkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Workbooks("Macro.xlsm").Close
Module1.CodeFileClose
End Sub
Private Sub Workbook_Open()
Module1.CodeFileOpen
End Sub
以下是Test.xlsm - Module1
的代码
Public Sub CodeFileOpen()
Application.Workbooks.Open ("C:\Macro.xlsm")
Application.Run "Macro.xlsm!Test"
End Sub
Public Sub CodeFileClose()
MsgBox "Before Close"
Application.Quit
End Sub
Application.Quit
, 要么
thisworkbook.close
会再次触发您的workbook_beforeclose事件!!!!
所以你会循环
在test.xlsm的thisworkbook部分中:
Private Sub Workbook_BeforeClose(Cancel As Boolean) 'if you get in here, workbook is already going to close
on error resume next 'if macro.xlsm not opened it would cause an error
thisworkbook.saved= true ' (=no save) or false(=save) or delete line if you want to be asked
with Application
.displayalerts=false 'set to true if want to be asked before saving
.enableevents=false 'block events from both workbooks
.Workbooks("Macro.xlsm").Close
.enableevents=true 'enable events from both workbooks
end with
'Module1.CodeFileClose 'will cause looping (except if you add application.enableevents=false, but then it will be the case for all excell and you wont be able to triger events, or reset it to true by code)
End Sub
据我了解,您想关闭宏工作簿以及最初打开工作簿的工作簿。
如果是正确的话,为什么不尝试在CodeFileClose()中尝试以下代码:
Public Sub CodeFileClose()
MsgBox "Before Close"
Workbooks("Macro.xlsm").Close
End Sub
如果我错了,请提供更多有关您的问题的详细信息。
这是我的方法。 诀窍是使用Application.Parent.Quit
关闭应用程序的父级:
Sub Close_the_whole_excel_window()
Dim New_session_Excel as New Excel.Application
New_session_Excel.Workbooks.Open Filename:=(Path&FileName), ReadOnly:=True
New_session_Excel.Quit ' This will close the workbook and leave an extra Excel window that stays behind
New_session_Excel.Parent.Quit ' This will close the extra Excel window that stays behind
End Sub
我通过先关闭父级然后关闭应用程序来使其工作:
ActiveWorkbook.Save
Application.DisplayAlerts = False
Excel.Parent.Quit
Application.Quit
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.