1

したがって、Excelの1つのシートに複数のピボットテーブルがあります。行ラベルに月の長いリストがあります。レポートフィルターは名前でフィルター可能です。ピボットのすべての列は、単なるデータの合計です。

私が探しているのは(そしてマクロがそれを行う唯一の方法だと思います)、そのシートのピボットの1つのフィルターを変更し、それだけで他のピボットを更新できるようにする方法です。変更したもののフィルター(レポートと行ラベルの両方)を模倣するシート。他のピボットテーブルでは、他に何も変更しないでください。フィルターだけです。

残念ながら、私は文字通りvbaのコーディングについて何も知りません(Javaなどを少し知っていますが、マクロコーディングを行ったことがありません)。必要なことの一部を実行するマクロをインターネットからコピーすることができました。レポートフィルターは更新されますが、行ラベルフィルターの日付は更新されません。そのためのコーディングは次のとおりです。

Option Explicit
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
On Error Resume Next
Dim wsMain As Worksheet
Dim ws As Worksheet
Dim ptMain As PivotTable
Dim pt As PivotTable
Dim pfMain As PivotField
Dim pf As PivotField
Dim pi As PivotItem
Dim bMI As Boolean

On Error Resume Next
Set wsMain = ActiveSheet
Set ptMain = Target

Application.EnableEvents = False
Application.ScreenUpdating = False

'change all fields for all pivot tables on active sheet

For Each pfMain In ptMain.PageFields
    bMI = pfMain.EnableMultiplePageItems
        For Each pt In wsMain.PivotTables
            If pt <> ptMain Then
                pt.ManualUpdate = True
                Set pf = pt.PivotFields(pfMain.Name)
                        bMI = pfMain.EnableMultiplePageItems
                        With pf
                            .ClearAllFilters
                            Select Case bMI
                                Case False
                                    .CurrentPage = pfMain.CurrentPage.Value
                                Case True
                                    .CurrentPage = "(All)"
                                    For Each pi In pfMain.PivotItems
                                        .PivotItems(pi.Name).Visible = pi.Visible
                                    Next pi
                                    .EnableMultiplePageItems = bMI
                            End Select
                        End With
                        bMI = False

                Set pf = Nothing
                pt.ManualUpdate = False
            End If
        Next pt
Next pfMain

Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

とにかく私がやろうとしていることをすることはありますか?あなたの助けは大歓迎です!

4

1 に答える 1

1

ピボットテーブルが表示されない場合、上記のコードに対して行う必要があるのは、日付を反映するようにピボットフィールド値を設定する手順を繰り返すことだけのようです。これは、次の行で設定されたループのバリアントを追加することによって行われます。

    set pf = pt.pivotfields(pfmain.name)

    set pf = pt.pivotfields(pfmain.nameofyourrowfiltervariable)

完全なコードは以下のとおりです。次のエラー再開でも回避します

    Option Explicit
    Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    On Error Resume Next
    Dim wsMain As Worksheet
    Dim ws As Worksheet
    Dim ptMain As PivotTable
    Dim pt As PivotTable
    Dim pfMain As PivotField
    Dim pf As PivotField
    Dim pi As PivotItem
    Dim bMI As Boolean

    On Error Resume Next
    Set wsMain = ActiveSheet
    Set ptMain = Target

    Application.EnableEvents = False
    Application.ScreenUpdating = False

    'change all fields for all pivot tables on active sheet

    For Each pfMain In ptMain.PageFields
        bMI = pfMain.enablemultiplepageitems
        For Each pt In wsMain.PivotTables
          If pt <> ptMain Then
            pt.ManualUpdate = True
            Set pf = pt.PivotFields(pfMain.Name)
                    bMI = pfMain.EnableMultiplePageItems
                    With pf
                        .ClearAllFilters
                        Select Case bMI
                            Case False
                                .CurrentPage = pfMain.CurrentPage.Value
                            Case True
                                .CurrentPage = "(All)"
                                For Each pi In pfMain.PivotItems
                                    .PivotItems(pi.Name).Visible = pi.Visible
                                Next pi
                                .EnableMultiplePageItems = bMI
                        End Select
                    End With
                    bMI = False

               Set pf = pt.pivotfields(pfMain.nameofdatevariable)
               dates = pfMain.enablemultiplepageitems
               with pf
                   .clearallfilters
                   select case dates
                       case false
                               .currentpage = pfmain.currentpage.value
                       case true
                               .currentpage = "(All)"
                               for each pi in pfmain.pivotitems
                                    .pivotitems(pi.nameofdatevariable).visible = pi.visible
                                next pi
                                .enablemultiplepageitems = dates
                       end select
               end with
               date = false
               set pf = nothing
               pt.ManualUpdate = False
           End If
       Next pt
   Next pfMain

  Application.EnableEvents = True
  Application.ScreenUpdating = True

  End Sub

それを試して、それが機能するかどうかを確認してください私はこれをテストしていません

于 2012-08-02T14:44:58.733 に答える