ich habe vier Listen mit Namen - alle dynamisch als Tabelle formatiert.
Nun möchte ich, dass - bedingt durch den Zellnamen - die Listen hintereinander im Dropdown-Menü auftauchen. Per =indirekt() kann ich auf eine der Listen zugreifen ... soweit bin ich schon. Kann ich dann auch irgendwie die anderen dahinter hängen? Es sollte die erste Liste, auf die Bezug genommen wird auch zuerst im Dropdown auftauchen.
vielen Dank für deine Antwort und Einschätzung. Das hintereinanderschreiben von vier Liste - in der jeweils eine der Listen vorne steht - daran habe ich auch schon getüftelt. Da die Listen jedoch dynamisch sind und auch regelmäßig erweitert bzw gekürzt werden, wird es hakelig.
VBA ist überhaupt kein Problem - die Datei hat bereits Code ... Bevor nun jedoch viel Mühe in VBA gesteckt wird, sollte ich noch beschreiben, wo die Reise letztlich hin soll.
Mein Mappe sieht derzeit so aus, dass ich in einem Tabellenblatt wild verteilt zig Zellen habe (grob geschätzt 90) in denen dann per Datenüberprüfung eine Eintragung erfolgen soll. Die Liste, aus der sich die Datenüberprüfung zusammensetzt soll nun in einem extra Tabellenblatt stehen. Diese Liste soll aus den vier dynamischen Tabellen bestehen, wobei eine Tabelle optimalerweise vorangestellt werden soll.
Als zweiter und in meinen Augen noch wichtigerer Wunsch wäre eine Suchfunktion. Bei Eingabe der ersten Buchstaben, soll der Dropdown entsprechend eingegrenzt werden. So wie hier beschrieben: https://www.youtube.com/watch?v=AcQHleyCtB8
Problem hier ist, dass ich nicht 1 Suchfeld habe, sondern 90 ... und die zusammenhängende Liste aus den vier Listen habe ich damit immer noch nicht :(
arbeitsbedingt melde ich mich jetzt erst - habe deine Variante nun in Augenschein nehmen können. Vielen Dank für deine Mühe!!!! Eine Userform mit einem Array einzubauen, daran habe ich gar nicht gedacht. Leider ist das Ergebnis nicht so ganz, wie ich mir das vorstelle. Ich hatte gehofft, dass ich einfach in die Zelle schreiben kann, und er dann das Dropdownmenü entsprechend anpasst.
Problem ist zudem, dass er immer Bezug auf die Zeile 1 der Spalte nimmt. Allerdings befindet sich der Listenname auch mal in Zeile 15 bspw und die 10 Zeilen darunter sollen dann befüllt werden. Ich denke, dass ich Abstand davon nehme, dass die Liste1 als Erstes genannt werden soll, wenn im Kopf auch "Liste1" steht.
Habe mich auch an eine Formellösung probiert ... Das untereinanderschreiben der einzelnen Listen habe ich folgendermaßen lösen wollen:
Allerdings wird es aber der dritten dynamischen Tabelle, die ich anfüge, schon wieder schwierig. Ich verzweifle echt gerade ....
Das nächste Problem, was mich bei der Formellösung ereilen wird, dass die Suchfunktion in den vielen Zeilen nach meinem jetzigen Stand nicht möglich ist?!
Zitat:Leider ist das Ergebnis nicht so ganz, wie ich mir das vorstelle. Ich hatte gehofft, dass ich einfach in die Zelle schreiben kann, und er dann das Dropdownmenü entsprechend anpasst.
Also ist der einzige Unterschied zu deinem Wunsch und meinem Vorschlag dass nach dem Anklicken der gewünschten Zelle die Eingabe in der Textbox erfolgt. Das ist für mich etwa so als wenn es wichtig ist im Stadion mit 30000 Plätzen auf Platz 1520 zu sitzen und auf keinem Fall auf 1521.
Problem 2 sollte der Code lösen.
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim k, t As Variant Dim Zeile As Long Dim n As Range
Überschrift = "" For Each k In Sheets("Tabelle1").ListObjects Set n = Range(Cells(1, Target.Column), Cells(Target.Row, Target.Column)).Find(What:=k.HeaderRowRange(1).Value, LookAt:=xlWhole, SearchDirection:=xlPrevious) If Not n Is Nothing Then If Zeile < n.Row Then Überschrift = n.Value Zeile = n.Row End If End If Next k
If Überschrift <> "" Then Call Liste UserForm1.Show Cancel = True End If
das sollte überhaupt nicht böse von mir sein ... ich habe höchsten Respekt vor den Helfern hier im Forum und ich Danke dir.
Wenn ich das so überblicke sucht er immer nach oben nach der nächsten gültigen Überschrift bzw dem Listennamen ... richtig? Das sieht schon wesentlich besser aus :) - DANKE!
08.12.2018, 15:07 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2018, 15:07 von Elex.)
Hi @EasY
Ich hatte das auch nicht als Kritik oder gar böse verstanden, nur als etwas unflexibel.
Die zwei Möglichkeiten wie ein Ergebnis in der Zelle erscheint hast du erkannt? Doppelklick auf Textbox übernimmt Inhalt der Textbox. Klick in die Liste übernimmt den Listeneintrag.
Der neue Code hast du richtig analysiert. (nur gültige Überschrift, aber nicht Tabellenname/Listenname)
Bis dahin
Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:1 Nutzer sagt Danke an Elex für diesen Beitrag 28 • EasY
08.12.2018, 19:16 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2018, 19:17 von snb.)
Oder
Code:
Private Sub UserForm_Initialize() With Tabelle1.UsedRange .SpecialCells(4) = "~" .Offset(1).Resize(.Rows.Count).Copy end with
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .GetFromClipboard ListBox1.List = Filter(Split(Replace(.GetText, vbCrLf, vbTab), vbTab), "~", 0) End With End Sub
Private Sub ListBox1_Change() If ListBox1.ListIndex > -1 Then ActiveCell.Value = ListBox1.Value Hide End Sub
magst du mir kurz erläutern, was der Code macht? Habe den Code in die Userform kopiert und den alten initialize-Bereich rausgelöscht. Erkenne aber so adhoc nicht, was der Code macht...