当我打开另一个excel文件时,旧工作簿(一旦由VBA打开)保持打开状态

时间:2014-08-18 19:41:48

标签: excel excel-vba access-vba open-closed-principle vba

我正在Access中构建一个数据库,我从中导入了Excel工作簿调查问卷中的数据。我编写了一个Import-sub,用于选择,打开,检索数据并最终关闭工作簿。

问题是这个:由于某种原因,当我现在在我的计算机上打开任何excel工作簿时(在没有使用Access或Excel的时候),一些旧版本的调查问卷一直在打开同样。此问题不会通过重新启动计算机而结束,而只能通过删除该特定问卷 - 工作簿来结束。但随后它开始与另一本工作簿发生。

我有一个理论认为这可能是因为我 - 在我的import-sub中 - 打开了调查问卷,遇到了一个运行时错误,它在关闭工作簿之前已经结束了sub,而且工作簿仍然是“打开”。或者仍然存在活动链接。

所以我有两个问题:

1。)有谁知道如何解决这个问题?

2。)通常不会因关闭通过VBA打开的工作簿而产生任何后果吗?

我的相关代码是:

Dim MyXL As Excel.Application
Dim MyWB As Excel.Workbook
...

在很多事情发生之间,多次发生错误而中断程序。

...
MyWB.Close False
MyXL.Quit

感谢您的任何帮助!

3 个答案:

答案 0 :(得分:1)

我确实遇到了同样的问题,发现Excel将在每次启动Excel时打开的文件存储在文件夹(XLSTART)中。我的路径是:c:\USERS\MyUserName\AppData\Roaming\Microsoft\Excel\XLSTART

正如Ross McConeghy所建议的那样,错误处理可以防止这种情况的发生。但是错误已经发生,并且正如您所建议的,调查表已将该工作簿放置在XLSTART文件夹中。您必须将其从该文件夹中删除,以解决不必要的情况。

答案 1 :(得分:0)

你的理论很可能。如果您从未显示Excel应用程序,则会遇到错误,并且您的代码永远不会关闭工作簿,它将在后台保持打开状态,您的代码很可能会丢失对它的引用。下次打开Excel文件时,已打开(但从视图中隐藏)的Excel实例“拾取”请求并打开文件,同时显示仍然从宏打开的文件。

1。)您应该设置错误处理,以便在出现不可恢复的错误时关闭工作簿和Excel应用程序。

Sub MySub()
    On Error GoTo handle_Err

    <... code ...>

    Exit Sub
handle_Err:
    MyWB.Close False
    MyXL.Quit
End Sub

如果您的代码中有其他错误处理语句,请始终重置为On Error GoTo handle_Err而不是GoTo 0等。

2。)不关闭工作簿的唯一后果是显而易见的 - 它正在使用的系统资源,如果它是开放的编辑,没有其他人可以编辑它。

答案 2 :(得分:0)

我遇到了类似的问题,并以不同的方式解决了它。 我找到了与外部工作簿的连接,并通过转到“数据”>“编辑链接”来修复它。