Pergunta

Eu tenho algumas cartas que eu copiados ao longo de uma pasta de trabalho idênticas, mas os dados de origem para cada gráfico (42 cartas, com 6 séries em cada) ainda contém o caminho nome do arquivo completo. A folha de origem e as células são idênticas, então eu só quero encontrar a cadeia de caminho e substituí-lo com "". No entanto, não consigo encontrar uma maneira de obter o nome do SourceData (como aparece na caixa RefEdit). De lá, eu posso substituir o que eu preciso.

O que temos é esta:

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

E eu só quero pegar o papel em "" como uma string, e realizar minha função para remover o caminho de arquivo. Se eu tentar obter uma string a partir dele, ou seja:

sourcestring = ActiveChart.SeriesCollection(1).Values

Eu recebo um erro; parece VBA considera que é um array ao ler a partir dele, mas pode usar uma corda ao atribuir a ele. Alguma idéia?

Foi útil?

Solução

Você está certo, você não pode realmente sair a mesma fórmula que é exibido na caixa RefEdit ... você tem de manipular a propriedade .Formula ou .FormulaR1C1 na série você está trabalhando com, e reconstruir o fórmula e conjunto que a valores e / ou XValues ??propriedade.

Este código deve funcionar, existem algumas funções para retirar diferentes partes da fórmula ... eu acho que deveria trabalhar para você, ou pelo menos esperamos ajudá-lo a descobrir o que é melhor para fazer ...

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top