这是场景。我有多个excel工作簿,可以相互复制和粘贴数据。因此宏工作从open.copy.close从一个工作簿,然后open.paste.close到另一个工作簿。我正在创建一个函数,以便在文件关闭时自动运行宏。
这就是问题所在,当我点击工作簿1中的宏按钮时,应该从工作簿2中打开open.copy.close。但是,由于工作簿2中文件关闭时的自动运行,将发生错误(2个宏无法同时运行)任何解决方案?我正在寻找一个解决方案只有当文件关闭时自动运行宏如果它是一个活跃的工作簿。这就是我现在所拥有的:
Workbook 1
Sub workbook_beforeclose(cancel As Boolean)
Application.Run "Sheet1.UpdateYellowTabs_Click"
End Sub
Workbook 2
Sub Workbook_BeforeClose(Cancel As Boolean)
Workbook.BeforeClose
Application.Run "Sheet12.UpdateGreen_Click"
End Sub
如何在工作簿代码中对其进行编码,以便仅在人工用户激活/关闭时才运行,而不是在宏打开/关闭时运行?
谢谢!
答案 0 :(得分:0)
嗯,我不确定从中了解你的最终目标,但我可以回答"技术"题。从技术上讲,如果要检查给定的工作簿是否处于活动状态:If Application.ActiveWorkbook Is Me
,
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not Application.ActiveWorkbook Is Me Then Exit Sub ' <-- add this test
''''''''''''''''''''''''''
' Whatever code goes here
''''''''''''''''''''''''''
End Sub
修改强>
但问题是,调用wb2.close
会使工作簿wb2
成为&#34;活跃的&#34;一个在执行宏期间。所以这种方法不起作用。另一种方法是在关闭工作簿之前禁用事件;以便事件Workbook_BeforeClose
不会触发。之后,您可以根据需要启用事件。代码如下所示:
' ... open wb2 and do the work with it
Application.EnableEvents = False
wb2.Close False
Application.EnableEvents = True
请注意,如果您已经在当前宏的开头禁用了事件(通常建议使用),则不需要此附加代码。