【发布时间】: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(..激活新添加的工作表。这不是故障,这是一个特点。