2014-02-26 53 views
1

通过访问VBA我打开工作簿,并使可见= False,然后我做了一些事情,并关闭。但它仍在任务管理器中运行。Excel工作簿通过VBA代码关闭仍在运行的过程

 Dim ExcelApp As New Excel.Application 
    Dim ExcelBook As New Excel.Workbook 
    Dim rng As Excel.Range 
    Dim rngDefine As Excel.Range 

    Set ExcelBook = ExcelApp.Workbooks.Open("C\temp\find.xlsm") 
    ExcelApp.Visible = False  

    '//Do something 

    ExcelApp.Quit 
    ExcelBook.Close SaveChanges:=False 
    Set ExcelBook = Nothing 
    Set ExcelApp = Nothing   
+3

我会在退出Excel之前关闭工作簿。 –

+0

@Doug格兰西谢谢你。 – vuyy1182

回答

2

上述评论是正确的,您的新工作簿与您的ExcelApp实例无关。所以最后你要关闭新的ExcelApp实例并关闭你创建的新工作簿,但我认为新的工作簿是在Excel的新实例中打开的......也许,所以你仍然会看到一个孤立的Excel进程任务管理器。我会将您的代码更改为如下所示:

Dim ExcelApp as Excel.Application 
Dim ExcelBook as Excel.Workbook 
Dim rng As Excel.Range 
Dim rngDefine As Excel.Range 
Set ExcelApp = New Excel.Application 
Set ExcelBook = ExcelApp.Workbooks.Open("C\temp\find.xlsm") 
'ExcelApp.Visible = False You could maybe comment this out unless you use ".Activate" somewhere. It should be the default anyway. 
... 
'At the end: 
ExcelApp.DisplayAlerts = False 
ExcelBook.Close 
ExcelApp.DisplayAlerts = True 
ExcelApp.Quit 
'If right before "End Sub" the next two lines are of arguable necesity, but likely good practice 
Set ExcelBook = Nothing 
Set ExcelApp = Nothing 
+0

最近我也遇到了这个麻烦,我会评论说,如果你使用了不合格的范围或工作表或工作簿,即使它可以保持过程开放。工作簿上的每一个命令都应该引用完全 - excelapp.excelbook.excelsheet.range(“A1”)我有一天发疯了,直到我意识到我的.Find函数在其参数中包含了非限定的“Range” – Acantud

+0

@Acantud I觉得我有时候过于严格,但是由于我一直得到的奇怪的“OLE自动化错误”,我开始将所有东西都设置为对象。让所有东西完全锁定,似乎也避免了这一点。 – MattB

相关问题