2016-03-21 16 views
1

VBA'de normal PivotTable'larla çalışıyorum, ancak son zamanlarda gerçekten beğendiğim Veri Modeli'ni kullanarak özellikle Pivot Tablolarda bazı özellikler buldum - özellikle 'Distinct Count'. Normal bir pivot tabloda, bir dizeyi 'Like' gibi kayıtlar için filtreleyen bir kod var ve mükemmel çalışıyor. Veri Modeli'ni kullanarak bu kodu Pivot Tablosuna nasıl dönüştürebilirim? İşte Veri Modelini kullanarak filtre öğelerini nasıl değiştirebilirim ve Excel PivotTable öğesindeki öğeleri gizlerim?

With ActiveSheet.PivotTables("Metrics").PivotFields("Reference number") 
    .Orientation = xlPageField 
    .Position = 1 
    .EnableMultiplePageItems = True 

    For i = 1 To .PivotItems.Count 
     If .PivotItems(i).Name Like "*oran*" Then 
      .PivotItems(i).Visible = False 
     End If 
    Next i 

End With 

Ben makro kaydedebilir ve Veri Modeli altında elle gösterilecek öğeleri seçmek oluşturulan kod şudur: Bu benim başlığı kulüpler yöndür

ActiveSheet.PivotTables("Metrics").PivotFields("[RawData].[Status].[Status]"). _ 
VisibleItemsList = Array("[RawData].[Status].&[apple_434]", _ 
"[RawData].[Status].&[banana_689]", _ 
"[RawData].[Status].&[orange_1346]", _ 
"[RawData].[Status].&[orange_1454]") 

ama yaşıyorum

With ActiveSheet.PivotTables("Metrics").PivotFields("[RawData].[Status].[Status]")  
    For i = 0 To UBound(.VisibleItemsList) 
     If i Like "*oran*" Then 
      i = "" 
      Debug.Print i 
     End If 
    Next i 
End With 

çıkış i sayısalsa 0,1,2,3,4 --not metin ve sayılar filtre lis öğe sayısına karşılık görünmüyor: VisibleItemsList Diziyi erişen bazı sorun t. Öğelere nasıl erişeceğimi anlayamıyorum, bu yüzden kod kullanmak istediklerimi gösterebilir veya gizleyebilirim. Dürüst olacağım, dizilerle çok uzun süredir çalışmadım. Verileri filtrelemek için dilimleyiciler kullanarak sona erdim.

+0

VBA olmak zorunda mı? Bu ücretsiz eklentiyi yükleyebilir ve sizin için bunu yapmak için Filtre Listesi özelliğini kullanabilir misiniz? http://olappivottableextend.codeplex.com/wikipage?title=Filter%20List&referringTitle=Home – GregGalloway

+0

http: // dailydoseofexcel adresinde yayınladığım OLAP olmayan bazı filtreleme kodlarına yanıt olarak benzer bir istekte bana ulaşan biri vardı .com/archives/2013/11/14/filtering-pivots-based-on-external-range/ VBA ile başarmak bana çok uzun zaman ve bir sürü hack aldı. Karmaşık joker karakterleri ve özel durumları da işleyen ve çeşitli arama terimleriyle ifade edilen ticari bir eklentiye kod olarak yapıyorum. Http://dailydoseofexcel.com/archives/2015/11/17/filtering-pivottables-with-vba-deselect-slicers-first/ adresindeki gizli önizleme. Daha fazla bilgi edinmek isterseniz buraya bir yorum bırakın. – jeffreyweir

+0

-GregGalloway, VBA olmalı ve eklenti yüklemek için esnekliğe sahip değilim. Eğer yapsaydım, bu bağlantı benim sorunumu çözerdi. Paylaşım için teşekkürler. –

cevap

0

Dim sC As SlicerCache 
Dim sL As SlicerCacheLevel 
Dim aArray() As Variant 

'create a slicer cache. I just used a recorded macro to get the cache code 
ActiveWorkbook.SlicerCaches.Add2(ActiveSheet.PivotTables("Metrics"), _ 
    "[RawData].[Status]").Slicers.Add ActiveSheet, "[RawData].[Status].[Status]", _ 
    "Status", "Status", 141.75, 424.5, 144, 198.75 

Set sC = ActiveWorkbook.SlicerCaches("Slicer_Status") 
Set sL = sC.SlicerCacheLevels(1) 'this will start with the first item in the slicer 

    With sL 
     For i = 1 To .Count 
      If sL.SlicerItems.Item(i).Name Like "*oran*" Then 
       GoTo nextiteration 'this will skip over anything 
            'like oran when saving to the array 
      End If 

      ReDim Preserve aArray(0 To i) As Variant 
      aArray(i) = sL.SlicerItems.Item(i).Name 

      nextiteration: 
     Next i 
      sC.VisibleSlicerItemsList = aArray 'this set the visible items 
               '= to the array you just created 
      'ActiveSheet.Shapes("Status").Visible = False 
      'to hide this slicer, uncomment the line above 
    End With 

This Post by Paul te Braak

çözeltinin kütle verdi. Öğeleri dizilere kaydetme konusunda yardım için this tutorial'u da kullandım. Dinamik dizilerle çalışmam gerektiğinde This stackoverflow answer da bana yardımcı oldu. -GregGalloway ve -jeffreyweir'e teşekkürler: Sağladığınız bağlantılara bakarken, dilimleyiciler kullanarak çözümler aramaya başladım.

İlgili konular