برمجيا الوصول إلى البيانات المصدر للتخطيط اسم
سؤال
لدي بعض المخططات لقد نسخت أكثر من نفس المصنف ، ولكن مصدر البيانات لكل البياني (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