Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1580to1584
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

Bei jedem Click in ListBox Code ablaufen lassen

Bei jedem Click in ListBox Code ablaufen lassen
19.09.2017 14:46:29
Willi
Hallo,
ich habe 2 Fragen.
1. Wenn ich in der ListBox eine Auswahl treffe, soll ein Code ablaufen.
Private Sub ListBox1_Click()
Dim Nachname As String
Nachname = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
Me.TextBox1.Value = Nachname
End Sub
Beim ersten clicken in die ListBox funktioniert es auch. Wenn ich aber versehentlich die falsche Zeile angecklickt habe und direkt hinterher eine andere anclicke läuft der Code nicht ab. Ich habe es auch schon mit ListBox1_Change() probiert. Bei genau dem gleichen Code bekomme ich die Fehlermeldung: Laufzeitfehler '94': Unzulässige Verwendung von 0.
Der Fehler tritt beim Befehl Nachname=Me.ListBox1.List(Me.ListBox1.ListIndex, 0) auf.
Was ist das Problem und wie bekomme ich es hin, dass nach jedem anclicken einer Zeile, der Code ausgeführt wird?
2. Eine ähneliche Frage hab ich schon letztens im Bezug auf die ComboBox gestellt.
Ich habe einen Bereich als Tabelle formatiert und befülle die ListBox mit dieser Tabelle. Jetzt soll beim anclicken einer Zeile in der ListBox heraus gefunden werden, in welcher Zelle der Tabelle der Eintrag in der ListBox zu finden ist. Wie bewekstelligt man das?

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bei jedem Click in ListBox Code ablaufen lassen
19.09.2017 14:56:02
yummi
Hallo Willi,
reagier mal auf MouseDown, damit kannst Du ohne die Listbox zu verlassen anderes anklicken mitbekommen.
Gruß
yummi
AW: Bei jedem Click in ListBox Code ablaufen lassen
19.09.2017 15:03:58
Willi
Hallo yummi,
danke für die schnelle Antwort.
ich habe den gleichen Code in MouseDown eigegeben. Ich bekomme die Fehlermeldung: Laufzeifehler 381: Eigenschaft List konnte nicht abgerufen werden. Index des Eigenschaftenfelds ungültig.
Was ist das Problem? Muss da noch was anderes rein oder muss noch was bei den Eigenschaften eingestellt werden? Hab leider nicht so sehr viel Anhnung.
Gruß,
Willi
AW: Bei jedem Click in ListBox Code ablaufen lassen
19.09.2017 15:10:44
Willi
Der Fehler tritt übrigens beim gleichen Befehl auf.
Anzeige
AW: Bei jedem Click in ListBox Code ablaufen lassen
19.09.2017 20:26:20
Werner
Hallo Willi,
kann ich nicht nachvollziehen. Hab gerade eine Userform mit einer Listbox und einer Textbox nachgebaut und getestet. Funktioniert mit deinem hier online gestellten Code. Bei jedem Klick in die Listbox wird der Wert in die Textbox übertragen.
Habe hier Excel 2010 am Start.
Gruß Werner
AW: Bei jedem Click in ListBox Code ablaufen lassen
19.09.2017 20:26:38
Uduuh
Hallo,
Private Sub ListBox1_Click()
TextBox1 = ListBox1
End Sub

reicht vollkommen
Gruß aus’m Pott
Udo

AW: Bei jedem Click in ListBox Code ablaufen lassen
19.09.2017 21:41:48
Willi
Hallo Udo, hallo Werner
es wird daran liegen, dass die Listbox neu befüllt wird, wenn etwas in die TextBox eingegeben wird. Das läuft über TextBox1_Change().
Private Sub TextBox1_Change()
Dim rngCell As Range
Dim strFirstAddress As String
If Me.TextBox1.Value  "" Then
Me.ListBox1.RowSource = ""
With Range("Tabelle1[Name]")
Set rngCell = .Find(UserForm2.TextBox1.Value, LookIn:=xlValues, lookat:=xlPart)
If Not rngCell Is Nothing Then
strFirstAddress = rngCell.Address
Do
With Me.ListBox1
'.ColumnCount = 9
.AddItem
.List(.ListCount - 1, 0) = rngCell.Value
.List(.ListCount - 1, 1) = rngCell.Offset(0, 1).Value
.List(.ListCount - 1, 2) = rngCell.Offset(0, 2).Value
.List(.ListCount - 1, 3) = rngCell.Offset(0, 3).Value
.List(.ListCount - 1, 4) = rngCell.Offset(0, 4).Value
.List(.ListCount - 1, 5) = rngCell.Offset(0, 5).Value
.List(.ListCount - 1, 6) = rngCell.Offset(0, 6).Value
.List(.ListCount - 1, 7) = rngCell.Offset(0, 7).Value
.List(.ListCount - 1, 8) = rngCell.Offset(0, 8).Value
End With
Set rngCell = .FindNext(rngCell)
Loop While Not rngCell Is Nothing And rngCell.Address  strFirstAddress
End If
End With
Else
Me.ListBox1.RowSource = "Tabelle1[Name]:Tabelle1[Firma]"
End If
End Sub

