2

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

私たちが持っているのはこれです:

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

そして、「」の部分を文字列として取得し、関数を実行してファイルパスを削除したいだけです。そこから文字列を取得しようとすると、つまり:

sourcestring = ActiveChart.SeriesCollection(1).Values

エラーが発生します。VBAはそれを読み取るときに配列と見なすようですが、割り当てるときに文字列を使用できます。何か案は?

4

1 に答える 1

1

そうです、refedit ボックスに表示されているのと同じ数式を実際に取得することはできません...作業中のシリーズの .Formula または .FormulaR1C1 プロパティを操作し、数式を再構築して設定する必要がありますそれを values および/または 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
于 2009-03-03T14:37:49.277 に答える