2016-04-15 330 views
5

スライサー「ヘッダータイトル」があります。私は、VBAの変数を選択した要素の値で薄暗くすることができます。私は一度に一つの要素しか選択しません。Excel VBA - スライサーで選択した要素を返します。

ピボットテーブルが外部データソースに接続されているため、VBAを使用してスライダから動的に要素を選択および選択解除する際に、多くの問題がありました。これがこの正確な例に関連するかどうかはわかりませんが、このテーブルは同じ外部データソースに接続されています。

私はこの値を返す可能性のあるコードを1行持っていましたが、スライサーの各要素をループして、選択されているかどうかを確認する必要があります。私は一度に選択された要素が1つしかないので、これを避けることを願っています。

enter image description here

' This is what I'm trying to achieve. 
Dim sValue as String 
sValue = ActiveWorkbook.SlicerCaches("Slicer_HeaderTitle").VisibleSlicerItems.Value 

msgbox(sValue) 
'Returns: "Uge 14 - 2016 (3. Apr - 9. Apr)" 

ステータス:

enter image description here

答えて

1

[OK]をエラーを見つけるために、我々は、バックステップを取る私の機能を削除した項目をループしようとします:

Dim sC As SlicerCache 
Dim SL As SlicerCacheLevel 
Dim sI As SlicerItem 
Set sC = ActiveWorkbook.SlicerCaches("Slicer_Dates_Hie") 
Set SL = sC.SlicerCacheLevels(1) 
For Each sI In SL.SlicerItems  
    sC.VisibleSlicerItemsList = Array(sI.Name) 
Next 
+0

詳細な回答ありがとうございます。私には小さな問題があります。私はmsg "No items selected"を得ています。 – TobiasKnudsen

+0

これはあまり役に立ちませんが、For eachの後にdebug.print osi.Nameを追加して、スライサーの各要素があるかどうかを調べて、選択されている要素が= trueであるかどうかを確認します。 –

+0

オリジナルの投稿の下に自分のコードとエラーの画像を追加しました! – TobiasKnudsen

2

これは私がやったことです:私をたくさん助けるためドクトルオズワルドに

Public Function GetSelectedSlicerItems(SlicerName As String) As String 
Dim SL As SlicerCacheLevel 
Dim sI As SlicerItem 

Set SL = ActiveWorkbook.SlicerCaches(SlicerName).SlicerCacheLevels(1) 
For Each sI In SL.SlicerItems 
    If sI.Selected = True Then 
     GetSelectedSlicerItems = (sI.Value) 
    End If 
Next 
End Function 


Dim sValue As String 
sValue = GetSelectedSlicerItems("Slicer_HeaderTitle") 

ありがとう!

関連する問題