如何处理Excel仍然是错误的

让我让自己更清楚。 我需要访问一个Excel文件,但是当我尝试时,应用程序说,不可能访问被引用的文件。 问题是它没有打开。

然后我意识到任务pipe理器包含一些Excel实例,所以我放弃了它们。 好吧,它工作得很好,但最终用户不想这样做,所以我需要通过代码来做到这一点。

请帮帮我! 提前致谢。

你的问题并不完全清楚,但是我认为你是从Access VBA中自动运行Excel的,而且在完成Excel之后,它不能正常closures,所以下一次你的Access VBA代码运行时,它不能打开文件,因为它已经打开。

如果是这种情况,您需要确保在VBA代码中正确closuresExcel。 没有看到你确切的代码,很难确定你需要做什么,但它应该是沿着这些线( wb是一个工作WorkBookws是一个工作WorkSheetappApplication对象):

 wb.Save wb.Close app.Quit Set ws = Nothing Set wb = Nothing Set app = Nothing 

另一方面,如果您的意思是说,locking文件的Excel实例不是由您的代码启动的,则会变得更加困难。 您可以编写代码来终止当前正在运行的所有Excel进程,但这可能意味着您要杀死用户正在使用的或由另一个自动进程使用的Excel实例,所以除非您可以说100%确定你的应用程序总是在专用计算机上运行。

到目前为止,查看你的其他问题,我也认为你使用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") 

如何指出,其余的Excel进程表明你已经结束了你的代码而不closuresExcel文件。 这可能是因为你忘记了,或者相关的代码没有运行(也许是因为一个错误;同时你已经在你的评论中肯定了我的假设)。 有帮助的是确保(至less在开发过程中)始终使Excel可见(请参阅上面的代码示例),以便查看可能的错误,防止您的工作簿被保存,从而退出Excel。 对于你的最终代码(当你不想显示Excel,即不要显示Excel),你可能想检查文件a)是否真的被保存,b)工作簿是closures的,没有其他工作簿保持打开状态,像这样

 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 Andreas