Hallo
ik ben redelijk onbekend met macro's in Excel, maar ben aan het leren terwijl ik werk.
Mijn vraag draait rond een Excel met een draaitabel (omgezet in OLAP cubes) waaraan 35 verschillende slicers hangen (alle slicers hebben twee values, de naam van de slicer eigenlijk en (leeg)).
Ik moet manueel elke slicer optie (niet de (leeg)) een PDF maken van het resultaat op de draaitabel. Daarna moet ik de slicer clearen, daarna de volgende slicer en dito optie aanklikken en hetzelfde doen.
Ik wil dit dus automatiseren, en een PDF maken van een Excel-sheet heb ik al gemaakt, dat kan ik al. Het probleem zit hem in het doorlopen van de verschillende slicers en de sliceroptie die ik nodig heb.
Als ik een macro opneem voor twee slicers krijg ik dit als resultaat:
Ik heb dus een loop nodig voor elke bestaande slicer en daarna een loop om door de gedefinieerde optie te gaan per slicer (voor elke slicer zal dit anders zijn)...
Ik heb dit reeds gevonden, maar zit vast aan de tweede For Each ...
Iemand die me op weg kan helpen?
ik ben redelijk onbekend met macro's in Excel, maar ben aan het leren terwijl ik werk.
Mijn vraag draait rond een Excel met een draaitabel (omgezet in OLAP cubes) waaraan 35 verschillende slicers hangen (alle slicers hebben twee values, de naam van de slicer eigenlijk en (leeg)).
Ik moet manueel elke slicer optie (niet de (leeg)) een PDF maken van het resultaat op de draaitabel. Daarna moet ik de slicer clearen, daarna de volgende slicer en dito optie aanklikken en hetzelfde doen.
Ik wil dit dus automatiseren, en een PDF maken van een Excel-sheet heb ik al gemaakt, dat kan ik al. Het probleem zit hem in het doorlopen van de verschillende slicers en de sliceroptie die ik nodig heb.
Als ik een macro opneem voor twee slicers krijg ik dit als resultaat:
Code:
ThisWorkbook.SlicerCaches("Slicer_All").VisibleSlicerItemsList = Array("[FiliaalOmzet].[All].&[All]")
ThisWorkbook.SlicerCaches("Slicer_All").ClearManualFilter
ThisWorkbook.SlicerCaches("Slicer_AllExSoi").VisibleSlicerItemsList = Array("[FiliaalOmzet].[AllExSoi].&[AllExSoi]")
ThisWorkbook.SlicerCaches("Slicer_AllExSoi").ClearManualFilter
Ik heb dus een loop nodig voor elke bestaande slicer en daarna een loop om door de gedefinieerde optie te gaan per slicer (voor elke slicer zal dit anders zijn)...
Code:
Sub slicers(slName As Variant) Dim slItem As SlicerItem
Dim slDummy As SlicerItem
Dim slCache As SlicerCache
Dim sl As Slicer
Dim slItemsArray() As Variant ' store values for matching SlicerItems in an Array
ReDim slItemsArray(1 To 2)
slItemsArray(1) = "[FiliaalOmzet].[All].&[All]"
slItemsArray(2) = "[FiliaalOmzet].[AllExSoi].&[AllExSoi]"
Set wb = ThisWorkbook
Set slCache = wb.SlicerCaches(slName)
For Each slvalue In slItemsArray ' Loop through the Array containing the values you want to use to match with SlicerItems
For Each slItem In slName.SlicerCache
sl.ClearManualFilter
For Each slDummy In sl.SlicerItems
slDummy.Selected = (slDummy.Name = slItem.Name)
If slItem.Name = slvalue.Name Then
MsgBox slvalue.Name ' do stuff here if the Selected SlicerItem matches the target value in your Array, otherwise it will move on to selecting next SlicerItem
End If
Next slDummy
Next slItem
Next slvalue
End Sub
Sub slicerArray()
Dim slArray As Variant ' store Slicer names in an Array
' Set slArray values here
slArray = Array("Slicer_All", "Slicer_AllExSoi")
For Each slName In slArray ' Loop through Array with Slicer Names and call Sub above for each
Call slicers(slName)
Next slName
End Sub
Ik heb dit reeds gevonden, maar zit vast aan de tweede For Each ...
Iemand die me op weg kan helpen?