Die TextBox soll ein Suchfeld sein. Wenn etwas eingegeben wird, soll in der ListBox nach Einträgen gesucht werden, die diesen Text enthalten. Die Funktion TextBox1 = ListBox1 soll aber beibehalten werden. Wie kann man das machen?
Gruß,
Willi
Anzeige
AW: Bei jedem Click in ListBox Code ablaufen lassen
19.09.2017 22:02:24
Werner
Hallo Willi,
dann nimm doch für die TextBox das
Private Sub TextBox1_AfterUpdate()

Ereignis. Dann wird das ausgeführt bei Verlassen der TextBox.
Gruß Werner
AW: Bei jedem Click in ListBox Code ablaufen lassen
19.09.2017 23:34:15
Gerd
Hallo Willi,
AddItem u. RowSource zu vermischen, kommnt nicht gut.
Aus Userform2 habe ich bei "Find" Me gemacht.
Probier mal.
Private Sub UserForm_Initialize()
Me.ListBox1.Clear
Me.ListBox1.List = Range("Tabelle1[Name]:Tabelle1[Firma]").Value
End Sub
Private Sub ListBox1_Click()
Dim Nachname As String
Nachname = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
Me.TextBox1.Value = Nachname
End Sub
Private Sub TextBox1_Change()
Dim rngCell As Range
Dim strFirstAddress As String
If Me.TextBox1.Value  "" Then
Me.ListBox1.Clear
With Range("Tabelle1[Name]")
Set rngCell = .Find(Me.TextBox1.Value, LookIn:=xlValues, lookat:=xlPart)
If Not rngCell Is Nothing Then
strFirstAddress = rngCell.Address
Do
With Me.ListBox1
'.ColumnCount = 9
.AddItem
.List(.ListCount - 1, 0) = rngCell.Value
.List(.ListCount - 1, 1) = rngCell.Offset(0, 1).Value
.List(.ListCount - 1, 2) = rngCell.Offset(0, 2).Value
.List(.ListCount - 1, 3) = rngCell.Offset(0, 3).Value
.List(.ListCount - 1, 4) = rngCell.Offset(0, 4).Value
.List(.ListCount - 1, 5) = rngCell.Offset(0, 5).Value
.List(.ListCount - 1, 6) = rngCell.Offset(0, 6).Value
.List(.ListCount - 1, 7) = rngCell.Offset(0, 7).Value
.List(.ListCount - 1, 8) = rngCell.Offset(0, 8).Value
End With
Set rngCell = .FindNext(rngCell)
Loop Until rngCell.Address = strFirstAddress
Else
Me.ListBox1.List = .Resize(, 9).Value
End If
End With
Else
Me.ListBox1.List = Range("Tabelle1[Name]:Tabelle1[Firma]").Value
End If
End Sub
Gruß Gerd
Anzeige
AW: Bei jedem Click in ListBox Code ablaufen lassen
20.09.2017 14:49:06
Willi
Hallo Gerd,
vielen Dank für den Code. Das hat funktioniert.
Hat jemand vielleicht noch auf die zweite Frage eine Antwort? Kann man auslesen, aus welcher Zelle der Tabelle der Eintrag in der ListBox stammt?
Gruß,
Willi
AW: Bei jedem Click in ListBox Code ablaufen lassen
20.09.2017 15:14:45
Gerd
Kann man auslesen, aus welcher Zelle der Tabelle der Eintrag in der ListBox stammt?
Hallo Willi,
ja.
Wenn du die Zeilenummer in eine zusätzliche Spalte der Tabellenliste schreibst;
wenn der Wert in der Tabellenliste einmalig ist, durch Application.Match oder Find-Methode;
durch Aufnahme der Zeilennummer in eine zusätzliche Listbox-Spalte.
Gruß Gerd
Anzeige
AW: Bei jedem Click in ListBox Code ablaufen lassen
20.09.2017 16:00:49
Willi
Hallo Gerd,
die zweite Frage ist jetzt eigentlich überflüssig.
Mir ist eingefallen, dass man ja die Werte weiterer Spalten in der Listbox auslesen und in Zellen schreiben kann mit
Me.ListBox1.List(Me.ListBox1.ListIndex, 1) usw.
Vielen Dank für deine Hilfe!
Gruß,
Willi

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige