2016-12-15 4 views
0

をMSGBOXピボットテーブルと表示を読みます正しい方向に私を指す、私はこれはそれエクセルVBAは、私が最初の行フィールドのメッセージボックスを表示し、ピボットテーブルと、次のVBAを持っていますが、私はそれが各1のメッセージボックスを表示し、すべての行フィールドを通過する必要があり、誰かができ

Sub Piv() 

    Dim PvTable As PivotTable 
    Dim PvField As PivotField 
    Dim PvItem As PivotItem 

    Set PvTable = ActiveSheet.PivotTables("RawDataTable") 
    Set PvField = PvTable.RowFields(1) 

    With ws 
    For Each PvItem In PvField.PivotItems 
     MsgBox PvItem 

    Next 
    End With 

End Sub 

私もそれは私にすべてのフィールドヘッダーを与えるために得ることができ、データではなく

Sub Piv() 

    Dim PvTable As PivotTable 
    Dim PvField As PivotField 
    Dim PvItem As PivotItem 

    Set PvTable = ActiveSheet.PivotTables("RawDataTable") 

    With ws 
    For Each PvField In PvTable.PivotFields 
     MsgBox PvField 

    Next 
    End With 

End Sub 
+1

私は何かが欠けているかもしれませんが、最初の例では、あなたの 'For'ループをラップすることはできません別の 'For'ループで:'各PvFieldについてはPvTable.RowFields' – bobajob

+0

で動作しますが、そのは間違った方法をループ、それが2番目の列など私の最初の列のデータのすべてを与えるが、私は全体に行きたいです行全体は、好奇心から、次 – Jeffrey

+0

に移動し、これらのメッセージボックスの意図は何ですか?それぞれが表示された後、ユーザーは何をする必要がありますか?そして、あなたは、ユーザーに途中から抜け出す方法を教えてくれますか? – jeffreyweir

答えて

1

で行う方法を動作するようには思えカント非常に力強いアプローチであり、うまくいけば誰かがよりエレガントなものを考え出すだろうが、私たちはdeta配列の配列に行フィールドのILS、その後、逆インデックス順で、この配列を介して実行:

Option Explicit 

Sub Piv() 

    Dim PvTable As PivotTable 
    Dim PvField As PivotField 
    Dim PvItem As PivotItem 
    Dim dataArray() As Variant 
    Dim dummyArray() As Variant 
    Dim i As Long 
    Dim j As Long 

    Set PvTable = ActiveSheet.PivotTables("RawDataTable") 

    ReDim dataArray(1 To PvTable.RowFields.Count) 
    ReDim dummyArray(1 To PvTable.RowFields(1).PivotItems.Count) 

    For i = 1 To PvTable.RowFields.Count 
     dataArray(i) = dummyArray 
     For j = 1 To PvTable.RowFields(i).PivotItems.Count 
      dataArray(i)(j) = PvTable.RowFields(i).PivotItems(j) 
     Next j 
    Next i 

    For i = 1 To UBound(dataArray(1)) 
     For j = 1 To UBound(dataArray) 
      MsgBox dataArray(j)(i) 
     Next j 
    Next i 

End Sub 
関連する問題