2009-03-03 9 views
2

同じブックからコピーしたグラフがありますが、各グラフのソースデータ(42個のグラフ、それぞれ6つのシリーズ)には完全なファイル名のパスが含まれています。ソースシートとセルは同一なので、パス文字列を見つけて ""で置き換えたいだけです。しかし、私はソースコードの名前を取得する方法を見つけることができません(refeditボックスに表示されるように)。そこから、私は必要なものを置き換えることができます。我々が持っているものプログラムでグラフのソースデータ名にアクセス

はこれです:

ActiveChart.SeriesCollection(1).Values = "='C:\[oldfile.xls]Charts.Data'!R1C17:R1C28"

そして私は単なる文字列として「」の一部を取得し、ファイルパスを削除するには、私の機能を実行します。私はすなわち、試してみて、そこから文字列を取得した場合:

sourcestring = ActiveChart.SeriesCollection(1).Values

私はエラーを取得します。 VBAはそれを読み込むときは配列と見なしますが、割り当て時には文字列を使用できます。何か案は?

答えて

1

あなたはそうです、refeditボックスに表示されている同じ数式を実際に得ることはできません...あなたが作業しているシリーズの.Formulaまたは.FormulaR1C1プロパティを操作し、再構築しなければなりません数式を設定し、値および/またはxvaluesプロパティに設定します。

このコードは動作するはずです

、式の異なる部分を引き出すためのいくつかの機能があります...私はそれがあなたのために働くべきだと思う、または少なくともうまくいけば、あなたが行うことが最善だかを把握に役立つ...

Sub ChangeActiveChartData() 
    ChangeChartData ActiveChart 
End Sub 

Sub ChangeChartData(TheChart As Chart) 
    If TheChart Is Nothing Then Exit Sub 

    Dim TheSeries As Series 
    Set TheSeries = TheChart.SeriesCollection(1) 

    Dim TheForm As String 
    TheForm = TheSeries.FormulaR1C1 

    Dim XValsForm As String 
    XValsForm = GetXValuesFromFormula(TheForm) 
    Debug.Print XValsForm 
    XValsForm = GetRangeFormulaFromFormula(XValsForm) 
    Debug.Print XValsForm 

    Dim ValsForm As String 
    ValsForm = GetValuesFromFormula(TheForm) 
    Debug.Print ValsForm 
    ValsForm = GetRangeFormulaFromFormula(ValsForm) 
    Debug.Print ValsForm 

    XValsForm = "=" & TheChart.Parent.Parent.Name & "!" & XValsForm ' TheChart's parents parent is the worksheet; we're assuming the chart is embedded in a worksheet 
    ValsForm = "=" & TheChart.Parent.Parent.Name & "!" & ValsForm 

    TheSeries.XValues = XValsForm 
    TheSeries.Values = ValsForm 

End Sub 

Function GetXValuesFromFormula(SeriesFormula As String) As String 
    ' Find string between first and second commas 
    Dim FormulaParts() As String 
    FormulaParts = Split(SeriesFormula, ",") 
    GetXValuesFromFormula = FormulaParts(1) 

End Function 

Function GetValuesFromFormula(SeriesFormula As String) As String 
    ' Find string between second and third commas 
    Dim FormulaParts() As String 
    FormulaParts = Split(SeriesFormula, ",") 
    GetValuesFromFormula = FormulaParts(2) 

End Function 

Function GetRangeFormulaFromFormula(TheFormula As String) As String 
    ' return to the right of the ! character in theformula 
    Dim ExclamPos As Integer 
    ExclamPos = InStrRev(TheFormula, "!") 
    If ExclamPos > 0 Then 
     GetRangeFormulaFromFormula = Right(TheFormula, Len(TheFormula) - ExclamPos) 
    Else 
     GetRangeFormulaFromFormula = TheFormula 
    End If 
End Function 
関連する問題