관련: 지식인
엑셀에서 만든 차트를 복사해서
파워포인트 슬라이드에 연결로 붙여넣고 사용하다가
파워포인트에서 차트 데이터를 변경하면 원본을 변경저장할 지 확인하고
저장을 선택하면 잘 업데이트가 됩니다.
하지만 따로 엑셀로 원본 엑셀파일을 열어서 시트이름을 변경하고 저장한다면
파워포인트 파일에서는 이런 변경사실을 알지 못해서
다시 데이터를 편집하려고 하면 차트의 내용이 나오지 않게 됩니다.
이 때 원본 차트의 시트이름을 복구하는 코드입니다.
더보기
Option Explicit
Sub reLinkChartData()
Dim shp As Shape
Dim srs As Series
Dim srscol As SeriesCollection
Dim Sheet1Name As String
Dim sData As String
'현재 차트
Set shp = ActiveWindow.Selection.ShapeRange(1)
With shp.Chart
.ChartData.Activate
Sheet1Name = .ChartData.Workbook.Worksheets(1).Name
sData = getSourceDataString(shp.Chart, False)
Debug.Print sData
sData = "'" & Sheet1Name & "'" & Mid(sData, InStr(sData, "!"))
Debug.Print sData
.SetSourceData sData
.ChartData.Workbook.Close
End With
End Sub
Function getSourceDataString(oCht As Chart, Optional OpenDataWindow As Boolean = True) As String
Dim sform1 As String, sform2 As String
Dim srs1 As Series, srs2 As Series
Dim r1 As String, r2 As String
Dim oSht As Object
Dim r As Excel.Range
'=SERIES(,'Sheet 4'!$A$1:$A$10,'Sheet 4'!$B$1:$B$10,1)
If OpenDataWindow Then oCht.ChartData.Activate 'ChartDataWindow
Set srs1 = oCht.SeriesCollection(1)
Set srs2 = oCht.SeriesCollection(oCht.SeriesCollection.Count)
sform1 = srs1.Formula: '=SERIES(,'Sheet 4'!$A$1:$A$10,'Sheet 4'!$B$1:$B$10,1)
sform2 = srs2.Formula: '=SERIES(,'Sheet 4'!$A$1:$A$10,'Sheet 4'!$B$1:$B$10,1)
Set oSht = oCht.ChartData.Workbook.Worksheets(1)
r1 = Split(sform1, ",")(1): r1 = Split(r1, ":")(0)
'If InStr(r1, "]") > 0 Then r1 = "'" & Mid(r1, InStr(r1, "]") + 1)
r2 = Split(sform2, ",")(2): r2 = Split(r2, ":")(1)
getSourceDataString = r1 & ":" & r2
If OpenDataWindow Then oSht.Parent.Close
End Function
Function getSourceData(oCht As Chart, Optional OpenDataWindow As Boolean = True) As String
Dim sform1 As String, sform2 As String
Dim srs1 As Series, srs2 As Series
Dim r1 As Object, r2 As Object
Dim oSht As Object
Dim r As Excel.Range
'=SERIES(,'Sheet 4'!$A$1:$A$10,'Sheet 4'!$B$1:$B$10,1)
If OpenDataWindow Then oCht.ChartData.Activate 'ChartDataWindow
Set srs1 = oCht.SeriesCollection(1)
Set srs2 = oCht.SeriesCollection(oCht.SeriesCollection.Count)
sform1 = srs1.Formula: '=SERIES(,'Sheet 4'!$A$1:$A$10,'Sheet 4'!$B$1:$B$10,1)
sform2 = srs2.Formula: '=SERIES(,'Sheet 4'!$A$1:$A$10,'Sheet 4'!$B$1:$B$10,1)
Set oSht = oCht.ChartData.Workbook.Worksheets(1)
Set r1 = oSht.Range(Split(sform1, ",")(1))(1)
Set r2 = oSht.Range(Split(sform2, ",")(2)).Item(UBound(srs1.Values))
getSourceData = r1.Address & ":" & r2.Address
If OpenDataWindow Then oSht.Parent.Close
End Function
Function getFullAddress(r As Object)
getFullAddress = "'" & r.Parent.Name & "'!" & r.Address(External:=False)
End Function
getSourceDataString 이라는 함수를 만들었는데
원본 차트의 차트영역의 Fromula 를 구해서
Sheet 이름을 현재 Workbook 의 첫번째 시트이름으로 다시 변경해서
SetSourceData로 변경된 영역을 적용해 줍니다.
실행영상으로 확인하세요.
샘플파일 첨부합니다.
'PPT+VBA' 카테고리의 다른 글
발표자 보기에서 여러 개의 슬라이드 미리 보기 (2) | 2022.09.12 |
---|---|
개체 간격 자동으로 배치하기 (0) | 2022.09.07 |
원둘레에 여러개의 원 그리기 (0) | 2022.09.05 |
VBA로 이동경로 애니메이션 추가 (0) | 2022.08.30 |
PPT의 표(테이블)를 엑셀시트에 일괄 복사 (0) | 2022.08.13 |
도형병합(교차)를 이용한 두 도형의 충돌체크 (0) | 2022.08.12 |
그룹도형, 차트, 스마트아트, 표 등의 텍스트 일괄 변경 (0) | 2022.08.08 |
[Chart Merge] 차트 복제하여 엑셀 데이터 일괄 반영 (0) | 2022.08.06 |
최근댓글