【问题标题】:VBA to chart multiple named ranges on different tabsVBA在不同选项卡上绘制多个命名范围
【发布时间】:2016-11-14 13:02:12
【问题描述】:

我有一个图表,它通过分配给开发人员按钮的 VBA 宏进行更新:

ActiveChart.SetSourceData Source:=Sheets("Tab1").Range("Range1")

VBA 引用了一个命名范围 (Range1),它使用 OFFSET 逻辑以流动的方式引用所需的数据范围。

=OFFSET('data sheet'!$A$6,0,0, COUNTIF('data sheet'!$A$7:$A$506,">1")+1,COUNTIF('data sheet'!$A$3:$GT$3,"*"))

我现在需要在此图表中添加更多系列,并希望将范围 2 添加到我的图表中,但发现将我的 VBA 修改为以下内容不起作用:

ActiveChart.SetSourceData Source:=Union(Sheets("Tab1").Range("Range1"),Sheets("Tab2").Range("Range2"))

ps,我没有在此处包含示例数据集,因为该过程的所有部分都使用动态命名范围,因此只要变量以列形式存储,建立在任何 nXn 数据网格上的解决方案都应该在这里工作

【问题讨论】:

  • 你能尝试用macrorecorder添加更多的来源,看看它会产生什么吗?
  • 您好,记录器不使用 .SetSourceData 语法。它产生:ActiveChart.SeriesCollection.NewSeries ActiveChart.FullSeriesCollection(23).Name = "='Tab2" ActiveChart.FullSeriesCollection(23).Values = _ "='Tab2'!$B$7:$B$201"

标签: vba excel


【解决方案1】:
ActiveChart.SeriesCollection.Add [Range2]

【讨论】:

  • 我知道这不是原始问题的一部分,但如果我的范围包括列标题,我可以添加一行 VBA:ActiveChart.SeriesCollection.Add [Range2],以便将第 1 行用作列标题比 excel 目前在将其添加为系列的一部分时所做的事情?
  • 以上行返回一个Series对象,你可以修改它的属性。您可以编写 Dim s As Series: Set s = ActiveChart.SeriesCollection.Add([Range2]) s.Property... 或 With ActiveChart.SeriesCollection.Add([Range2]) .Property... End With。我认为您需要 ApplyDataLabels。您可以通过按 F2 在 VBA 编辑器中查找这些属性和方法。确切的代码取决于工作表的确切布局。
  • 嗯,SeriesCollection.Add 有一个标签参数,所以你可以写 ActiveChart.SeriesCollection.Add Source:=[Range2] SeriesLabels:=[Range3] 之类的东西。
  • 我已经完成了上述所有操作,但没有任何乐趣。我将 Range1 设置为原始范围,但不包括带有列标题的行,然后创建 Range2 作为列标题并运行 ActiveChart.SeriesCollection.Add [Range], SeriesLabels:=[Range] 但什么也没发生???
  • 意思是ActiveChart.SeriesCollection.Add [Range1], SeriesLabels:=[Range2]
【解决方案2】:

你可以试试这个吗:

ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).Name = "=" & [my_range].Name

而不是联合。 [my_range] 在您的情况下应该是 Range2。

【讨论】:

  • 谢谢@Vityata - 如何添加 tab2 元素?...还是不需要? Range2 坐落并引用tab2 数据
  • 尝试不使用 tab2 元素。 “Range2”应该注意它。
  • ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "=" & Range2.Name 给我一个“需要对象”错误,ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "=" & "Range2" 给我一个“应用程序/对象定义错误”
  • ActiveChart.SeriesCollection(2).Name = "=" & [Range2].Name
  • 抱歉,我没有意识到我必须包括方括号。它仍然给出应用程序/对象定义的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 2017-10-01
相关资源
最近更新 更多