【问题标题】:With Excel 2016, VBA will not activate an alternate worksheet when the Macro is associated with a worksheet在 Excel 2016 中,当宏与工作表关联时,VBA 不会激活备用工作表
【发布时间】: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 中无法正常工作

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我正在使用带有最新补丁的 Excel 2016,但无法重现该行为。您应该将对Sheets("TimeInLibraryData").Activate 的调用夹在Application.EnableEvents = FalseApplication.EnableEvents = True 之间,以确保没有其他事件处理程序捕获您的线路将触发的Worksheet_Activate 事件。

    【讨论】:

    • 有趣 - 我在调用函数中设置了 Application.EnableEvents,但该设置没有传递到子。将其添加到子程序中可以解决问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多