Excel进程不关闭VBA

Excel进程不关闭VBA,excel,vba,ms-word,exit,Excel,Vba,Ms Word,Exit,我看到我的问题出现了好几次,但没有一个答案对我有用。。让我向你们介绍我的问题: 我只运行Word文档中的一个子组件。作为帮助,我将打开一个新的Excel文件,在其中格式化剪贴板中的内容,然后将其带回Word文件。 但在一切都完成之后,没有人能看到,我使用了Excel。 但它不会像我希望的那样作为一个过程结束。我尝试了我看到的每一种方法,但似乎没有任何效果: Application.ScreenUpdating = False ' declare Excel Objects Dim appExc

我看到我的问题出现了好几次,但没有一个答案对我有用。。让我向你们介绍我的问题: 我只运行Word文档中的一个子组件。作为帮助,我将打开一个新的Excel文件,在其中格式化剪贴板中的内容,然后将其带回Word文件。 但在一切都完成之后,没有人能看到,我使用了Excel。 但它不会像我希望的那样作为一个过程结束。我尝试了我看到的每一种方法,但似乎没有任何效果:

Application.ScreenUpdating = False

' declare Excel Objects
Dim appExcel As Excel.Application
Dim wbCalculator As Workbook
Dim wsCalculator As Worksheet

' initialize Excel Objects
Set appExcel = New Excel.Application
Set wbCalculator = Excel.Workbooks.Add
Set wsCalculator = wbCalculator.Sheets(1)

...
"My totally efficient and beautiful Code"
...

' Close Excel
wbCalculator.Saved = True
Set wsCalculator = Nothing
wbCalculator.Close False
Set wbCalculator = Nothing
appExcel.Quit
Set appExcel = Nothing

Application.ScreenUpdating = True

我希望您能帮我解决这个问题:

在这里突出显示两行代码:

Set appExcel = New Excel.Application
Set wbCalculator = Excel.Workbooks.Add
在这里,您可以看到您创建了一个名为appExcel的对象,目的是使用该对象。但是,您只需直接引用Excel对象模型,而不是appExcel。这意味着您现在在同一进程下有一个额外的Excel实例,您再也无法寻址或关闭该实例。尝试将其更改为:

Set appExcel = New Excel.Application
Set wbCalculator = appExcel.Workbooks.Add

我不确定这是否有帮助,但值得一试。你能试试wbCalculator.Close SaveChanges:=False而不仅仅是wbCalculator.Close False吗?这可能是因为你的高效漂亮的代码包含不合格的单元格调用吗?这将隐式地创建一个Excel.Application,而您不持有该应用程序的引用,因此无法拆除。啊,这里有一个隐式的Excel.Application实例。。完全错过了。还有可能OP的高效漂亮的代码隐式引用Excel。应用程序通过非限定工作表、名称、单元格、列或行调用非限定范围将调用Word对象模型。是的,这也是一个很好的观点,绝对值得OP检查他们的代码,以确保没有不合格的引用,并且所有内容都可以追溯到appExcel。我真的需要找到一种主机不可知的方法来执行Rubberduck检查…@tigeravatar先生,您是我今天的英雄。这绝对解决了问题。有时候你只是太专注于错误的地方。。。谢谢你!