我似乎偶然发现了一个我无法解决的问题。我目前正在使用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”事件,担心它们可能隐藏了可以解释这种行为的错误,但事实并非如此。>
如果拥有比我更多经验的人可以帮助您找出这种行为的原因,我将非常感激。预先感谢。
亲切的问候
答案 0 :(得分:0)
打开第二本工作簿时,使用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设置的工作方式与我最初的想法不同。
无论哪种方式,问题似乎都可以解决,所以谢谢。
亲切的问候