宏执行后活动工作簿随机更改

Posted

技术标签:

【中文标题】宏执行后活动工作簿随机更改【英文标题】:Active workbook is randomly changed after macro execution 【发布时间】:2016-07-28 05:50:26 【问题描述】:

在我运行一个宏(从 sql server 中选择记录,不引用另一个工作簿)后,其他打开的工作簿之一被随机激活。 宏在 book1 中,我从 book1 运行宏。 最后, book2(或 book3 等)被激活。为什么?! 我试着在 End Sub 之前放

Dim Wb As Workbook  
Set Wb = Active/ThisWorkbook  
Wb.Activate   

msgbox "ok"  

但仍会飞到另一个打开的工作簿(在 book2 上弹出消息框) 这件事并非每次都会发生,只是有时会随机发生。 谢谢你

更新:由于我在 book2 中修复了循环引用,因此似乎停止了。

【问题讨论】:

宏是否将结果放入新书? Debug.Print Wb.Name 返回什么? 您是否尝试过关注 Application.Activeworkbook 并在更改时中断,不确定这是否有效,因为无法在 mo 进行测试。 我认为这是因为Set Wb = Activeworkbook 将 Wb 变量设置为在运行宏之前处于活动状态的工作簿。请改用Set Wb = ThisWorkbook 【参考方案1】:

See Difference Between ActiveWorkbook and ThisWorkbook

Sub Bus()
Dim Wb As Workbook
Set Wb = ActiveWorkbook
Debug.Print Wb.Name

Set Wb = ThisWorkbook
Debug.Print Wb.Name


End Sub

如果你把上面的代码放在 Book2 中。模块 1 并选择 Book1 并运行它

您将在即时窗口中获得以下输出:

Book1
Book2

【讨论】:

我得到 book1,无论是 activeworkbook 还是 thisworkbook。 能否贴出设置截图和完整代码(如果有)?

以上是关于宏执行后活动工作簿随机更改的主要内容,如果未能解决你的问题,请参考以下文章

VBA事件:工作簿事件-工作表事件

如何关闭空白 Excel 工作簿和宏工作簿?

活动工作簿更改链接

vba:以 xlsm 文件格式保存而不更改活动工作簿

从宏查询(加入)外部工作簿

Excel 宏根据用户输入时间自动刷新工作簿