Hallo, ich möchte für eine Tabelle ein Dropdown-Menü erstellen mit VBA, welches sich dynamisch an die verschiedenen Elemente anpasst. Es ist so gedacht, dass Benutzer in einem anderen Tabellenblatt ihre gewünschten Elementen eintragen können und aufbauend darauf sich auch die Möglichkeiten bei der Auswahl im Dropdown-Menü ändern sollen.
Mit dem Makrorekorder habe ich folgende Lösung erhalten:
Code:
Sub Potential() ' ' Potential Makro '
' Application.CutCopyMode = False With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=Parameter!$A$19:$A$36" .IgnoreBlank = False .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With End Sub
Dabei habe ich neben den gefüllten Zellen auch ungefüllte markiert, sodass diese beim späteren nachtragen auch mit berücksichtigt werden. Jedoch bekomme ich im Dropdown-Menü folglich auch leere Felder zur Auswahl angezeigt. Mir fallen spontan zwei Ideen ein:
1) Kann man für das Dropdown-Menü definieren, dass nur gefüllte Zellen in einem Bereich berücksichtigt werden. 2) Ist es sinnvoller mit einer Schleife einen Bereich zu druchlaufen und auf Inhalt zu prüfen?
06.07.2018, 15:22 (Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2018, 15:22 von Frogger1986.)
Wenn die Daten alle in einer Arbeitsmappe sind, könnte man mit Indirekt() und Zählenwenn() arbeiten um den Bereich mit den Daten zu ermitteln! Oder man wandelt den Bereich in eine intelligente Tabelle um gibt dem Bereich einen Namen und verknüpft die Tabelle mit dem Dropdown
Ich wollte nun den durch den Makrorekorder aufgenommenen Code ändern, indem ich die absoluten Zellen durch einen Verweis auf meine Tabelle ersetze. Der Name der Tabelle ist "Tabelle1":
Code:
Sub Potential() ' ' Potential Makro '
' With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=Parameter!$A$20:$A$26" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With End Sub
xlBetween, Formula1:="=Parameter!$A$20:$A$26" wollte ich durch xlBetween, Formula1:="=Parameter!Tabelle1" ersetzen, jedoch erhalte ich dann in der Zeile eine Fehlermeldung. Hättest du eine Idee für das Problem? Danke :)
(09.07.2018, 08:38)JonasRe schrieb: Ich wollte nun den durch den Makrorekorder aufgenommenen Code ändern, indem ich die absoluten Zellen durch einen Verweis auf meine Tabelle ersetze. Der Name der Tabelle ist "Tabelle1":
Wenn ich deinen Code anschaue, heißt die Tabelle aber Parameter.
Vielen Dank schon mal, ich werde mal die Informationen verarbeiten :)
Ich erzeuge in einem Tabellenblatt das Dropdown-Menü und die Werte dazu erhalte ich aus einer Tabelle, die auf einem anderen Tabellenblatt "Parameter" ist. Das DropDown-Menü sollte benutzerfreundlich sein, sprich durch einfaches hinzufügen von neuen Werten soll auch das Dropdown-Menü aktualisiert werden. Die Werte des Dropdown-Menüs sind Mitarbeiterbewertungen, die Mitarbeiter selbst werden aus anderen Excel-Datein gelesen, sodass die Zellen, dabei auch variieren. Dabei dachte ich, dass VBA die beste Lösung wäre.
Ich versuche es mal umzusetzen und würde mich ggbfls. wieder hier melden, falls ich weiterhin Probleme habe. Aber schonmal vielen Dank an alle!
Also habe es probiert und bin schon weitergekommen, jedoch werden mir nicht alle Werte angezeigt. Ich habe mal die Werte in eine neu Mappe kopiert. Bei dem Dropdown-Menü wird mir zu Beginn erst eine Leerzeile angezeigt und dann nur der erste Wert. Ich habe versucht es so wie @RPP63 zu machen, habe dabei wohl irgendwo einen Fehler.
Tut mir leid für die Umständlichkeiten, aber weiß gerade nicht weiter. Ich danke euch!