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

我在Access中build立数据库,为此我从Excel工作簿问卷导入数据。 我编写了一个Import-sub,用于select,打开,检索数据并最终closures工作簿。

问题是这样的:由于某种原因,当我在计算机上打开任何Excel工作簿时(在Access或Excel未被使用的时候),问卷的一些旧版本也保持打开状态。 这个问题不会以重新启动计算机而结束,而只能通过删除特定的调查问卷工作簿来结束。 但是随后又出现了另外一本工作簿。

我有一个理论认为,这可能是因为我在我的导入子中打开了问卷,遇到了一个运行时错误,在closures工作簿之前就已经结束了这个子工作簿,而且工作簿还是“开放的”。 或者还有一个活跃的链接。

所以我有两个问题:

1)有谁知道我可以如何解决这个问题?

2.)是否通常不会closures通过VBA打开的工作簿?

我的相关代码是:

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

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

 ... MyWB.Close False MyXL.Quit 

感谢任何帮助!

你的理论是可能的。 如果您从不显示Excel应用程序,则会遇到错误,并且您的代码永远不会closures将在后台打开的工作簿,并且您的代码很可能会失去对其的引用。 下一次打开Excel文件时,已经打开(但隐藏)的Excel实例会“拾取”请求并打开文件,同时也显示从macros中打开的文件。

1.)您应该设置error handling,以便在存在不可恢复的错误时closuresWorkbook和Excel应用程序。

 Sub MySub() On Error GoTo handle_Err <... code ...> Exit Sub handle_Err: MyWB.Close False MyXL.Quit End Sub 

如果您的代码中有其他error handling语句,则始终将其重置为On Error GoTo handle_Err而不是GoTo 0等。

2.)不closures工作簿的唯一后果是显而易见的 – 它使用的系统资源,如果它是可以编辑的,没有其他人可以编辑它。