通过宏将Chart系列源设置为命名范围

时间:2014-08-20 18:54:05

标签: excel vba charts named-ranges

我有一张包含现有图表的工作表和适当的动态命名范围,可以为该图表提供正确的数据。

我的问题是,工作表是一个复制的模板,副本的图表不再指向命名的范围。命名区域被复制到工作表(范围是特定于工作表),因此看起来应该只是更新系列源数据。当我手动记录时,好的旧记录给了我以下语法:

ActiveChart.SeriesCollection(1).XValues = "=='Risk 1'!PDates"
ActiveChart.SeriesCollection(1).Values = "=='Risk 1'!Plan"
ActiveChart.SeriesCollection(2).XValues = "=='Risk 1'!ADates"
ActiveChart.SeriesCollection(2).Values = "=='Risk 1'!Actuals"

我试图将它们重置为命名范围,修改后的版本为:

For Each Cht In TempSheet.ChartObjects
    'Series 1 is the Plan
    Cht.Activate 
    ActiveChart.SeriesCollection(1).XValues = "=='" & TempSheet.Name & "'!PDates"
    ActiveChart.SeriesCollection(1).Values = "=='" & TempSheet.Name & "'!Plan"

    'Series 2 is the Actuals
    ActiveChart.SeriesCollection(2).XValues = "=='" & TempSheet.Name & "'!ADates"
    ActiveChart.SeriesCollection(2).Values = "=='" & TempSheet.Name & "'!Actuals"
Next

我在尝试更新第一个系列的X值的语句中遇到错误“应用程序定义或对象定义的错误”。

我还尝试添加PlotArea select语句,以防万一是问题所在,但这并没有解决问题。我检查了集合应该被设置为正确评估的语句(例如"=='" & TempSheet.Name & "'!PDates"评估为“=='风险1'!PDates”,这是系列应该指向的内容)。

有了这个,我很难过,并且会感激任何人都能提供的任何帮助。提前谢谢!

2 个答案:

答案 0 :(得分:0)

不是使用尝试作为范围的字符串,而是尝试实际范围,然后获取其值:

ActiveChart.SeriesCollection(1).XValues = TempSheet.Range("PDates").Value

(等)

答案 1 :(得分:0)

如果“模板”工作表具有您想要的数据和图表,但使用虚拟数据,请将其另存为官方Excel模板。然后,当您需要其中一个工作表时,右键单击工作表选项卡并单击“插入...”在对话框中选择模板,然后单击“确定”。根据模板插入此工作表时,其图表将链接到工作表中的名称。