【问题标题】:Set a Chart series source to a named range via Macro通过宏将图表系列源设置为命名范围
【发布时间】:2016-07-09 03:47:07
【问题描述】:

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

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

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 选择语句,以防万一这是问题,但这并没有解决问题。我检查了集合应该设置为正确评估的语句(例如,"=='" & TempSheet.Name & "'!PDates" 评估为“=='风险 1'!PDates”,这是该系列应该指出的)。

有了这个,我很困惑,如果有人能提供任何帮助,我将不胜感激。提前致谢!

【问题讨论】:

  • 是公式开头连续有两个等号的问题吗?除此之外,它应该可以工作。

标签: excel vba charts named-ranges


【解决方案1】:

与其使用试图成为范围的字符串,不如尝试一个真正的范围,然后获取它的值:

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

(等)

【讨论】:

  • 试一试,我没有收到任何错误,但是当我手动检查该系列的源时,它已设置为“={#N/A,#N/A,#N /A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A}"。
  • 当我从每个语句的末尾删除“.Value”时,该系列最终设置为命名范围所涵盖的范围,这很接近,但我真的很想设置它到命名范围(以避免在源范围添加更多行时更新图表范围)
  • 请注意,我已经实现了代码,以便在将新行添加到图表的源范围时,执行该添加的宏会更新图表以包含新行。不理想,但它可以完成工作。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2014-03-17
    • 1970-01-01
    相关资源
    最近更新 更多