Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1724to1728
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

mehrspaltiger ListBox-Eintrag in TextBox von anderer UF übertragen

mehrspaltiger ListBox-Eintrag in TextBox von anderer UF übertragen
04.12.2019 17:27:24
anderer
Hallo.
Dieses Thema wurde schon sehr oft angesprochen und ich habe auch verschiedene Lösungen ausprobiert. Ich bin aber zu meiner Situation noch zu keinen Erfolg gekommen.
Ich öffne auf der UF frm_Tag über einen Button "Suche" eine weitere UF "frm_Suche", bei der ich nach Einträgen suchen möchte. Nach gefunden Eintrag in der ListBox "lst_Zieladresse" in UF "frm_Suche", die 3 Spalten hat, möchte ich per Doppelklick gewählten Eintrag in die UF "frm_Tag" in die TextBox "txt_Zieladresse" übertragen, und zwar alle 3 Spalten von lst_Zieladresse.
Hier habe ich eine einfache Lösung im Netz gefunden.

Private Sub lst_Zieladresse_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
With frm_Tag
.txt_Zieladresse.Text = lst_Zieladresse.List(lst_Zieladresse.ListIndex, 0)
End With
End Sub

Ich bekomme aber die Fehlermeldung '381' wegen ungültigen Index der List-Eigenschaft.
Auch die kompliziertere Lösung

Private Sub lst_Zieladresse_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim intX, intY As Integer
Dim ctlTxt As control
Set ctlTxt = frm_Tag.txt_Zieladresse
intX = 0
With lst_Zieladresse
intY = .ListIndex
For Each ctlTxt In frm_Tag.Controls
If TypeName(ctlTxt) = "TextBox" Then
If intX = 6 Then Exit For
ctlTxt.Text = .Column(intX, intY)
intX = intX + 1
End If
Next
End With
End Sub

zeigt mir die selbe Fehlermeldung.
Hat jemand eine funktionierende Lösung?
Vielen Dank
LG
Peer
AW: mehrspaltiger ListBox-Eintrag in TextBox von anderer UF übertragen
04.12.2019 19:46:32
anderer
Moin!
Das Problem liegt m.E. an dieser Prozedur
Private Sub lst_Zieladresse_Click()
Damit trägst du den angeklickten Wert in die textbox. Damit änderst du sie, was wiederum ein neues Laden der Listbox nach sich zieht. Damit geht der listindex verloren. Wenn du ganz schnell klickst, geht das zwar auch (ca. jeder 5te Versuch bei mir eben) aber sonst läufst du in einen Fehler. Verzichte auf das einfache Clickereignis. Wenn du es aber doch brauchst, lege eine globale Variable an (als Schalter).
bspw. so:
Dim schalter As Boolean
' Variable für Letzte Zeile
Rem
Private Sub lst_Zieladresse_Click()
schalter = True
txt_OrtSuche = lst_Zieladresse
schalter = False
End Sub
Rem
Private Sub txt_OrtSuche_Change()
Dim LoI As Long                                 ' Schleifenvariable
Dim LoZeile As Long                             ' Variable für Zeile in Listbox
Dim RaFound As Range                            ' Variable für das Suchergebnis
If schalter = True Then Exit Sub
Application.ScreenUpdating = False    

