2009-03-03 18 views
2

Aynı çalışma kitabından kopyaladığım bazı grafiklerim var, ancak her bir grafik için kaynak verileri (her birinde 6 dizi olan 42 grafik) yine de tam dosya adı yolunu içeriyor. Kaynak sayfa ve hücreler aynıdır, bu yüzden sadece yol dizesini bulmak ve "" ile değiştirmek istiyorum. Ancak, sourcedata'nın adını almak için bir yol bulamıyorum (refedit kutusunda göründüğü gibi). Oradan ihtiyacım olan şeyi değiştirebilirim.Grafiksel veri kaynak adına program aracılığıyla erişme

Ne var şudur:

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

Ve ben sadece bir dize olarak "" yer almak ve dosyayolu kaldırmak için benim işlevi gerçekleştirmek istediğiniz. Ondan bir dize, yani denemek ve alırsanız:

sourcestring = ActiveChart.SeriesCollection(1).Values

bir hata alıyorum; VBA, onu okuduğunda bir dizi olduğunu düşünür, ancak ona atandığında bir dizge kullanabilir. Herhangi bir fikir?

cevap

1

Haklısınız, refedit kutusunda görüntülenen formülün aynısını çıkaramazsınız ... Birlikte çalıştığınız dizinin .Formula veya .FormulaR1C1 özelliğini değiştirmelisiniz ve yeniden oluşturmalısınız. Formülü ve değerleri ve/veya xvalues ​​özelliğini ayarlayın.

Bu kod çalışması gerekir

, formülün farklı bölümlerini çekmek için birkaç fonksiyonlar vardır ... ben sizin için çalışması gerektiğini düşünüyorum, ya da en azından umarım ... yapmak en iyisi ne sen anlamaya yardımcı

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 
İlgili konular