在VBA之外引用ActiveSheet对象

时间:2014-01-09 17:57:35

标签: excel vba dynamic

我希望执行以下任务:

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

2:将模板多次复制到新工作表中,每个工作表使用循环遍历另一个工作表中的数据透视表的代码自动重命名。

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中为每个工作表创建图表的唯一解决方案?

1 个答案:

答案 0 :(得分: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

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