Die Variable Schalter ist hierbei dafür da, dass das Ereignis nicht anspringt. Sie kommt im einfachen click und im change vor.
VG
Anzeige
AW: mehrspaltiger ListBox-Eintrag in TextBox von anderer UF übertragen
05.12.2019 16:22:13
anderer
Hallo Matthias.
Dein Vorschlag bezieht sich auf das einfache Click-Ereignis.
Mein Anliegen betraf aber den DblClick. Muss ich das gleichsetzen?
LG
Peer
AW: mehrspaltiger ListBox-Eintrag in TextBox von anderer UF übertragen
05.12.2019 21:31:52
anderer
Moin!
Der Fehler im Doubleclick resultierte m.E. aus dem CLickereignis. Du klickst einmal und das Event feuert (weiß ja nicht, das du nochmal klickst) beim zweiten Click (innerhalb der Zeit, dass es zählt) feuert dann das Doppelclick event. Im Einfach wird aber nun die Listbox neu befüllt und damit geht die listindex Eigenschaft verloren. Im Doppelclick nutzt du dann aber den nicht mehr gesetzten listindex Wert. Deshalb der Fehler. Daher entweder das einzelne Event rausnehmen oder so wie im letzten Post von mir, mit einem Schalter umgehen. Dann hast du noch das Click Event aber damit wird nicht mehr das Change Ereignis komplet durchlaufen. Ergo geht auch der listindex nicht mehr verloren und es funktioniert.
Habe es auch getestet.
VG
Anzeige
AW: mehrspaltiger ListBox-Eintrag in TextBox von anderer UF übertragen
06.12.2019 07:05:58
anderer
Guten Morgen, Matthias.
Vielen Dabk für deine Mühe und Hilfe.
Ich habe es gleich einmal ausprobiert, um zu sehen, was passiert, unabhängig davon, ob ich es verstehe. Aber du hattest vollkommen recht. Es funktioniert
Dabei kam mir ein weiterer Gedanke.
Ich habe ja die UF frm_Tag, bei der ich per Doppelklick im Textfeld "txt_Zieladresse" die UF "frm_Suche" aufrufe, um die Asresse zu suchen und einzutragen. Dabei habe ich das Dblclick Ereignis dem "frm_Tag.txt_Zieladresse" zugeordnet.
Nun habe ich in frm_Tag noch ein weiteres Textfeld "txt_AndererOrt", bei dem der Beginn der Reise gesucht werden soll, wobei die Adressen auch auf die Tabelle "Reiseziele" zugreifen soll. Hier wäre es angebracht auf gleiche UF frm_Suche" zu zugreifen.
Aber wie kann man es realisieren, die Zuordnung des Listenfeld-Eintrages den Textfeld zu geben, das vorher per Doppelklick ausgewählt wurde?
Oder muss ich eine weitere UF dafür anlegen?
LG
Peer
Anzeige
AW: mehrspaltiger ListBox-Eintrag in TextBox von anderer UF übertragen
06.12.2019 20:40:24
anderer
Moin!
Natürlich brauchst du da keine neue Userform. Du kannst die alte wiederverwenden. Dazu im Code nur an die UF Suche das Element, in welchem eingetragen werden soll, mit übergeben. Das geht am besten, wenn du den Namen des Controls in die Tag - Eigenschaft schreibst. In der UF SUche nimmst du dann den Wert und schreibst damit direkt in das entsprechende Control. Habe den Code mal so angepasst. Kann aber nicht garantieren, dass er fehlerfrei funktioniert - konnte ihn nicht am Original testen.
Also in der UF Tag das hier ändern (das ist schon für Zieladresse und für anderer ORt)
Private Sub txt_Zieladresse_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
With frm_Suche
.tag = "txt_Zieladresse"
.Show
.tag = ""
End With
End Sub
Private Sub txt_AndererOrt_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
With frm_Suche
.tag = "txt_AndererOrt"
.Show
.tag = ""
End With
End Sub
Und bei der UF Suche dann das hier
Private Sub lst_Zieladresse_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
frm_Tag.Controls(Me.tag) = Me.lst_Zieladresse.List(Me.lst_Zieladresse.ListIndex, 0)
End Sub
Schaue aber mal noch. Dem Button suche hast du auch die UF Suche zugeordnet. Dort entsprechend ändern.
Achja, wenn Fragen sind oder was unklar, dann einfach melden und fragen. Stört mich nicht und auch wenn eine Erklärung nicht verständlich war, einfach nochmal nachfragen. Wäre kein Problem.
VG
Anzeige
AW: mehrspaltiger ListBox-Eintrag in TextBox von anderer UF übertragen
07.12.2019 10:40:01
anderer
Moin Markus.
Vielen Dank für deine Erläuterungen.
Ich habe deinen Vorschlag gleich mal in die Tat umgesetzt.
Aber der Debugger meldet bei der Tag.Eigenschaft jedes Controls einen Fehler "Laufzeitfehler '-2147024809(80070057)' - ungültiges Argument".
Die Office Hilfe schreibt von Überschreitung zulässigen Wertebereichs, die z.B. auf die ungültige aktuelle Plattform zurück zuführen ist. ?
LG
Peer
AW: mehrspaltiger ListBox-Eintrag in TextBox von anderer UF übertragen
07.12.2019 12:02:59
anderer
Moin!
Wie geschrieben, kann deine UF leider nicht in echt testen. Haben eben mal grob zwei UF mit den betreffenden Contols nachgebaut und versucht den Ablauf zu simulieren. Konnte einen ähnlichen Fehler reproduzieren. Nach dem Doppelclick schließt du die UF_Suche (mit x oder Button). Dann kann das .tag = "" nicht mehr gesetzt werden. Nimm denshalb mal die beiden Zeilen hier raus:
.tag = ""
Dann sollte der Fehler nicht mehr kommen und die Eintragungen erfolgt sein. Ansonsten lade bitte nochmal die aktuelle Datei hoch. Dann schaue ich nochmal drüber. Frage noch. Die UF_Suche ist die gebunden oder frei. Kannst du also wenn die offen ist noch ins Blatt klicken oder in eine andere UF oder geht es erst wieder, wenn die zu ist?
VG
Anzeige
AW: mehrspaltiger ListBox-Eintrag in TextBox von anderer UF übertragen
07.12.2019 12:38:38
anderer
Hi.
Die UF muss geschlossen werden, bevor ich weiter arbeiten kann.
Ich lade dir das aktuelle Projekt hoch. Dabei habe ich die UF frm_Suche ein wenig geändert, um die ausgewählten Einträge in die drei Textboxen bei Auswahl zu übertragen, um entweder den gewählten Eintrag zu ändern oder einen neuen hinzuzufügen.
Ich habe die .tag-Eigenschaften auskommentiert und es macht, wie du geschrieben. Bei Aber warum brauche ich die zweite Tag-Eigenschaft? Zum "Resetten"?
https://www.herber.de/bbs/user/133657.xlsm
LG
Peer
Anzeige
AW: mehrspaltiger ListBox-Eintrag in TextBox von anderer UF übertragen
07.12.2019 16:20:52
anderer
Moin!
Nein, die war nicht zum resetten da. Das "Resetten" kommt mit dem Schließen. Die Tag Eigenschaft ist wie ein Platzhalter für das entsprechende COntrol (sowas haben die meisten). Darein kann man beliebige Werte schreiben/lesen. Ich habe mir nur angewöhnt, die Eigenschaft nach dem Setzen wieder zu Löschen. Insb. dann, wenn man verschiedene Werte in das Tag schreibst. Dadurch fallen einem ggf. Fehler auf und man nutzt auch nur den WErt den man dort haben wollte. Bei deinem Code war halt das PRoblem, dass nach dem SChließen die Form nicht mehr da war und deshalb darauf nicht mehr zugegriffen werden konnte. Brauchst da jetzt aber nichts ändern.
Zu deiner Änderung für das Erfassen bzw. Ändern.
SChreibe dir in die Listbox in einer vierten Spalte die Zeilennummern im Blatt. Die Spalte brauchst du ja nicht anzeigen. Die musst du dann beim Change aber auch mit übernehmen. Damit brauchst bei Änderungen später nicht noch extra die Zeilen suchen, in welcher du bist. Am Anfang ist es zwar identisch mit dem listlindex +1 aber wenn du was im Textfeld hast und die LIste gefiltert ist, stimmt es nicht mehr. Zudem solltest du dir einen Button "neu" oder so was anlegen. Der Sollte nur den listindex der Liste auf -1 setzen und die Textfelder leeren. Ansonsten wird es schwierug für den Code hinter dem + zu unterscheiden, ob du nun eine Änderung vornimmst oder einen neuen Wert einträgst (bspw. wenn im selben Ort eine Straße hinzukommt).
Du hattest da noch keinen Code drin. Wußte nicht, ob du den noch machst, Tipps dazu oder den kompletten Code brauchst.
VG
Anzeige
AW: mehrspaltiger ListBox-Eintrag in TextBox von anderer UF übertragen
07.12.2019 17:38:22
anderer
Hi Matthias.
Schau mal in meine Mappe im frm_Parameter. Im Register "Reise...". Da ist die Liste Reisezweck. Mit dem Doppelklick auf einen Eintrag kommt eine InputBox, bei der du den Einträg ändern kannst. Wenn du auf eine leere Zeile doppelklickst, dann kannst du in der InputBox einen Eintrag hinzufügen.
LG
Peer

179 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige