• 카테고리

    질문 & 답변
  • 세부 분야

    업무 자동화

  • 해결 여부

    미해결

피벗테이블_5(실무예제)에서 1004 런타임 오류가 발생하네요...

22.03.13 17:15 작성 조회수 357

1

안녕하세요. 데이터자동화(with VBA )를 공부중입니다.
강사님 덕분에 조금씩 알아가고 있습니다. 감사합니다.
 
하나씩 강의를 들으면서 하나씩 알아가는 기분이 좋은데 벽에 걸리고 말았습니다.
섹션9 부분(피벗테이블_5 실무예제)에서 강의 동영상이 (고급필터로 데이터 수집하는 부분) 깨져 있고요,
그래서 뒷 부분을 강의 화면에 나오는 코드를 어렵게 코딩해서 기동을 하면 에러가 발생합니댜.
 
피벗 생성 프로시저에서 "1004 런타임 오류가 발생합니다."
Set pt = pc.CreatePivotTable(sr.Range("a6"), "pv1") 이 부분에서 오류가 발생합니다.
물론 근본적인 문제는 pv_data 에서 데이터 추출이 안되서입니다.
 
강사님의 도움이 필요합니다.
 
제 메일로 회신해주실 경우는 shkwoak@daum.net 으로 답변 부탁드립니다.

답변 1

답변을 작성해보세요.

0

안녕하세요, 곽송해님.
반갑습니다 :)

초창기 영상들이 녹화SW에 문제가 있어서
저렇게 잘리었더군요...ㅜ.ㅜ
보시는데 불편하실겁니다.
지금처럼 잘려서 도저히 혼자 코딩이 어려우면 댓글 남겨주세요.
코드 올려드리겠습니다.

Sub 고급필터로_데이터취합()

    Dim sr As Worksheet, sd As Worksheet

    Dim rng As Range    

    Set sr = Sheets("결과")

    Set sd = Sheets("pv_data")

    

    sr.Range("a6").CurrentRegion.Clear

    sd.Cells.Clear    

    If Application.CountIf(sr.Range("a3:c3"), "선택") = 3 Then

       MsgBox "행필드는 적어도 하나를 선택해야 합니다."

       sr.Activate

       sr.Range("a3").Select

    End If

    

    sd.Range("a1").Resize(1, 2) = Array("일자", "일자")

    sd.Range("a2").Resize(1, 2) = Array(">=" & sr.Range("b1"), "<=" & sr.Range("c1"))

    

    Set rng = Sheets("raw").Range("a1").CurrentRegion

    rng.AdvancedFilter xlFilterCopy, sd.Range("a1").CurrentRegion, sd.Range("a6")

End Sub

 

Sub 피벗생성()

    Dim pc As PivotCache

    Dim pt As PivotTable

    Dim sr As Worksheet

    Dim rng As Range

    Dim hang

    Dim f As PivotField

    

       

    Set sr = Sheets("결과")

    Set rng = Sheets("pv_data").Range("a6").CurrentRegion

    

    '혹시 기존 피벗이 있다면 삭제

    On Error Resume Next

        Set pt = sr.PivotTables(1)

        pt.TableRange2.Clear

    On Error GoTo 0    

    

    With sr

       If .Range("b3") = "선택" And .Range("c3") = "선택" Then

          hang = .Range("a3").Value

       ElseIf .Range("c3") = "선택" Then

          hang = Array(.Range("a3").Value, .Range("b3").Value)

       Else

          hang = Array(.Range("a3").Value, .Range("b3").Value, .Range("c3").Value)

       End If

    

    End With

    

    Set pc = ThisWorkbook.PivotCaches.Create(xlDatabase, rng)

    Set pt = pc.CreatePivotTable(sr.Range("a6"), "pv1")

    

    With pt

       On Error Resume Next

       .AddFields hang, "연령"

          If Err Then

             

             pt.TableRange2.Clear

             MsgBox "행필드 선택에 문제가 있습니다. 다시 선택하세요."

             Exit Sub

          End If      

       

       .AddDataField .PivotFields("통화건수"), , xlSum

       .RowAxisLayout xlTabularRow

       .RowGrand = False

       .ColumnGrand = False

       .MergeLabels = True

       

       For Each f In .PivotFields

          f.Subtotals(1) = False

       Next

       

       On Error GoTo 0

    End With   

       

End Sub

 

Sub main_pivot()

   Application.ScreenUpdating = False

   

   Call 고급필터로_데이터취합

   Call 피벗생성

   

   Application.ScreenUpdating = True

End Sub