我正在尝试为包含大量工作表的电子表格自动化图表。
我正在构建模板工作表上所需的所有图表/图表,并使用命名范围(OFFSET + COUNT)
使其动态化。一旦我完成了这个模板,我希望能够复制工作表(同时将其保存在同一个工作簿中)并在我在每个新工作表上放入新数据时更新图表。
每个工作表都会使用相同名称作为范围(margin
和volume
等通用财务字词),因此我将它们限制在工作表中他们被使用(而不是全球范围)。
当我复制工作表时,图表中引用的命名范围将替换为静态单元格地址,而不是使用图表进行复制。动态命名范围与工作表一起复制,只能在新工作表上引用(这就是我想要的)。
有没有办法让图表保持动态命名范围?
答案 0 :(得分:0)
您可以简单地重新指向系列值。这是一个非常简单的案例,包含1系列集合和1个图表,您可以在其中复制工作表1.有一个名为DynRange的动态系列已存在于工作表1中。下面的子系统只是将复制图表中的系列设置回此范围。 / p>
您可以开发此选项以循环复制的工作表中的所有图表。您可能需要将原始图表及其所有系列循环存储(在数组中?)图表名称,系列名称/编号和相关的命名范围,以便您可以正确应用于新范围。
或循环并在sheet2上设置图表1,系列1 =在sheet2系列1等上的图表1。
注意:您可以将工作表另存为official Excel模板并使用它。
Option Explicit
Sub ResetRange()
Sheets("Sheet1").Select
Sheets("Sheet1").Copy Before:=Sheets(1)
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.FullSeriesCollection(1).Values = "=Sheet1!DynRange"
End Sub
这是我提到的粗略和准备好的版本,将所有图表和所有系列设置循环到工作表1中的等效动态范围。注意我只测试了1个图表和2个动态系列。< / p>
Option Explicit
Public Sub ResetRange()
Dim wb As Workbook
Dim sourceSheet As Worksheet
Set wb = ThisWorkbook
Set sourceSheet = wb.Sheets("Sheet1")
sourceSheet.Copy Before:=Sheets(1)
Dim currChart As Long
Dim currSeries As Series
Dim thisChart As Chart
Dim thisSeries As Long
With ActiveSheet
For currChart = 1 To .ChartObjects.Count
Set thisChart = .ChartObjects(currChart).Chart
For thisSeries = 1 To thisChart.SeriesCollection.Count
thisChart.SeriesCollection(thisSeries).Formula = sourceSheet.ChartObjects(currChart).Chart.SeriesCollection(thisSeries).Formula
Next thisSeries
Set thisChart = Nothing
Next currChart
End With
LoopNamedRanges ActiveSheet
End Sub
Private Sub LoopNamedRanges(ByVal ActiveSheet As Worksheet)
Dim nm As Name
For Each nm In ActiveWorkbook.Names
If nm.RefersToRange.Parent.Name = ActiveSheet.Name Then
nm.Delete
End If
Next nm
End Sub
数据:
参考文献: