关闭运行代码的工作簿会发生什么?

时间:2016-04-01 19:00:54

标签: excel excel-vba vba

我在网络上有一个工作簿,其中包含工作表数据并包含大量数据,VBA代码,表单等。我开发了一个自定义功能区,可通过加载项打开此文件,并在按钮打开时执行宏单击功能区。

  1. 单击功能区按钮时,它会在包含自定义功能区XML文件的加载项中执行回调。
  2. 回调中的代码使用Application.Run()打开并执行更大的网络文件,该文件包含冗长的自动化过程所需的工作表数据和宏。
  3. 如果用户通过"取消"取消操作几个表单之一上的按钮(或者如果代码成功完成执行),通过Application.Run将代码执行传递回加载自定义功能区的另一个过程。
  4. 这个" EndProcedures()"加载项中的宏关闭网络文件。
  5. 我遇到的问题是,一旦关闭包含绝大多数VBA代码的网络文件,代码执行就会停止(好像遇到了#34; End"命令)。由于用户能够在宏的中间取消操作,因此过程调用了" EndProcedures()"功能区工作簿中的宏(代码执行开始的那个)类似于调用堆栈中的#8,#2-7是驻留在#8关闭的工作簿中的过程。因为我想暂停代码执行和" EndProcedures()"中的下一行。宏只是全球"结束"无论如何,这不是一个问题。但是,在过去的几天里,我一直在努力解决一些神秘的错误,我认为这可能与我关闭工作簿的事实有关,因为它在调用堆栈中运行代码。我一直在" Out of Memory" VBA编辑器中的错误(虽然奇怪的是当VBA编辑器未打开时我还没有看到它们),我的想法是这是由于:

    1. 在文件本身被其他VBA代码关闭后,网络文件的代码窗口只是在VBA编辑器中打开,或者
    2. 也许实际的内存问题是由于文件被卸载而没有被清除,而不是" End Sub"或者"结束"正在遇到的行。
    3. 虽然我在网络文件中的宏中广泛使用自定义对象,但我对它们的内存使用非常小心(它们甚至不应该那么多)并且不要认为这段代码是"内存不足的来源"错误。现在的问题是,当代码在正在关闭的工作簿中运行时是否使用VBA代码关闭工作簿会导致内存不足"内存不足。错误,如果是这样,可以做什么,以便一旦宏执行结束,用户不会打开我的宏工作簿以肆虐。我真的需要编写适当的代码"退出Sub"一直走出调用堆栈?

      这是我在StackOverflow上的第一篇文章,尽管我可能从这里学到了50%的VBA功能,所以请耐心等待这一点。

1 个答案:

答案 0 :(得分:0)

在继续玩这几周后,似乎没有在涉及多个工作簿/模块的调用堆栈中退出代码执行是遇到的“Out of Memory”问题的根源。虽然我无法确定哪些编辑实际上解决了“内存不足”错误,但至少这个问题已经解决了我的满意程度。

P.S。 - 我回答了我自己的问题,因为它不再是一个问题,不是因为我必须指出一个决议。由于这是我在StackOverflow上的第一篇文章,如果这不是采取的正确行动,请告诉我。