[英]How to close blank excel workbook along with Macro workbook?
I have 2 Excel workbooks one contains Macros and the other workbook calls Macro workbook. 我有2个Excel工作簿,一个包含宏,另一个工作簿称为宏工作簿。
In main workbook open event Macro workbook will be opened in the same application instance and when the workbook closes I am closing Macro workbook and after that I have written Appication.Quit, but here the problem is after closing Macro workbook one blank excel remians open. 在主工作簿打开事件中,宏工作簿将在同一应用程序实例中打开,当工作簿关闭时,我正在关闭宏工作簿,然后编写了Appication.Quit,但是这里的问题是在关闭宏工作簿后打开了一个空白的Excel Remians。
How to close the blank workbook through VBA? 如何通过VBA关闭空白工作簿?
By the way I am facing this issue in Office 2007 and 2010 only in 2013 there is no blank excel. 顺便说一句,我仅在2013年就在Office 2007和2010中面临此问题,没有空白的Excel。
Below is the code in Macro.xlsm
- Module1
以下是
Macro.xlsm
- Module1
的代码
Public Sub Test()
MsgBox "Test"
End Sub
Public Sub Auto_Close()
ThisWorkbook.Saved = True
End Sub
Below is the code in Test.xlsm - Thisworkbook
以下是
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
Below is the code in Test.xlsm - Module1
以下是
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
, or , 要么
thisworkbook.close
will trigger again your workbook_beforeclose event !!!! 会再次触发您的workbook_beforeclose事件!!!!
so you will be looping it 所以你会循环
in test.xlsm , thisworkbook section : 在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
From my understanding, you want to close your macro Workbook along with your Workbook that initially opened the Workbook. 据我了解,您想关闭宏工作簿以及最初打开工作簿的工作簿。
If that is right, why don't you try in your CodeFileClose() Sub the following code: 如果是正确的话,为什么不尝试在CodeFileClose()中尝试以下代码:
Public Sub CodeFileClose()
MsgBox "Before Close"
Workbooks("Macro.xlsm").Close
End Sub
If I'm wrong please give a few more details on your problem. 如果我错了,请提供更多有关您的问题的详细信息。
Here is how I did it. 这是我的方法。 The trick is to close the parent of the application with
Application.Parent.Quit
: 诀窍是使用
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
I got it to work by closing the parent first and then the application: 我通过先关闭父级然后关闭应用程序来使其工作:
ActiveWorkbook.Save
Application.DisplayAlerts = False
Excel.Parent.Quit
Application.Quit
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.