【问题标题】:Old workbook (once opened by VBA) keeps opening when I open another excel file当我打开另一个 Excel 文件时,旧工作簿(曾经由 VBA 打开)继续打开
【发布时间】:2014-10-11 19:29:23
【问题描述】:

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

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

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

所以我有两个问题:

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

2.) 如果不关闭通过 VBA 打开的工作簿,一般会有什么后果吗?

我的相关代码是:

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

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

...
MyWB.Close False
MyXL.Quit

感谢您对此的任何帮助!

【问题讨论】:

  • 或者您的 Personal.xlsb 文件中有一些代码?
  • 打开 Excel,转到 VBA 编辑器,在左侧,您看到个人文件了吗?如果是,那么打开ThisWorkbook,看看你那里有没有代码?
  • 不,“此工作簿”下没有特定文件的代码..

标签: excel vba ms-access


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    1.)您应该设置错误处理,以便在出现不可恢复的错误时关闭 Workbook 和 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.) 不关闭工作簿的唯一后果是显而易见的后果 - 它正在使用的系统资源,如果它是打开编辑,其他人都无法编辑它。

    【讨论】:

    • 我实际上已经在我的项目中途实现了错误处理,所以打开工作簿的问题可能在那之前就已经发生了。但是我没有得到的错误处理的一件事可能会影响我遇到的问题:1)假设我仍在开发代码,并且我想获得由“on error goto”生成的窗口0"(默认)用于立即调试,那么这也会中断文档的关闭,对吗?使用“on error goto errorhandler”后,我可以以某种方式将其发送回发生错误的位置吗?
    • 2) 其次,如果我在某个时候退出子(假设是因为用户不想覆盖现有数据),那么我有一个带有“退出子”的 IF 语句在里面。但是,这样,代码永远不会到达最后的关闭工作簿代码。我已经在类似的项目中看到过这样的退出,但我不确定我是否应该在整个 sub 的每个退出语句之前包含结束语句?非常感谢罗斯的帮助!
    • 关于您的第一条评论,将MyWB.Close FalseMyXL.Quit 放在即时窗口中,同时调试就可以解决问题。此外,在任务管理器的进程选项卡中,您还可以查看隐藏的 excel 实例并作为最后手段强制关闭它们。关于第二条评论,是的,如果你想关闭并退出 excel 应用程序,你应该这样做。
    • 1) 是的,Resume 关键字用于在遇到错误后在下一行恢复执行。 2) 子例程中的所有退出点应GoTo 关闭工作簿的处理程序标签。这是处理任何类型的打开文件或访问特定于子例程范围的外部数据的对象的正确方法 - 当抛出错误时,在退出子例程之前将它们全部关闭。
    • 如果系统提示您结束/调试窗口,进入调试模式,并纠正了编码错误,您可以按 F5 或按播放按钮继续执行。您还可以单击并拖动遇到错误的突出显示行旁边的黄色箭头,然后将其移动以更改按播放或 F5 时恢复执行的位置。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 2018-12-29
      相关资源
      最近更新 更多