2009-03-03 8 views
2

У меня есть некоторые диаграммы, которые я скопировал из идентичной книги, но исходные данные для каждой диаграммы (42 диаграммы с 6 рядами в каждом) все еще содержат полный путь к имени файла. Исходный лист и ячейки идентичны, поэтому я просто хочу найти строку пути и заменить ее на «». Тем не менее, я не могу найти способ получить имя sourcedata (как он появляется в поле refedit). Оттуда я могу заменить то, что мне нужно.Запрограммированное имя источника данных диаграммы

Что мы имеем это:

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

И я просто хочу, чтобы получить роль в «» в виде строки, и выполнять свою функцию, чтобы удалить FilePath. Если я пытаюсь получить строку из нее, то есть:

sourcestring = ActiveChart.SeriesCollection(1).Values

Я получаю сообщение об ошибке; кажется, VBA считает его массивом при чтении из него, но может использовать строку при назначении ему. Есть идеи?

ответ

1

Вы правы, вы не можете получить ту же формулу, которая отображается в поле refedit ... вам нужно манипулировать свойством .Formula или .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 
Смежные вопросы