使用VBA修改dynamic名称

我有一个电子表格链接到其他几个电子表格,以拉取数据编译成一张表; 我负责修改工作表来绘制这些数据。 一个人的报告中每个月有一排12个插槽; 如果一个人在一个月内工作,那么该月将显示在适当的位置。 对于图我已经想出了使用dynamic名称范围,以便图中的月份数等于行中存在的月份数; 唯一的问题是,开始指针是根据一个人开始的月份而变化的。

我能够做出一个相当大的嵌套if语句,但这似乎不是一个很好的方法来解决我的问题。 有没有办法可以让VBA脚本更改dynamic名称范围的值,或直接修改图表的值? 如果这不是一个可行的select是否有任何其他方式来解决这个问题,而不是一个dynamic命名范围?

我无法改变这个报告表的行为方式,因为这是一个与工作有关的电子表格,这就是他们希望报告的原因。 我只是想添加graphicsfunction。

例子:

https://www.dropbox.com/s/zn6yt4l6kjvwq33/Example1.xlsx https://www.dropbox.com/s/j88tgoik68s4lhx/Example2.xlsx

在第一个示例中,当您从“代理名称”旁边的收存箱中select“第二个”时,会看到一个问题示例。 它包括图中没有意义的数据。

在第二个示例中,我通过向图表中使用的dynamic命名范围添加if语句来解决问题; 但正如你所看到的包括2个月现在是巨大的,并包括所有12这几乎是不可能的。 如果我要添加一个在三月份开始的第三人,他们也不会在第二个例子中工作。

有没有一种方法可以使dynamic名称范围内的值可以通过VBA进行更改? 我可以使用VBA直接修改图表的值吗? 有没有办法绕过这个问题,甚至没有使用VBA?

谢谢。

(我不是100%肯定我已经理解了这个问题,但是这可能至less有助于进一步…)

尝试定义三个名字,如下所示:

start_month data chart_data 

其中, start_month包含要绘制的列的编号, data是所有十二列数据,例如=OFFSET($C$1,0,0,COUNT($A:$A),12)chart_dataselect你想从数据中得到的列,例如=INDEX(data, , start_month)

现在使用您的工作簿的任何名称将您的图表系列设置为WorkbookName!chart_data 。 随着start_month值的更改,图表中显示的值也应该相应变化。

您可以在VBA中添加或修改Name ,如:

 Dim nm As Name Dim rng As Range 'Here, you could use a more complicated expression' ' to derive the proper address dynamically.' Set rng = Sheets("Sheet1").Range("A2:A25") 'Now, add a Name to the workbook:' Set nm = ActiveWorkbook.Names.Add("My_Name", rng) 

使用一些string函数/variables,你可以派生/限制VBA中的范围地址。