Frage

Ich habe einige Diagramme, die ich kopiert habe, über die von einem identischen Arbeitsmappe, aber die Quelldaten für jede Grafik (42 Diagramme, mit 6-Serie in jedem), noch enthält den vollständigen Dateinamen Pfad.Die source-Blatt und Zellen identisch sind, so will ich nur den Weg finden Zeichenfolge und ersetzen Sie es mit "".Aber ich kann nicht einen Weg finden, um den Namen des sourcedata (wie es scheint, in das refedit).Von dort aus kann ich das ersetzen, was ich brauche.

Was wir haben, ist diese:

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

Und ich will einfach nur, um das Teil in "" als ein string, und führen Sie die Funktion entfernen Sie den Dateipfad.Wenn ich versuchen und bekomme einen string von es, z.B.:

sourcestring = ActiveChart.SeriesCollection(1).Values

Ich erhalte eine Fehlermeldung;es scheint VBA hält es für ein array beim Lesen, sondern können eine Zeichenfolge verwenden, wenn zugewiesen.Irgendwelche Ideen?

War es hilfreich?

Lösung

Du hast Recht, man kann nicht wirklich die gleiche Formel, die angezeigt wird, in das refedit-box...müssen Sie manipulieren .Formel oder .FormulaR1C1-Eigenschaft der Reihe, mit dem Sie arbeiten, und neu erstellen Sie die Formel, und, um die Werte und/oder xvalues Eigentum.

Dieser code sollte funktionieren, es gibt einige Funktionen, zum herausziehen von verschiedenen teilen der Formel...ich denke, es sollte für Sie arbeiten, oder zumindest hoffentlich helfen Ihnen herauszufinden, was am besten zu tun...

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top