Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1888to1892
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Auswahllisten automatisch verkürzen

Auswahllisten automatisch verkürzen
03.07.2022 02:22:11
Excel-Freund
Guten Abend zusammen,
trotz eigentlich passabler Excel-Kenntnisse stehe ich aktuell ein bisschen auf dem Schlauch:
Ich möchte eine dynamische Dropdown-Auswahlliste erstellen. Excel bietet hierzu die Möglichkeit über Tabellen und entsprechende Tabellenbenennungen, sodass sich die Liste automatisch mit hinzufügen neuer Einträge erweitert.
Problem:
Wenn nach erfolgter Erweiterung durch Hinzufügen eines Eintrags in die Folgezeile die Dropdown-Auswahlliste erst einmal erweitert wurde und nachfolgend einer dieser Einträge wieder gelöscht wird, verkürzt sich die Liste nicht automatisch, sodass als Resultat störende leere Auswahlmöglichkeitsfelder zurückbleiben.
(Das ein manuelles Anpassen der Liste möglich ist, ist mir natürlich klar aber in diesem Fall wenig hilfreich.)
Für findige Ideen (VBA inklusive) bin ich sehr dankbar.
Beispiel hier:
Userbild
Userbild
Gruß
Excel-Freund

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Auswahllisten automatisch verkürzen
03.07.2022 08:52:26
Oberschlumpf
Hi,
damit aus...
Userbild
...das hier werden kann...
Userbild
...würde ich es so probieren...
Userbild
Das funktioniert aber nur, wenn man den Wert aus der letzten Zeile in Spalte C löscht.
Konnte ich helfen?
Ciao
Thorsten
Verbesserung
03.07.2022 09:18:57
Oberschlumpf
Hi,
nun könntest du jeden Wert löschen - die Auswahlliste in A1 wird immer aktualisiert.
Damit aus...
Userbild
...das hier werden kann...
Userbild
...müsstest du es so programmieren...
Userbild
Zuerst werden aus der Spalte C in einer Variablen alle Werte "gesammelt", wenn die zu überprüfende Zelle nicht leer ist.
Und nur der Inhalt der Variablen wird dann in einer aktualisierten Datengültigkeitsdefinition an Zelle A1 übergeben.
Das Ganze funktioniert auch in einer "intelligenten Tabelle".
Du musst die Zellbezüge natürlich an deine Tabelle anpassen; das hatte ich vergessen, im letzten Beitrag zu erwähnen.
Hilfts denn?
Ciao
Thorsten
Anzeige
AW: Verbesserung, naja fast
03.07.2022 13:22:51
ralf_b
Hallo Torsten,
Wie ich sehe arbeitest du mit cells(rows.count,3).end (xlup) in einem Listobject .....
das funktioniert nicht zuverlässig in einer intelligenten Tabelle. Auch eine sichtbar leere Zelle wird so nicht erkannt und end(xlup) landet immer am Ende des Listobjects.
Gehen wir also davon aus das die User einfache Anwender sind, und nicht nur in der Liste löschen, sondern auch am Ende und zu faul oder unwissend sind die Tabellenzeile zu löschen, dann funktioniert nur deine Verbesserung mit der Schleife zuverlässig.
Ich bin kein Freund vom vermischen von Listobject- und Zellreferenzen. Deshalb mein wohlgemeinter Hinweis.
gruß
rb
Anzeige
AW: Verbesserung, naja fast
03.07.2022 13:29:13
Oberschlumpf
Hi Ralf,
jep, wo du recht hast, hast du recht!
Dein Hinweis ist angekommen, und ich werde diesen berücksichtigen.
Danke.
Ciao
Thorsten
AW: Verbesserung
03.07.2022 13:41:04
Excel-Freund
Heureka! Es funktioniert!
Eine Frage hätte ich noch:
Wie implementiere ich es, dass sich die Auswahlliste (in ihrem Beispiel Fall Spalte "C") auf einem anderen Tabellenblatt (z.B. Tabellenblattname "Inventar") als die Einträge (in ihrem Beispiel Fall Spalte "A" / z.B. Tabellenblattname "Lager1") befindet?
Beispiel siehe hier:
Userbild
Userbild
Userbild
Anzeige
AW: Verbesserung
03.07.2022 13:45:29
Oberschlumpf
Hi,
wenn du aufhörst, Bilder zu zeigen und damit beginnst, per Upload bitte Excel-Bsp-Dateien mit allem erforderlichen Inhalt zu zeigen, damit man deine Beschreibungen verstehen kann, würde zumindest ich noch mal versuchen zu helfen.
Ciao
Thorsten
AW: Verbesserung
03.07.2022 13:53:48
Excel-Freund
Kein Problem, anbei die Beispieldatei.
(Eine Auswahl der Listeneinträge soll nur in Spalte A (ab inkl. A7:A2500) der Tabellenblätter Lager1 ff. erfolgen.)
https://www.herber.de/bbs/user/153955.xlsm
Lieben Dank im Voraus!
sprachlos + raus hier
03.07.2022 13:59:18
Oberschlumpf
ne Bsp-Datei ohne Bsp-Daten ist wie.....mir fällt echt nix mehr ein
ich bin hier raus; weiter viel Erfolg
Anzeige
AW: sprachlos + raus hier
03.07.2022 14:32:25
Excel-Freund
Falls Sie es sich doch noch einmal anders überlegen, anbei eine Beispieldatei inkl. einiger (m.M.n. völlig überflüssiger) Beispieldaten:
https://www.herber.de/bbs/user/153957.xlsm
Zur weiteren Erklärung:
Ich möchte vermeiden, dass die Auswahlliste (K1:L5) in jedem (Lager-)Tabellenblatt vorkommt. Daher möchte ich diese in ein eigenes Tabellenblatt "Inventar" verschieben. Leider funktioniert der Code dann leider nicht mehr, da die Verweise nicht mehr stimmen.
Die Frage ist: Wie muss der Code angepasst werden, damit dieser obiges möglich macht.
Ansonsten möchte ich mich nochmal für Ihre Unterstützung bedanken!
Herzliche Grüße
Excel-Freund
Anzeige
AW: sprachlos + raus hier
03.07.2022 15:06:47
ralf_b
ich habe die gleiche Intension wie Torsten, "raus hier". Dieser habe ich aber widerstanden. Warum? Für die Umstellung auf Listobjects brauchts nicht unbedingt Beispieldaten. Es ist bei sowas auch wichtig zu prüfen was passiert wenn die Liste leer ist. Denn bei Listobjects ändert sich da ein wenig. Heir ein verusch für den Code im Inventarblatt. Es ist übrigens nicht hilfreich Bereichsnamen zu definieren die mit Spaltennamen identisch sind. Ich hatte erwartet das deine Inventartabelle auch so heißt. z.b. "tab_Inventar". Sie heißt aber einfach Tabelle1. Wenn man bedenkt das da noch mehr Namen existieren, solltest du dort etwas Ordnung reinbringen. Das hilft ungemein wenn man die Namen auch in Formeln nutzen möchte.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.ListObject Is Nothing Then
Dim lstObj As ListObject
Dim rng As Range
Dim lstrVal As String
Set lstObj = Target.ListObject
With lstObj
If .ListRows.Count > 0 Then
With .ListColumns("Inventar").DataBodyRange
For Each rng In .Cells
If rng.Value  "" Then
lstrVal = lstrVal & rng.Value & ","
End If
Next
If lstrVal  "" Then lstrVal = Left(lstrVal, Len(lstrVal) - 1)
End With
Else
lstrVal = ""
End If
End With
'Nachfolgend müsste es möglich sein die Auswahllisten mehrerer Tabellenblätter zu prüfen
With Worksheets("Lager1").Range("A7:A2500").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=lstrVal
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Set lstObj = Nothing: Set rng = Nothing
End If
End Sub

