Excel中的VBA:使用动态范围控制图表

时间:2018-09-15 12:59:28

标签: excel vba dynamic charts range

我一直在研究带有动态图表的Excel模型。本质上,用户应该能够更改图表上绘制的周期-非常简单。但是,我在使VBA正常工作方面一直存在问题(我没有收到错误,但是没有达到我的预期)。 我正在尝试做的事情:

  1. 设置动态图例(取决于用户要绘制的项目数)-项目数在Excel中定义,并简单地添加到VBA中的行数中。
  2. 设置动态范围(开始和结束取决于用户输入),但是,似乎无法定义包含用于绘制数据的范围的起始位置。

在我下面的代码中,Excel似乎忽略了Rng2中的参数,即它从53列开始绘制到77列,而不是我打算从77列到89。 另外,如果我用硬编码的引用替换Rng3的内容,它也可以正常工作(即Rng3 = .Range("$AZ5662:$AZ5667,$BY$5662:$CJ$5667"))。

怎么了?

非常感谢您!

最好的问候, 菲利普

Set Cht = .ChartObjects("Chart 14").Chart
Set Rng1 = .Range(Cells(5662, 52), Cells(5663 + Worksheets("Control").Range("F20"), 52))
Set Rng2 = .Range(Cells(5662, 77), Cells(5663 + Worksheets("Control").Range("F20"), 88))
Set Rng3 = .Range(Rng1, Rng2)
Cht.SetSourceData _
Source:=Rng3
Cht.PlotBy = xlRows

1 个答案:

答案 0 :(得分:1)

使用Range(Range1,Range2)时,它将获取Range1的左上单元格和Range2的右下单元格以建立范围。

因此,您的Rng3的结果是一个从Cells(5662,52)Cells(5663+X,88)结束的正方形,这不是您想要的。

您可以尝试另一种称为Union( Rng1 , Rng2 , .... )的方法

它将存储给定的每个Range对象的所有边界,因此它可以是几个单独的区域,甚至可以是一个奇怪的形状,例如心脏或其他物体:P