프로그래밍 방식으로 액세스하는 차트는 원본 데이터 이름
문제
나는 몇 가지 차트에 나가서 복사에서는 동일한 통합 문서지만,소스 데이터에 대한 각 차트(42 도표 6 시리즈에서 각)여전히 포함하는 전체 파일 경로.소스판과 세포가 다르기 때문에,나는 그냥을 찾으려면 경로를 문자열과 대체"".그러나,나를 찾을 수 없을 얻을 수있는 방법의 이름 sourcedata(으로 나타나에 참조편집 도자).거기에서,나는 바꿀 수 있습 내가 무엇을 해야 합니다.
우리가 무엇이:
ActiveChart.SeriesCollection(1).Values = "='C:\[oldfile.xls]Charts.Data'!R1C17:R1C28"
나는 그냥을 얻고 싶은 부분에서""문자열로,그리고 나는 기능을 제거하는 파일 경로입니다.면도에서 문자열 it,ie:
sourcestring = ActiveChart.SeriesCollection(1).Values
오류가 발생;그것은 보인다 VBA 고려 그것을 배열을 읽을 때에 그것은,그러나 수 있는 문자열을 사용할 때 할당합니다.어떤 아이디어가?
해결책
당신은 오른쪽,당신은 할 수 없습니다 정말 나 같은 공식으로 표시되는 항 참조편집 도자기를 조작.식 또는.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