VBA Datenschnitt Werte auslesen / Werte setzen
#1
Hallo zusammen,

ich hoffe sehr, dass ihr mir bei folgendem Problem helfen könnt.
Ich habe einen Datenschnitt (Slicer) in Excel mit ~ 50 Mitarbeiternummern und Namen

Ich würde gerne der Reihe nach diese Einträge auswählen (anklicken), die Daten aktualisieren und drucken.
Beim auswählen zwei unterschiedlicher Einträge erhalte ich bei der Makroaufzeichnung folgenden Code (in schwarz):



Sub Aktualisieren()

Dim manummername As String

manummername = "1003 (Mustermensch)"

    ActiveWorkbook.SlicerCaches("Datenschnitt_MA___Name").VisibleSlicerItemsList = Array("[HRM].[MA + Name].&[1001 (Mustermann)]")
    ActiveWorkbook.SlicerCaches("Datenschnitt_MA___Name").VisibleSlicerItemsList = Array("[HRM].[MA + Name].&[1002 (Musterfrau)]")
   
    ActiveWorkbook.SlicerCaches("Datenschnitt_MA___Name").VisibleSlicerItemsList = Array("[HRM].[MA + Name].&[ & manummername & ]")
   
End Sub



Die Mitarbeiternummer und den Namen, also 1001 (Mustermann) bzw. 1002 (Musterfrau) / 1003 (Mustermensch) könnte ich aus einem anderen Tabellenblatt auslesen.

Der erste und zweite (aufgezeichnete) Eintrag funktionieren, beim dritten wäre mein Ansatz das Dynamisch via Variable zu befüllen. Ich habe hier aber sicher die & falsch gesetzt oder auch " vergessen etc.

Auf jeden Fall gibt es hier einen Fehler, dass der OLAP Eintrag nicht gefunden wurde.

Hat jemand eine Idee wie ich hier diesen Eintrag dynamisch (in einer Schleife) setzen kann?

Vielen Dank und schöne Grüße

Oliver

PS: Theoretisch interessiert mich auch wie man den Datenschnitt / Slicer auslesen und die Inhalte in ein Tabellenblatt schreiben könnte.
WIN 10 64-Bit Pro / EXCEL Microsoft Office 365 ProPlus 64-Bit
Top
#2
Hallo,

nur kurz getestet; die Einträge eines bestimmten Slicers kannst Du Dir beispielsweise wie folgt auslesen lassen.

Code:
Public Sub GetSlicerElements()
 
  Dim n As Long
  Dim o As Object
 
  For Each o In ThisWorkbook.SlicerCaches("MySlicer").SlicerItems
   
    n = n + 1
    ActiveSheet.Cells(n, 4).Value = o.Name
   
  Next
 
End Sub

Um jetzt die Slicer-Namen zu listen, ginge z.B. sowas:

Code:
Public Sub GetSlicers()
 
  Dim n As Long
  Dim o As Object
 
  For Each o In ThisWorkbook.SlicerCaches
   
    n = n + 1
    ActiveSheet.Cells(n, 4).Value = o.Name
   
  Next
 
End Sub

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Top
#3
Hallo Mani,

super vielen Dank für deine Antwort. Werde ich gleich mal testen.
Hast du eventuell auch einen Ansatz wie man die Einträge dann setzen kann?
Also ich stelle mir das so vor, dass ich vorher die Einträge auslese und diese dann in einer Schleife setze.

Danke und lg

Oliver
WIN 10 64-Bit Pro / EXCEL Microsoft Office 365 ProPlus 64-Bit
Top
#4
Hallo,

meinst Du vielleicht so?

Code:
Public Sub SelectSlicerItems()
 
  Dim o As SlicerItem
 
  For Each o In ThisWorkbook.SlicerCaches("Slicer_Test").SlicerItems
   
    o.Selected = True
   
  Next
 
End Sub

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste