Pet*_*ter 5 excel excel-formula named-ranges excel-charts excel-2016
我正在尝试自动化包含大量工作表的电子表格的图表。
我正在模板工作表上构建我需要的所有图表/图形,并使用命名的 range 使它们动态化(OFFSET + COUNT)
。完成此模板后,我希望能够复制工作表(同时将其保留在同一工作簿中),并在我在每个新工作表上放入新数据时更新图表。
每个工作表都将使用相同的范围名称(通用金融词,例如margin
和volume
),因此我将它们限制在使用它们的工作表中(而不是全局范围)。
当我复制工作表时,图表中引用的命名范围将替换为静态单元格地址,而不是随图表一起复制。动态命名范围与工作表一起复制,并且只能在新工作表上引用(这就是我想要的)。
有没有办法让图表保持动态命名范围?
您只需重新指定系列值即可。这是一个非常简单的案例,包含 1 个系列集合和 1 个图表,您可以在其中复制工作表 1。工作表 1 中已存在一个名为 DynRange 的动态系列。下面的子项只是将复制图表中的系列设置回该范围。
您可以开发它来循环复制工作表中的所有图表。您可能需要已经循环原始图表及其所有系列来存储(在数组中?)图表名称、系列名称/数字和关联的命名范围,以便您可以正确应用到新范围。
或者循环并在sheet2上设置图表1,系列1=图表1在sheet2系列1上等等。
注意:您可以将工作表另存为官方 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
Run Code Online (Sandbox Code Playgroud)
这是我提到的一个粗略且现成的版本,用于将所有图表和所有系列设置循环到表 1 中的等效动态范围。请注意,我仅使用 1 个图表和 2 个动态系列进行了测试。
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
Run Code Online (Sandbox Code Playgroud)
数据:
参考:
归档时间: |
|
查看次数: |
2052 次 |
最近记录: |