在 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 = FalseApplication.EnableEvents = True 之间,以确保没有其他事件处理程序捕获您的线路将触发的Worksheet_Activate 事件。

【讨论】:

有趣 - 我在调用函数中设置了 Application.EnableEvents,但该设置没有传递到子。将其添加到子程序中可以解决问题。谢谢

以上是关于在 Excel 2016 中,当宏与工作表关联时,VBA 不会激活备用工作表的主要内容,如果未能解决你的问题,请参考以下文章

宏与VBA

宏与VBA

宏与VBA

excel两个工作表如何关联

Excel中改变排序后,关联的工作表的数据就改变了,如何让关联的数据保持不变?

excel如何在一个工作表中输入内容筛选另一个表里的相关联内容