让我让自己更清楚。我需要访问Excel文件,但是当我尝试时,应用程序说不可能访问引用的文件。问题是它没有打开。
然后我意识到任务管理器包含一些Excel实例,所以我退出了它们。好的,它运行得很好,但最终用户不想这样做,所以我需要通过代码来做到这一点。
请帮帮我!提前谢谢。
答案 0 :(得分:1)
您的问题并不完全清楚,但我认为您正在使用Access VBA自动化Excel,并且在您完成Excel后,它没有正确关闭,因此下次您的Access VBA代码运行时,它可以'打开文件,因为它已经打开了。
如果是这种情况,您需要确保在VBA代码中正确关闭Excel。如果没有看到您的确切代码,很难确定您需要做什么,但它应该是这些内容(wb
是WorkBook
,ws
是{{1 }和WorkSheet
是app
对象):
Application
如果另一方面你的意思是你的代码没有启动锁定文件的Excel实例,那么它就变得有点困难了。您可以编写代码来终止当前正在运行的所有Excel进程,但这可能意味着您要杀死用户当前正在使用的Excel实例或正在被另一个自动化进程使用的Excel实例,因此除非您能说,否则它将非常危险100%确定您的应用程序将始终在专用计算机上运行,而不确定其他任何内容。
答案 1 :(得分:1)
到目前为止查找您的其他问题我还假设您使用VBA从Access自动化Excel。我假设你有一些代码
Dim objExcel As Excel.Application
Dim curWorkbook As Excel.Workbook
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set curWorkbook = objExcel.Workbooks.Open("C:\Temp\Excel.xls")
正如ho指出的那样,剩余的Excel进程表明您已经结束了代码而没有关闭Excel文件。可能是您忘记这样做或者相关代码没有运行(可能是因为错误;同时您在评论中肯定了我的假设)。有用的是确保(至少在开发期间)始终使Excel可见(请参阅上面的代码示例),以便您看到可能的错误,这些错误会阻止您的工作簿被保存,从而退出Excel。 对于您的最终代码(当您不想显示Excel时,即不要将其显示为可见),您可能需要检查文件a)是否真的已保存,b)工作簿已关闭且其他工作簿仍未打开,例如像这样
If objExcel.Workbooks.Count = 0 Then
objExcel.Quit
Else
[Problem. Try to find and solve the problem before ending the code]
End If
你会考虑添加代码以捕获错误并确保excel确实已经结束,无论如何。
On Error GoTo ErrCleanupImport
[your normal Code]
ErrCleanupImport:
[quit excel and clean up]
End Sub
HTH 安德烈亚斯