我已经尝试了所有关闭应用程序的方法,但保留在任务管理器的后台打开
Dim appXL As Object, fileXL As Object, nameXlFile, filePath As String
filePath = file_dir & "\" & file_name
Set appXL = CreateObject("Excel.Application")
appXL.Visible = False
Set fileXL = Workbooks.Open(FileName:=filePath , ReadOnly:=True)
......
appXL.quit
set appXL = Nothing
appXL.quit
set appXL = Nothing
答案 0 :(得分:4)
当您从另一个VBA应用程序自动化Excel并使用非限定Excel对象时,会出现此模式。它的种类,它要求VBA运行时在对象的父级上创建隐藏/虚拟引用。
您必须通过自动化使用Excel对象非常具体。当从另一个应用程序驱动时,Excel对非限定对象变得不太容忍。 限定所有内容。从
开始Set fileXL = appXL.Workbooks.Open(FileName:=filePath , ReadOnly:=True)
' ^^^^^^^
并确保代码中的每个Excel对象都是完全限定的。
此外,如果可以,最好使Excel应用程序可见,以观察发生的情况。有时会出现由于某种原因显示警报,即未保存的工作簿。可以使用
禁用这些警报appXL.DisplayAlerts = False
也很有用,但至少在应用程序的开发阶段,让appXL可见是有用的,直到你对它相当熟悉。
P.S。
我使用和不使用明确appXL.
限定条件在MS-Word中测试了您的代码,删除了......
中的所有其他内容。没有资格,Excel的实例仍留在任务管理器中。凭借资格,它消失了。
答案 1 :(得分:3)
尝试在您写“.....”的地方添加以下内容:
fileXL.Close False
这会在您退出应用程序之前强制关闭文件。
我相信Excel会询问您是否要保存工作簿(即使它已作为Readonly打开)。退出例程后,这会使Excel保持打开/活动状态,但您无法看到它。
完整的代码应该是这样的:
Sub OpenExcelWorkbook()
Dim appXL As Object, fileXL As Object, nameXlFile, filePath As String
filePath = file_dir & "\" & file_name
Set appXL = CreateObject("Excel.Application")
appXL.Visible = False
Set fileXL = Workbooks.Open(FileName:=filePath , ReadOnly:=True)
' Do additional/optional stuff with your workbook here...
fileXL.Close False ' Close the workbook without saving
appXL.quit
End Sub
答案 2 :(得分:2)
你可以尝试这样:
Dim appXL As Object, fileXL As Object, nameXlFile, filePath As String
filePath = file_dir & "\" & file_name
Set appXL = CreateObject("Excel.Application")
appXL.Visible = False
Set fileXL = Workbooks.Open(FileName:=filePath , ReadOnly:=True)
fileXL.Save
fileXL.Close
您不需要set appXL = Nothing
,因为appXL
是范围内的变量
目前的程序和“垃圾收集器”会照顾它。