2009-03-03 6 views
2

동일한 통합 문서에서 복사 한 일부 차트가 있지만 각 차트의 소스 데이터 (각 차트에 6 개의 시리즈가있는 42 개의 차트)에는 여전히 전체 파일 이름 경로가 들어 있습니다. 소스 시트와 셀은 동일하므로 경로 문자열을 찾아서 ""로 바꾸기 만하면됩니다. 그러나, 나는 그것을 (refedit 상자에 나타납니다) sourcedata의 이름을 얻는 방법을 찾을 수 없습니다. 거기에서 내가 필요한 것을 대체 할 수 있습니다.프로그래밍 방식으로 차트 원본 데이터 이름에 액세스

는 우리가해야하는 것은 이것이다 :

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

그리고 난 그냥 문자열로 ""의 부분을 얻고, 파일 경로를 제거하기 위해 내 기능을 수행합니다. 나는 그것에서 문자열, 즉 시도하고 얻을 경우

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 
관련 문제