添加工作表后,VBA Excel 代码停止执行

Posted

技术标签:

【中文标题】添加工作表后,VBA Excel 代码停止执行【英文标题】:VBA Excel code stops execution after adding a worksheet 【发布时间】:2019-09-25 03:48:55 【问题描述】:

我似乎偶然发现了一个我似乎无法解决的问题。我目前正在使用 2 个单独的工作簿,其中一个是运行代码的活动工作簿,另一个是我需要打开的单独工作簿:

On Error GoTo ErrorHandler:

Set manWb = ActiveWorkbook

Application.AutomationSecurity = msoAutomationSecurityForceDisable
Set conWb = Workbooks.Open(PARDirOTC & PARFileOTC, ReadOnly:=False)
Application.AutomationSecurity = msoAutomationSecurityByUI

ActiveWindow.Visible = False

On Error GoTo 0

我将 AutomationSecurity 设置为 msoAutomationSecurityForceDisable 以防止第二个工作簿运行其 Workbook_Open 事件,其中包含我在这种情况下不需要的代码。该错误处理事件似乎永远不会激活,并且代码继续运行没有问题。

从现在开始一切都很好,我在这两个工作簿之间收集和交换数据,似乎没有任何问题。也就是说,直到我需要在第二个工作簿上创建一个工作表,即名为“conWb”的工作表。

Set conOT = conWb.Sheets.Add(After:=conWb.Sheets(conWb.Sheets.Count))

这是令人不安的线。工作表已创建,但此时代码突然停止执行。根本没有错误消息,什么也没有弹出,它只是停止了。我注意到代码显然停止执行,并切换到新创建的工作表中的代码,该工作表是空白的,其中没有任何内容。我不明白为什么。

我环顾四周,其他人似乎也发现了类似的问题,但他们的解决方案都不适合我。我尝试过使用几个应用程序设置,如 EnableEvents、ScreenUpdating、AutomationSecurity 等,但没有任何效果。在代码中,我还尝试删除或注释掉所有“On Error”事件,担心它们可能隐藏一个可以解释这种行为的错误,但似乎并非如此。

如果有比我更有经验的人能帮助找出导致这种行为的原因,我将不胜感激。提前致谢。

亲切的问候

【问题讨论】:

如果您只需要阻止Workbook_Open 事件,只需使用Application.EnableEvents = False 而不是AutomationSecurity “运行代码的活动工作簿” 请注意,运行代码的工作簿是 ThisWorkbook 而不是 ActiveWorkbook,后者是具有焦点的工作簿/ 在上面! ActiveWorkbook 可以切换为用户在代码运行时单击的任何工作簿。 我也注意到了。有时.Sheets.Add(... 会失败并在没有错误消息的情况下破坏模块,尤其是当大量活动在某处排队时。我希望有人知道解决方案。顺便说一句:.Sheets.Add(.. 激活新添加的工作表。这不是故障,这是一个特点。 【参考方案1】:

按照您的建议,在打开第二个工作簿时使用 Application.EnableEvents 而不是 Application.AutomationSecurity,最终解决了整个问题。像这样:

On Error GoTo ErrorHandler:

Set manWb = ActiveWorkbook

Application.EnableEvents = False
Set conWb = Workbooks.Open(PARDirOTC & PARFileOTC, ReadOnly:=False) 
Application.EnableEvents = True

ActiveWindow.Visible = False

On Error GoTo 0

据我所知,AutomationSecurity 可用于在以编程方式打开工作簿时禁用所有宏,我认为这足以阻止 Workbook_Open 事件,但我假设我没有其他事件不知道,或者 AutomationSecurity 设置的工作方式与我最初想象的不同。

不管怎样,问题似乎已经解决了,所以谢谢。

亲切的问候

【讨论】:

以上是关于添加工作表后,VBA Excel 代码停止执行的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA 停止而没有错误消息

Excel VBA 函数在完成前停止执行而没有错误消息

EXCEL的VBA,在执行大量工作时,开始很快,后面很慢。不知道如何解决。

VBA 工作薄中所有工作表怎么用代码表示

MS Excel 2010 - 使用 Abs() 的计算在放置在其他 VBA 中时停止工作

从 C# 运行 Excel 宏:从 VBA 捕获运行时错误