我创建了一个模板工作表,其中包含一些图表,这些图表使用动态命名范围在新数据被删除时进行更新 . 这些命名范围仅限于他们自己的工作表,而不是具有工作簿范围 . 我打算使用该模板构建一个包含许多需要引用自己命名范围的选项卡的工作簿 . 我将此模板保存在默认的Excel模板文件夹中,以便我可以通过右键单击选项卡,单击“插入”并从列表中选择它来插入模板 .

插入模板工作表并将其从"Template"重命名为"Product 1"后,某些图表引用不会更新,仍然使用"Template"工作表名称引用命名范围,而不是将它们更新为"Product 1"工作表名称 . 当我选择未更新的图表中的数据时,通常在功能栏中可见的 =SERIES 不存在,我无法编辑功能栏 . 当我编辑图表中的数据时,命名范围仍然引用"Template"工作表名称(例如 =Template!Gross_Margin 而不是 ='Product 1'!Gross_Margin ) . 如果我将引用保留为"Template"并按Enter键,则Excel表示它是无效引用 . 当我检查名称管理器时,没有引用"Template"工作表的命名范围 .

我搜索了一个宏来解决问题,并用新的工作表名称替换旧工作表名称的所有引用,并找到以下代码:

Sub ChangeSeriesFormulaAllCharts()
    ''' Do all charts in sheet
    Dim oChart As ChartObject
    Dim OldString As String, NewString As String
    Dim mySrs As Series
    Dim iChartType As XlChartType
    Dim sFormula As String

    OldString = InputBox("Enter the string to be replaced:", "Enter old string")

    If Len(OldString) > 1 Then
        NewString = InputBox("Enter the string to replace " & """" _
            & OldString & """:", "Enter new string")
        For Each oChart In ActiveSheet.ChartObjects
            For Each mySrs In oChart.Chart.SeriesCollection
                sFormula = ""
                On Error Resume Next
                sFormula = mySrs.Formula
                On Error GoTo 0
                ' change to column chart if series is inaccessible
                If Len(sFormula) = 0 Then
                    iChartType = mySrs.ChartType
                    mySrs.ChartType = xlColumnClustered
                End If
                mySrs.Formula = WorksheetFunction.Substitute(mySrs.Formula, OldString, NewString)
                If Len(sFormula) = 0 Then mySrs.ChartType = iChartType
            Next
        Next
    Else
        MsgBox "Nothing to be replaced.", vbInformation, "Nothing Entered"
    End If
End Sub

这段代码的问题是它使用 =SERIES 功能,正如我上面提到的,我无法编辑 . 当我运行上面的代码时,它返回了一条错误消息 .

这个问题完全违背了使用模板的意义,因为我试图避免逐个更新图表引用 . 我最终会在这个工作簿中有大约50个工作表,每个工作表大约有10个图表,所以这样做需要花费太长时间 .

起初我认为这是由于我在构建模板时不小心做的事情所以我用一个新的工作表重新整理了整个事情,但完全相同的图表中完全相同的系列不会更新工作表名称 . 图表是散点图,条形图,折线图和组合图 .

我在设置中是否缺少某些东西,或者这只是模板固有的东西?如果是后者,有没有办法用宏来用新的工作表名称替换对旧工作表名称的所有引用?