AW: Drop Down aus gefilterter Tabelle (nicht Autofilter !)
26.10.2023 08:58:53
Oberschlumpf
Moin Joachim,
ich hab gerad mal die Frage/Lösung im von dir gezeigten Link nachgebaut (Bsp-Datei war ja zum Glück vorhanden).
Und ja, von Werner wieder mal ne geniale Lösung!!
Aber zumindest ich könnte dir nicht helfen, weil eben ohne Bsp-Datei.
Und aufgrund zu vieler nicht-helfender Erfahrungen hab ich es mir abgewöhnt, Bsp-Dateien für Fragende zu erstellen, weil eben von Fragenden zu oft eine Antwort war: "Sorry, meine Datei ist anders aufgebaut. Mit deiner Bsp-Datei kann ich nix anfangen."....oder so in der Art als Antwort...
Du musst doch nicht dein Original kopieren und dann in der Kopie jeden einzelnen Original-Zellwert mit einem Bsp-Wert ersetzen.
Könntest du nicht eine neue (Bsp)Datei erstellen, in der in Blatt1 z Bsp nur 10 Spalten und so 10-20 Zeilen genutzt werden, auf die du dann ......STOPP ALLES AUF ANFANG!!!! :-)
Während ich all das hier schreibe, fällt mir wieder ein: Du "spielst" doch schon mit VBA!
Wieso denn nicht auch mit VBA weitermachen????
Nach Ausführung deines VBA-Filters könntest du doch im Blatt "Prozesse" alle gefilterten Zeilen nach noch sichtbaren Zeilen durchsuchen und so deine Datengültigkeitsliste jedes mal aufs Neue generieren und deiner Zelle zuweisen - eben auch mit VBA direkt im Anschluss an "dein VBA".
Und da kommen wir gleich zum nächsten, leider immer wieder auftretenden Problem bei vielen Fragestellungen.
Ich zitiere dich mal:
"...Wenn die oben gezeigte Vorgehensweise per u.a. VBA-Code als Filter genutzt wird, werden leider immer die ausgeblendeten Zeileneinträge dennoch angezeigt. Wenn ich probeweise in der zugrundeliegenden Tabelle den Autofilter benutze, klappt das sofort; aber dieser Weg ist leider nicht passend, da ich in einem anderen Blatt determiniere, nach welchen Kriterien in der Tabelle gefiltert werden soll. ..."
a) und bitte WELCHE ZELLE ist deine Zelle mit Datengültigkeit???
b) und bitte aus WELCHER SPALTE im Blatt "Prozesse" sollen die Werte für Datengültigkeit gesammelt werden???
Verstehst du, was ich meine?
So ganz ohne deine Bsp-Datei können wir doch gar nicht wissen, was wann wie wo hin soll.
MIT Bsp-Datei hätten wir vllt ne Chance zu erkennen, was zu a) und was zu b) gehört - weils ja in der Bsp-Datei angezeigt wird.
Nun denn, ich hab für a) + b) irgdwelche Ziele/Daten genommen, und so könnte dein erweiterter VBA-Code aussehen:
Änder deinen Code um wie folgt:
Sub Filter_Formular_Änderung()
'
' Filter_Formular_Änderung Makro
'
'
Sheets("Prozesse").Select
Range("A10:D1000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("A7:D8"), Unique:=False
Sheets("Formular.Änderung").Select
Dim lshProz As Worksheet, lloRow As Long, lstrDataList
Set lshProz = Sheets("Prozesse")
With lshProz
For lloRow = 10 To .Cells(.Rows.Count, 1).End(xlUp).Row 'die Suche beginnt in Zeile 10; vielleicht musst du das anpassen
If .Rows(lloRow).EntireRow.Hidden = False Then
lstrDataList = lstrDataList & .Range("A" & lloRow).Value & "," 'ich hab die Werte aus Spalte A gesammelt; vielleicht musst du das ändern
End If
Next
End With
lstrDataList = Left(lstrDataList, Len(lstrDataList) - 1)
With Range("B1").Validation 'es wird die Zelle B1 mit der Datengültigkeitsliste belegt; vielleicht musst du das ändern
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=lstrDataList
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Set lshProz = Nothing
End Sub
Hilfts?
Nein? Dann vielleicht doch lieber mit einer Bsp-Datei per Upload von dir.
Ciao
Thorsten