在 Excel 2016 中,当宏与工作表关联时,VBA 不会激活备用工作表
Posted
技术标签:
【中文标题】在 Excel 2016 中,当宏与工作表关联时,VBA 不会激活备用工作表【英文标题】:With Excel 2016, VBA will not activate an alternate worksheet when the Macro is associated with a worksheet 【发布时间】:2018-03-26 02:28:34 【问题描述】:我有一个与我的“简介”表相关联的宏。它由单元格更改触发,然后调用第二个宏来操作另一个工作表“TimeInLibraryData”。很简单:
Private Sub Worksheet_Change(ByVal Target As Range)
Sheets("TimeInLibraryData").Visible = True
Sheets("TimeInLibraryData").Activate
MsgBox "The name of the active sheet is " & ActiveSheet.Name
Call CreateTimeLine.CreateTimeLine1(1)
End Sub
Public Sub CreateTimeLine1(PickSingleLib As Long)
Sheets("TimeInLibraryData").Activate
MsgBox "The name of the active sheet is " & ActiveSheet.Name
End Sub
您可以看到我正在输出活动工作表名称。问题是,在显示的两个地方,我看到 ActiveSheet 是“介绍”表,而它应该是“TimeInLibraryData”
应用程序是用 Excel 2010 编写的,我刚刚更新到出现问题的 Excel 2016。
在 Excel 2016 中运行,如果我在正常运行时访问 CreateTimeLine1 宏,它可以工作。我只在“介绍”工作表更改后调用宏时才看到问题。
我在 VBA 2016 中创建了一个精简示例,发现它可以按预期工作。我还在 Excel 2010 中创建了一个简单的示例,并在 Excel 2016 中运行它,它也可以工作。
所以 - 我遇到了一个非常令人困惑的情况,即运行一组用 Excel/VBA 2010 编写的宏在 Excel/VBA 2016 中无法正常工作
【问题讨论】:
【参考方案1】:我正在使用带有最新补丁的 Excel 2016,但无法重现该行为。您应该将对Sheets("TimeInLibraryData").Activate
的调用夹在Application.EnableEvents = False
和Application.EnableEvents = True
之间,以确保没有其他事件处理程序捕获您的线路将触发的Worksheet_Activate
事件。
【讨论】:
有趣 - 我在调用函数中设置了 Application.EnableEvents,但该设置没有传递到子。将其添加到子程序中可以解决问题。谢谢以上是关于在 Excel 2016 中,当宏与工作表关联时,VBA 不会激活备用工作表的主要内容,如果未能解决你的问题,请参考以下文章