2016-04-11 52 views
1

私はVBAコードで私のExcel文書のスライサーを変更しようとしています。これまでのところ私はすべてについてちょうど試みたと私は常に同じエラーで終わる:VBA関数(1004エラー)からのExcelの更新スライサー

Run-time error '1004': 

Application-defined or object-defined error 

ここに私の現在のVBAコードがあります。

Sub SelectSlicerValue(ByVal SlicerName As String, ByVal slicerVal As String, ByVal isSelected As Boolean) 
    ActiveWorkbook.SlicerCaches(SlicerName).SlicerItems(slicerVal).Selected = isSelected 
End Sub 

'Selects slicer values to display only data for 17-year old male students 
Sub SelectMale17Profile() 
    SelectSlicerValue "Slicer_Age1", "17", True 
End Sub 

私は動的に選択したフィルタを変更することができるよ前にスライサーの読み取り/書き込みプロパティを有効にする必要があることを、私はどこかで読んだと信じています。私はこれをどのようにして行うのですか?あなたのピボットテーブルは、外部ソースからデータを取得している場合

+1

私にとってはうまくいきます。 1をtrueに設定するときも、restをfalseに設定します。また、外部ソースからデータを取得するPivotテーブルもありますか? –

+0

@SiddharthRout - あなたの返信をありがとう! はい、私はSQLデータベースに接続するためにpowerpivotを使用しています。これは問題ですか、またはVBAでスライサーを変更することはまだ可能ですか? – TobiasKnudsen

+0

@Ralph、ご返信ありがとうございます!私はあなたの例をダウンロードし、それが私がそれをしたいのとまったく同じように働いていますが、自分のプロジェクトでそれを動作させることはできません。 SiddharthRoutが彼のコメントでそれについて尋ねたので、私のピボットテーブルが外部ソースに接続されているので、私はそれを推測しています。ピボットテーブルがSQLサーバーに接続されている場合でも同じ効果を得ることができますか? – TobiasKnudsen

答えて

1

@SiddharthRout - Thanks for your reply! Yes, I'm using powerpivot to connect to my sql database. Is this a problem, or is it still possible to change the slicer with VBA? – TobiasKnudsen 6 hours ago

は、スライサー内の項目をループにSlicerCacheLevelsコレクションを使用して、あなたがやりたいです。例えば、

'Selects slicer values to display only data for 17-year old male students 
Sub SelectMale17Profile() 
    SelectSlicerValue "Slicer_Age1", "17", True 
End Sub 

Sub SelectSlicerValue(ByVal SlicerName As String, ByVal slicerVal As String, ByVal isSelected As Boolean) 
    Dim oSitm As SlicerItem 
    Dim oSlvl As SlicerCacheLevel 

    For Each oSlvl In ActiveWorkbook.SlicerCaches(SlicerName).SlicerCacheLevels 
     For Each oSitm In oSlvl.SlicerItems 
      If oSitm.Value = slicerVal Then oSitm.Selected = isSelected 
     Next 
    Next 
End Sub 

これはあなたがやろうとしていることだと思いますか?私はisSelectedを削除しました。

'Selects slicer values to display only data for 17-year old male students 
Sub SelectMale17Profile() 
    SelectSlicerValue "Slicer_Age1", "17", True 
End Sub 

Sub SelectSlicerValue(ByVal SlicerName As String, ByVal slicerVal As String) 
    Dim oSitm As SlicerItem 
    Dim oSlvl As SlicerCacheLevel 

    For Each oSlvl In ActiveWorkbook.SlicerCaches(SlicerName).SlicerCacheLevels 
     For Each oSitm In oSlvl.SlicerItems 
      If oSitm.Value = slicerVal Then 
       oSitm.Selected = True 
      Else 
       oSitm.Selected = False 
      End If 
     Next 
    Next 
End Sub 
関連する問題