2014-02-17 47 views
0

我有一个随滑块按钮更改的动态散点图。为了做到这一点,我使用两个命名范围与偏移功能,这些命名的范围会有所不同,当我移动滑块按钮增加或减少X和Y范围的最终值。当我制作此表时,问题就出现了。在新的工作表的图表不会对串联式的命名范围,而是它采用的是在第一片材计算的范围内,这样的:使用VBA将散点图XY系列更改为命名范围

在第一片我有此:

=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

'new sheet' or new workbook?Workbook范围的命名范围是什么? “它并不总是有效”听起来好像你可能已经“几乎在那里”了你是否考虑过发布该代码或者其中的一部分是一个问题? – pnuts

回答

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 

希望这可以用相同的问题,因为我的人是有用的。

感谢

0

以下过程是一个有点痛,但它保留了脆弱的工作范围的名称。

  1. 用工作表和图表保存工作簿。
  2. 将带图表的工作表移动(不要复制)到新的工作簿。
  3. 关闭第一个工作簿而不保存,所以重新打开后, 仍然有工作表和图表。
  4. 使用移动的工作表和图表 (例如TempChart.xlsx)保存并关闭新工作簿。如果在以下步骤6中使用 ,此工作簿现在可以用作模板。
  5. 重新打开原始工作簿。
  6. 重新打开新的工作簿。将工作表和图表 从新工作簿移动(不要复制)到原始工作簿。

无论何时您需要此工作表和图表的其他副本,请按照步骤6重新打开新工作簿,并将工作表移动到所需的现有工作簿中。

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