برمجيا الوصول إلى البيانات المصدر للتخطيط اسم

StackOverflow https://stackoverflow.com/questions/605808

  •  03-07-2019
  •  | 
  •  

سؤال

لدي بعض المخططات لقد نسخت أكثر من نفس المصنف ، ولكن مصدر البيانات لكل البياني (42 البيانية ، مع سلسلة 6 في كل) لا يزال يحتوي على كامل الملف المسار.المصدر ورقة خلايا متطابقة ، لذلك أنا فقط أريد أن العثور على مسار السلسلة واستبدالها "".ومع ذلك, لا أستطيع العثور على طريقة للحصول على اسم sourcedata (كما يظهر في refedit مربع).من هناك, أنا يمكن أن تحل محل ما كنت بحاجة إلى.

ما لدينا هو هذا:

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

و أريد فقط أن تحصل على جزء في "" كسلسلة ، أداء وظيفة إزالة أسم دليل.إذا كنت تحاول الحصول على سلسلة من ذلك ، أي:

sourcestring = ActiveChart.SeriesCollection(1).Values

أحصل على خطأ ؛ يبدو VBA وترى مجموعة عند القراءة من ذلك ، ولكن يمكن استخدام سلسلة عند تعيين إلى ذلك.أي أفكار ؟

هل كانت مفيدة؟

المحلول

أنت على حق لا يمكنك حقا الحصول على نفس الصيغة التي يتم عرضها في refedit مربع...عليك أن التلاعب .أو صيغة .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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top