VBA /CubeWert/Combobox
#1
Liebe Gemeinde 

ich bastel grad bissl rum und bräuchte mal einen Rat. 

Kann man eine Combobox (hier auf einem Worksheet) direkt mit einer 
PowerQuery Abfrage füllen?

ICh habs über VBA; CubeWert und Cubeelement probiert aber so recht klappt nichts. 

Danke für eure Hinweise =)

Jack_D
Antworten Top
#2
(09.10.2025, 14:54)Jack_d schrieb: Liebe Gemeinde 

Kann man eine Combobox (hier auf einem Worksheet) direkt mit einer 
PowerQuery Abfrage füllen?

Moin Jack,

direkt wohl nicht. Wenn mit direkt gemeint ist, dass Du das Abfrageergebnis nur ins Datenmodell lädst. 

Du könntest Dir aber eine Abfrage (mit nur der einen benötigten, gefilterten Spalte) im Tabellenblatt ausgeben lassen und über Rechtsklick --> Formatieren der Combobox diesen Wertebereich im Reiter Steuerung angeben...

   

Nachteil, nach jeder Änderung in der Quelle müsste die Abfrage aktualisiert werden....
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#3
Ahoi Ralf

Danke!

Ja mit direkt meinte ich genau das. .. Ohne Umwege 

ICh will mittels PQ mir ein Verzeichnis auslesen, und dann soll der Nutzer 
mittels 2er CBoxen sich den Ort und das Jahr aussuchen. 

and than the magic should happen ^^


Ein Zwischenladen wollte ich vermeiden. 
Vielleicht muss ich es dann direkt über VBA lösen. - was ich nicht so "schön" find

VG Jack
Antworten Top
#4
(09.10.2025, 15:41)Jack_d schrieb: Ein Zwischenladen wollte ich vermeiden. 
Vielleicht muss ich es dann direkt über VBA lösen. - was ich nicht so "schön" find

Du sollst ja die Dateien nich zwischenladen. Du willst ja nur die Dateinamen. Und die musst Du auch mit VBA einlesen. Insofern gibt es da keinen großen Unterschied. 
Das PQ Ergebnis lädst Du in eine (einspaltige) Pivottable und fügst einen Slicer hinzu.  Das ist dann schon beinahe wie eine Combobox. 
Da nutzt Du halt den Slicer als Filter (ist aus meiner Sicht sogar einfacher als das scrollen in einer C-Box). Und wenn Du immer nur einen Eintrag filterst (macht sich gut über den Einsatz bei Slicern) kannst Du in der Zielzelle einfach sagen: = A2 (wenn die Überschriftenzeile der "Pivotcombobox" in A1 ist)...

   

Funktioniert natürlich nur dann, wenn nur eine Zelle mit der Auswahl befüllt werden muss, also z. Bsp. bei einem Aufnahmformular. Wenn mehrere Zellen auf diese "Combobox" zugreifen und abweichende Ergebnisse benötigen, dann geht das natürlich nicht...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#5
Hallo Ralf, 

danke für deinen Vorschlag. 

Das ist eine schöne Idee. Das werd ich so Umsetzen. 
Da müsste dann auch der Konsekutive Filter gut funktionieren. 

DANKE!
& Viele Grüße 

Jack
Antworten Top
#6
Noch eine ergänzende Frage: 

Schaffe ich es den Wert direkt anzusprechen?

Mit "getPivotData" sowie die einzelnen "Fields" bekomm ich es irgendwie nicht hin

Grüße Jack
Antworten Top
#7
Hallo Jack,
 
in Hoffnung es richtig verstanden zu haben: 
Öffne, falls du es noch nicht getan hast im VBA Editor das Lokalfenster und dann starte diese kleine Prozedur.
Im Lokalfenster siehst du dann alle Elemente des Pivotobjekts, auf was du dann auch zugreifen kannst.
Code:
Sub test()
    Dim oPv As PivotTable
    Set oPv = Tabelle1.PivotTables(1)
    Stop
End Sub

Gruß uwe
Antworten Top
#8
Hallo Uwe, 

danke für deine Hilfe. Ich schau immer online in der MS Bibliothek/MS Learn welche Objecte und Methoden und Eigenschaften vorhanden sind. 
Aber Lokal hab ich es natürlich komprimiert. 

Leider hab ich auch da nichts gefunden. 

Ich hab nur gelesen, dass ich den (data)Slicer nicht direkt adressieren kann sondern über die slicerQuelle gehen muss. 
Und da ich nen String brauche, kann ich mir den auch Schwer über die Measures bei PVT 
ziehen muss also auf pVtRow oder PVtColumn zurückgreifen. 

Die wiederum geben mir nicht den Wert zurück. - also soweit ich das geblickt hab

Grüße 
Jack
Antworten Top
#9
Hallo Jack,

wenn du die Slicer-Werte auslesen willst musst du über den SlicerCache dies tun.

Kleine For/Each Schleife mit Ausgabe des selektierten Wertes:
Code:
Sub SlicerWerteVonPivotTable()
    Dim pt As PivotTable, cSL As SlicerCache, iSL As SlicerItem, i&
    Set pt = Tabelle1.PivotTables(1)
       For Each cSL In ThisWorkbook.SlicerCaches
        If cSL.PivotTables.Count > 0 Then
            If cSL.PivotTables(1).Name = pt.Name Then
                Debug.Print "Slicer: " & cSL.Name
                For Each iSL In cSL.SlicerItems
                    i = i + 1
                    If iSL.Selected Then MsgBox "Wert in angeklickten SlicerItem = " & iSL.Name & i & ". SlicerItem"
                Next iSL
            End If
        End If
    Next cSL
End Sub

Gruß Uwe
Antworten Top
#10
Für PowerPivot sieht es leicht anders aus, wobei ich mir das Leben einfache gemacht habe und annehmen, es gibt jeweils immer nur ein Item
Code:
Sub GetPowerPivotSlicerSelections()
    Dim sc As SlicerCache
    Dim si As SlicerItem
    Dim selectedItems As String

    ' SlicerCache-Name anpassen
    Set sc = ThisWorkbook.SlicerCaches(1)

    selectedItems = "Ausgewählte Elemente im Slicer '" & sc.Name & "':" & vbCrLf

    ' Zugriff über Levels(1).SlicerItems bei PowerPivot
    For Each si In sc.SlicerCacheLevels(1).SlicerItems
        If si.Selected Then
            selectedItems = selectedItems & " - " & si.Name & vbCrLf
        End If
    Next si

    MsgBox selectedItems
End Sub
Antworten Top


Gehe zu:


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