2016-04-15 14 views
5

'Slicer_HeaderTitle' adında bir dilimlem var. VBA'da bir değişkeni seçilen elemanın değeriyle kısaltabilmem gerekir. Bir seferde sadece bir eleman seçeceğim.Excel VBA - Seçilen öğeyi dilimleyiciye döndürün

Pivot tablomuz harici bir veri kaynağına bağlı olduğundan, VBA aracılığıyla dilimleyiciden öğelerin seçilmesi ve seçilmesiyle ilgili birçok sorun yaşadım. Bu kesin örnekle ilgili olup olmadığını bilmiyorum, ancak bu tablo aynı dış veri kaynağına bağlı.

ben bu değeri geri dönebilirler tek bir kod satırı, için kullanılan, ama şimdi bulabildiğim tüm dilimleyicinin içinde her bir unsur ile size döngü gerektirir ve seçilmemiş veya değilse kontrol edin. Bunu yapmayı umuyoruz, çünkü bir seferde sadece 1 tane seçilmiş elemanım var.
' 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

Mevcut Durum:

enter image description here

cevap

1

hatayı bulmak için Tamam, biz, geri adım atmak benim işlevi silip öğeler arasında döngü çalışacağız:

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

Detaylı yanıt için teşekkürler. Küçük bir problemim var. Msg "Seçilmiş öğe yok" mesajını almaya devam ediyorum. gerçekten yararlı değil – TobiasKnudsen

+0

, her biri için sonra Debug.Print osi.Name ekleyin ve dilimleyicinin sahip her öğe varsa seçilmiş bir = true seçilmiş veya edilmemiş ise, o zaman kontrol bakın. –

+0

Orijinal yayınının alt kısmındaki kod ve hata resimlerimi ekledim! – TobiasKnudsen

2

Bu ne yaptım: bana çok yardımcı olduğunuz için Doktor Oswaldo için

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") 

teşekkürler!