【问题标题】:Reference to ActiveSheet Object Outside of VBA引用 VBA 之外的 ActiveSheet 对象
【发布时间】:2014-01-10 03:12:10
【问题描述】:

我希望运行以下任务:

1:使用动态图表创建模板工作表(即图表链接到大小经常变化的数据范围)

2:模板被多次复制到新的工作表中,每个工作表使用循环通过另一个工作表中的 PivotItems 的代码自动重命名。

3:然后将数据透视表中的日期复制到这些重复的工作表中,每个工作表中的动态表现在反映了复制到其中的数据。

尽管遇到以下问题,但我已经编写了大部分这些任务。动态图表是通过引用使用 OFFSET 和 COUNTA 函数定义的命名范围来创建的。每次模板重复时,我都会使用以下代码在新工作表中设置要定义的命名范围:

ActiveWorkbook.ActiveSheet.Names.Add Name:="Label", RefersToR1C1:= _
    "=OFFSET(ActiveSheet!R46C3,1,0,COUNTA(ActiveSheet!R46C3:R69C3)-2)"
ActiveWorkbook.ActiveSheet.Names("Label").Comment = ""

ActiveWorkbook.ActiveSheet.Names.Add Name:="YTD2012", RefersToR1C1:= _
    "=OFFSET(ActiveSheet!R46C5,1,0,COUNTA(ActiveSheet!R46C3:R69C3)-2)"
ActiveWorkbook.ActiveSheet.Names("YTD2012").Comment = ""

ActiveWorkbook.ActiveSheet.Names.Add Name:="YTD2013", RefersToR1C1:= _
    "=OFFSET(ActiveSheet!R46C6,1,0,COUNTA(ActiveSheet!R46C3:R69C3)-2)"
ActiveWorkbook.ActiveSheet.Names("YTD2013").Comment = ""

[我使用的是聚集柱形图,因此需要两个与数据相关的命名范围,一个与数据标签相关的命名范围]

鉴于每次运行报表时工作表名称都会不同,因此需要 ActiveSheet 对象。但是,在为模板上的图表选择数据源时,我无法引用 ActiveSheet,因为这是一个 VBA 对象。考虑到它们的格式和位置,我宁愿保留在模板上预先格式化的图表(而不是每次通过 VBA 创建它们)。有没有办法在 Excel 中引用 ActiveSheet 或类似的东西,或者是在 VBA 中为每个工作表创建图表的唯一解决方案?

【问题讨论】:

    标签: excel vba dynamic


    【解决方案1】:

    如果您不包含工作表名称,它将默认为活动表:

    ActiveWorkbook.ActiveSheet.Names.Add Name:="Label", RefersToR1C1:= _
        "=OFFSET(R46C3,1,0,COUNTA(R46C3:R69C3)-2)"
    

    如果您确实想使用工作表名称,那么它将是 ActiveSheet.Name

    With ActiveWorkbook.ActiveSheet
        .Names.Add Name:="Label", RefersToR1C1:= _
        Replace("=OFFSET('<nm>'!R46C3,1,0,COUNTA('<nm>'!R46C3:R69C3)-2)","<nm>", .Name)
    End With
    

    如果工作表名称可以包含空格,则需要添加单引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      相关资源
      最近更新 更多