Измените имя листа для исходных данных на диаграмме с помощью Excel VBA - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть диаграмма на листе в Excel. Исходные данные находятся на другом листе. Я хотел бы перенаправить ссылку на исходные данные в диграмме на другой лист, который идентичен первому листу, за исключением фактических данных.

Как я могу получить текущее имя листа из ссылки на источник в диаграмме и заменить его именем другого рабочего листа? Мне нужно сделать это с помощью VBA.

Спасибо!

1 Ответ

0 голосов
/ 07 сентября 2018

Извините за поздний ответ. Я решил это с помощью вас, ребята, и немного погуглил. Не самый чистый код, но он работает. Спасибо !!

Sub ReplaceSheetName(strNewSheetName As String)
    Dim srs As Series
    Dim strSourceDataSheetName As String
    Dim strTempFormula As String

    strNewSheetName = "'" & strNewSheetName & "'"
    For Each srs In ActiveSheet.ChartObjects(1).Chart.SeriesCollection
        If InStr(1, srs.Name, "Budget", vbTextCompare) > 0 Then
        Else
            strSourceDataSheetName = GetSheetNameFromChartSourceData(srs.Formula, "(", "!")
            strTempFormula = Replace(srs.Formula, strSourceDataSheetName, strNewSheetName, vbTextCompare)
            srs.Formula = WorksheetFunction.Substitute(srs.Formula, srs.Formula, strTempFormula)
        End If
    Next
    ActiveSheet.ChartObjects(1).Chart.Refresh
End Sub

Private Function GetSheetNameFromChartSourceData(strSourceDataFormula As String, strStartDelimiter As String, strEndDelimiter As String) As String
    Dim firstDelPos As Integer
    Dim secondDelPos As Integer
    Dim stringBwDels As String

    On Error GoTo ErrorHandler

    firstDelPos = InStr(strSourceDataFormula, strStartDelimiter) 'Position of start delimiter

    'If end delimiter is the same as the start delimiter they will be the same, hence no string is extracted.
    If strStartDelimiter = strEndDelimiter Then
        secondDelPos = InStrRev(strSourceDataFormula, strEndDelimiter) 'Position of end delimiter
    Else
        secondDelPos = InStr(strSourceDataFormula, strEndDelimiter) 'Position of end delimiter
    End If

    If firstDelPos = 0 Or secondDelPos = 0 Then
        stringBwDels = strSourceDataFormula
    Else
        stringBwDels = Mid(strSourceDataFormula, firstDelPos + 1, secondDelPos - firstDelPos - 1) 'Extract the string between two delimiters
    End If

    GetSheetNameFromChartSourceData = stringBwDels
    Exit Function
ErrorHandler:
    MsgBox "An error occurred while extracting substring between the given separators " & """" & strStartDelimiter & """" & " and " & """" & strEndDelimiter & """" & ". Error message: " & Err.Description, vbOKOnly, "Error"
    Resume Next
End Function
...