0

スライサー項目を検索して適切なグラフを表示する検索ボックス (K1) がありますが、ユーザーがスライサーを使用して特定のグラフを表示することを選択した場合、K1 の値はスライサー項目と一致しません。

それらが一致するのは、ユーザーが検索ボックスを使用したときだけです。セル O1 に 1 (一致する場合) または一致しない場合は 0 を返す数式を作成し、K1 = をアイテムの値 (コードの引用部分) にするさまざまなバリエーションを試しました。

ダッシュボードの画像へのリンクを参照してください。

ダッシュボード画像

私はVBAを初めて使用するので、ELI5の回答をいただければ幸いです。

Sub SearchPivots()


Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual

'Set the Variables to be used
Dim pt As PivotTable
Dim Field As PivotField
Dim NewCat As String

On Error GoTo 28


'Find Pivot Table
Set pt = Worksheets("Overall Pivot").PivotTables("NAMERPM")

Set Field = pt.PivotFields("Filter Field")
NewCat = Worksheets("Resource Dashboard").Range("K1").Value

Application.Calculation = xlCalculationAutomatic

'This updates and refreshes the PIVOT table
With pt
    Field.ClearAllFilters
    Field.CurrentPage = NewCat
    pt.RefreshTable
End With

'With Field
'    If Range("O1").Value = 0 Then
'        Range("K1") = Field.CurrentPage.Value
'    End If
'End With

    Exit Sub
28:
    MsgBox "That project number is not listed.  Please check the project number and try again."

Application.ScreenUpdating = True
Application.DisplayStatusBar = True




End Sub
4

2 に答える 2

0

スライサーが表示されるチャートをどのように制御するのかという質問を理解しているかどうかはわかりませんが、以下のコードは、ピボットテーブルの変更イベントを介して選択されたスライサー項目を取得します (もちろん、多くを選択できます)。

Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable)
Dim sItem As Excel.SlicerItem
Dim msg As String
Dim lastrow As Long
Dim nextrow As Long
Dim i As Long

    nextrow = 0
    For i = 1 To Target.Slicers.Count

        msg = Target.Slicers(i).Name & vbNewLine

        For Each sItem In Target.Slicers(i).SlicerCache.VisibleSlicerItems

            nextrow = nextrow + 1
            msg = msg & vbTab & sItem.Name & vbNewLine
        Next sItem

        MsgBox msg
    Next i
End Sub

特定のスライサーを名前で参照する

Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable)
Dim sItem As Excel.SlicerItem
Dim nextrow As Long
Dim i As Long
Dim msg As String

    nextrow = 0

    With Target.Slicers("Filter_Field")

        msg = .Name & vbNewLine

        For Each sItem In .SlicerCache.VisibleSlicerItems

            nextrow = nextrow + 1
            msg = msg & vbTab & sItem.Name & vbNewLine
        Next sItem

        MsgBox msg
    End With
End Sub
于 2015-12-14T16:31:09.633 に答える