2011-02-28 5 views
2

피벗 테이블 이름이 피벗 테이블 이름 인 피벗 테이블이 3 개 포함 된 Excel 작업 시트가 있습니다. 피벗 테이블 3과 활성 필드 이름은 각각 국가, 언어 및 프린터로 사용됩니다. 필요한 것은 각 피벗 테이블의 모든 데이터를 각 문자열 또는 문자열 배열로 가져 오는 것입니다. 어떤 도움이라도 매우 감사 할 것입니다.VBA의 피벗 테이블에서 데이터 검색

+0

어떤 도움을 마이킹하시기 바랍니다 ?????? – 1355

답변

2

빠른 & 당신을 얻으려면 더러운 하나; 하나의 선형 문자열에있는 피벗 테이블의 모든 셀 (";"로 구분) 이것은 사용할 방법과 속성에 대한 충분한 영감을 주어야합니다. 유의하십시오 : Tmp은 무한히 큰 피벗 테이블을 저장할 수 없습니다. 크기가 크게 커지는 경우 파일에 Tmp을 작성하는 것이 좋습니다. 도움이

Sub PTTest() 
Dim SH As Worksheet ' the current worksheet from the colection of workbooks 
Dim PT As PivotTable ' the current pivot table from the current worksheet 
Dim PTC As Range ' the cell range of the current pivot table 
Dim Tmp As String ' the buffer for concatenated cell values 

    Tmp = "" 
    ' process all sheets, as Pivot table objects are contained by sheets 
    For Each SH In ActiveWorkbook.Worksheets 

     For Each PT In SH.PivotTables 

      For Each PTC In PT.TableRange1.Cells 
       ' all cells in one buffer, seperated by ";" 
       ' if you want to include page header cells, use 
       ' "PT.TableRange2.Cells" instead 
       Tmp = Tmp & PTC & ";" 
      Next PTC 

      ' *** do something *** with the buffer 
      ' ok very simple we print it into the debugger's Immediate window 
      Debug.Print Tmp 

      ' empty buffer for next pivot table 
      Tmp = "" 

     Next PT 
    Next SH 
End Sub 

희망 .... 행운

+0

도와 주셔서 대단히 감사합니다. 그것은 잘게 작동합니다. 하지만 통합 문서의 모든 시트를 검토 할 필요는 없습니다. 지정된 것만. 그렇다면 어떤 변화가 있어야합니까? – 1355

+1

이제 내부 루프 다음에 외부 루프에서 'Exit For'명령을 사용하고 있습니다. 그래서 첫 번째 워크 시트를 통해서만 갈 수 있습니다. 그게 내 필요도 .. 특정 시트에 피벗 테이블에 대한 – 1355

+1

당신은 바깥 For Each SH를 제거하고 내부 루프를 "For Each PT for Worksheets ("Sheet1 ")로 다시 쓸 수 있습니다. 피벗 테이블" – MikeD