Anzeige
AW: Auswahllisten automatisch verkürzen
03.07.2022 09:01:38
RPP63
Moin!
Bewege den Mauszeiger an den linken Rand des zu löschenden Eintrags, bis der Mauszeiger einen zeigt:

Dann Rechtsklick → Zeile/Spalte löschen → ganze Tabellenzeile
Als Code sieht das dann so aus:

Tabelle1.ListObjects("Tabelle1").ListRows(2).Delete
Wissenswertes zum Table-Objekt:
https://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables
Gruß Ralf
Anzeige
Wenn man es so wie ich macht …
03.07.2022 09:26:18
RPP63
… dann braucht man kein VBA.


stümmt, aber... :-)
03.07.2022 09:30:30
Oberschlumpf
...mit deiner Idee muss man die Zeilen/Zellen manuell löschen, also Zelle/Zeile markieren, ganze Datenzeile löschen (lassen)....mit VBA geht all das automatisch ;-)
Aber egal, jeder so, wie er mag...es gibt fast immer mehrere Wege nach Rom!
Bin aufs Feedback des Fragenden neugierig.
Noch ein Weg nach Rom
03.07.2022 10:46:52
RPP63
Wer zu wenig Mausgefühl hat und Einträge der Liste lieber mit Entf löschen will, könnte auch einfach prüfen, ob sich die Zelle (Target) im Listobject.Range befindet:

Private Sub Worksheet_Change(ByVal Target As Range)
With Tabelle1.ListObjects("Tabelle1")
If Not Intersect(Target, .Range) Is Nothing Then
If Target = "" Then Target.Delete xlUp
End If
End With
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige