2011-03-24 55 views
0

让我让自己更清楚。我需要访问Excel文件,但是当我尝试时,应用程序说无法访问引用的文件。问题是它没有打开。如何处理Excel仍然是错误

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

请帮帮我!提前致谢。

回答

1

你的问题并不完全清楚,但我认为你是通过Access VBA实现Excel的自动化,并且在完成Excel之后,它不能正常关闭,因此下次Access VBA代码运行时,它可以打开文件,因为它已经打开。

如果是这种情况,您需要确保在VBA代码中正确关闭Excel。没有看到你确切的代码,这是很难肯定地说,你需要做的,但它应该是东西沿着这些路线(wbWorkBookwsWorkSheetappApplication对象):

wb.Save 
wb.Close 
app.Quit 

Set ws = Nothing 
Set wb = Nothing 
Set app = Nothing 

另一方面,如果您的意思是说,锁定文件的Excel实例不是由您的代码启动的,则会变得更加困难。您可以编写代码来终止当前正在运行的所有Excel进程,但这可能意味着您要杀死用户当前正在使用的或正在被另一个自动进程使用的Excel实例,因此除非您可以说 - 100%肯定您的应用程序将始终运行在专门的计算机上,而不是其他任何东西。

+0

你明白我的意思,除了最后一部分,但我承认我是不太清楚。我的意思是我无法在屏幕上的任务栏中看到引用的Excel,但是ir出现在任务管理器中。 Excel是由我的代码启动的,但是我的代码崩溃了。 – 2011-03-24 14:42:30

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") 

由于浩指出,其余的Excel进程表明您已经结束了您的代码,而不必关闭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 

你考虑添加代码捕获错误(S),并确保Excel是的确已经结束,不管是什么。

On Error GoTo ErrCleanupImport 
[your normal Code] 


ErrCleanupImport: 
    [quit excel and clean up] 

End Sub 

HTH 安德烈亚斯