작성
·
1.6K
답변 2
2
안녕하세요:)
데이터에 대한 빅픽처를 그리면서 파일을 디자인하는 실력을 갖추고 계시는군요.
멋지십니다!!!
★제공된
'21_marketing_완성.xlsm' 파일로 테스트해보세요.
질문하신 내용이 자동으로 반영되도록 설계되어 있습니다.
완성된 파일의 VBE창을 보시면
sheet1(대시보드), sheet4(파워쿼리 테이블)에 각각 피벗과 쿼리 업데이트 코드가 들어가 있습니다.
따라서
1. raw data 수정되면
2. sheet4(파워쿼리 테이블) 선택 시, 업데이트
3. sheet1(대시보드: 피벗 존재) 선택 시, 업데이트가 이루어집니다.
그러나 이 로직은
raw data 수정 후, 연관된 파워쿼리, 피벗 시트가 존재하는 시트를 다시 선택해야 업데이트가 이루어지므로
완전 자동화라 볼 수 없습니다.
그럼 어떻게 해야 할까요?
★workbook 이벤트의 'sheetchange' 이벤트에
업데이트 관련 코드를 추가하면 해결됩니다만
이 또한 문제가 있습니다.
체인지 이벤트이므로 해당 통합문서의 모든 시트에서 글자 하나 지워도
체인지 이벤트를 통해 업데이트가 수시로 실행되므로
데이터가 많을 경우 실익이 떨어집니다.
그러면 또 어떻게 해야 할까요?
★raw data 수정 후, 매크로 버튼 클릭하면 이 때
관련 시트들이(파워쿼리, 피벗) 업데이트 되도록 설계하는 것이
가장 현실성 있을 것 같습니다.
(네이버 개인 블로그에 자료 업로드 제한이 10MB까지여서
수정 완성된 파일을 드릴 수가 없습니다ㅜ.ㅜ)
☆만드는 순서는...
1. 기존 이벤트 프로시저들은 모두 제거
2. 일반 모듈 추가
3. 아래의 2개 프로시저를 복사-> 붙여넣기
4. raw data인 sheet1과 sheet2에 매크로 버튼 생성 -> 각각의 프로시저 연결 -> 완성
Sub RefreshAllObjects_1()
Dim pv As PivotTable
Application.ScreenUpdating = False
ThisWorkbook.RefreshAll
For Each pv In Sheet2.PivotTables
pv.PivotCache.Refresh
Next
Application.ScreenUpdating = True
End Sub
Sub RefreshAllObjects_2()
Dim pv As PivotTable
Application.ScreenUpdating = False
ThisWorkbook.RefreshAll
For Each pv In Sheet3.PivotTables
pv.PivotCache.Refresh
Next
Application.ScreenUpdating = True
End Sub
0
안녕하세요 선생님:)
자세하고 친절한 설명 정말 감사드립니다ㅠㅠ
선생님 덕분에 많은 가르침을 배우고 있습니다!
위에 알려주신 내용을 토대로 연습을 해보고 막히는 점이 있으면 다시 질문드리도록 하겠습니다.
항상 감사합니다!