我有一个动态散点图,它随滑块按钮而变化。为了做到这一点,我使用具有偏移功能的两个命名范围,当我移动滑块按钮增加或减少X和Y范围结束值时,这些命名范围会发生变化。当我复制这张表时会出现问题。新工作表中的图表不会在系列公式中具有命名范围,而是采用第一个工作表中计算的范围,如下所示:
在第一张表中我有:
=Serie('old_sheet'!$AD$3;'old_sheet'!DEF_RANGE;'old_sheet'!STRESS_RANGE;1)
但是当我复制时,新表中的图表将变为:
=Serie('new_sheet'!$AD$3;'new_sheet'!$G$19:$G$578;'new_sheet'!$F$19:$F$578;1)
所以我需要手动更改公式:
=Serie('new_sheet'!$AD$3;'new_sheet'!DEF_RANGE;'new_sheet'!STRESS_RANGE;1)
我问是否有人可以帮我实现一个简单的按钮,将系列公式更改为我想要的。
我试图记录我改变公式的步骤的宏...但它并不总是有效。
有点卡在这里......我将不胜感激任何帮助!
问候
答案 0 :(得分:0)
我自己已经弄清楚了...这是我使用的代码:
Private Sub CommandButton1_Click()
sheet_name = ActiveSheet.Name
MsgBox ("some message")
ActiveSheet.ChartObjects("Graph_1").Activate
ActiveChart.SeriesCollection(1).Select
ActiveSheet.ChartObjects("Graph_1").Chart.SeriesCollection(1).Values = " '" & sheet_name & "'!stress_range"
ActiveSheet.ChartObjects("Graph_1").Chart.SeriesCollection(1).XValues = " '" & sheet_name & "'!def_range"
End Sub
希望这对与我有同样问题的人有用。
由于
答案 1 :(得分:0)
以下过程有点痛苦,但它保留了脆弱的工作表范围名称。
每当您需要此工作表和图表的另一个副本时,请按照步骤6重新打开新工作簿,然后将工作表移动到所需的现有工作簿中。
答案 2 :(得分:0)
我想出了一个关于我所拥有的大型程序的小变体,它假定复制的工作表上有一个图表,而该图表中有一个绘制的系列。
Sub FixSeriesRangeRefs()
Const sXVALNAME As String = "DEF_RANGE"
Const sYVALNAME As String = "STRESS_RANGE"
Dim sFormula As String
Dim vFormula As Variant
Dim sXVals As String
Dim sYVals As String
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
sFormula = .Formula
vFormula = Split(sFormula, ",")
sXVals = vFormula(LBound(vFormula) + 1)
sXVals = Left$(sXVals, InStr(sXVals, "!")) & sXVALNAME
vFormula(LBound(vFormula) + 1) = sXVals
sYVals = vFormula(LBound(vFormula) + 2)
sYVals = Left$(sYVals, InStr(sYVals, "!")) & sYVALNAME
vFormula(LBound(vFormula) + 2) = sYVals
sFormula = Join(vFormula, ",")
.Formula = sFormula
End With
End Sub