Hallo, eine Listbox greift auf eine Namensliste in Tabelle1 zu. Per Pfeiltaste hoch/runter wird der jeweilige Eintrag der ListBox in den dazugehörigen Textboxen angezeigt. Gebe ich einen Buchstaben ein, wird der dazugehörige Name in der ListBox markiert. Die dazugehörigen Textfelder zeigen aber noch den alten Eintrag an.
Erst durch 1 x Pfeiltaste hoch/runter ist der Eintrag aktualisert. Wie kann ich dies ändern?
Wolfgang
Hallo Wolfgang,
leider bin ich erst gestern vom Urlaub zurückgekommen und muss nun an die 100 E-Mails abarbeiten. Aus diesem Grund kann ich die nächsten Tage nichts zu Problemlösung beitragen. Ich hoffe, du findest jemand, der dir helfen kann.
Gruß
Mario
Grüezi Wolfgang
Hallo, eine Listbox greift auf eine Namensliste in Tabelle1
zu. Per Pfeiltaste hoch/runter wird der jeweilige Eintrag der
ListBox in den dazugehörigen Textboxen angezeigt. Gebe ich
einen Buchstaben ein, wird der dazugehörige Name in der
ListBox markiert. Die dazugehörigen Textfelder zeigen aber
noch den alten Eintrag an.
Erst durch 1 x Pfeiltaste hoch/runter ist der Eintrag
aktualisert. Wie kann ich dies ändern?
Vermutlich gar nicht - der Vorschlag in der Listbox steht ja noch nicht als Auswahl in selbiger. Daher kannst Du auch nicht per VBA auf diesen Wert zugreifen um ihn sonstwo darzustelen.
Das klappt erst, wenn Du die Auswahl getroffen hast.
–
Mit freundlichen Grüssen
Thomas Ramel
- MVP für MS-Excel -
Danke für die schnelle Antwort, auch wenns kein Erfolg war.
Wolfgang
Hallo
Erst durch 1 x Pfeiltaste hoch/runter ist der Eintrag
aktualisert. Wie kann ich dies ändern?
Wolfgang
Bei mir wird bei jeden Aufrufen die Liste Aktualisiert!
Fred
Hallo Softoldi,
ich weiss nicht, mit welchen Events du arbeitest. Nach deiner Beschreibung funktioniert es bei mir mit ListBox1_Click().
Falls nich, versuche ListBox1_Change()
(KeyDown oder KeyPress sind auch nicht auszuschliessen)
MfG
W.W.
Hallo Wolfgang,
bevor ich weiterhelfen kann müßte ich noch wissen, ob es sich um eine Listbox/Textbox in einem Tabellenblatt handelt oder um eine Listbox/Textboxen in einem Userform.
Evtl. muss man die Aktualisierung der Textboxen mit mehreren Ereignismakros der Listbox ausführen, z.B Click- und Change-Ereignis.
Um besser helfen zu können, wäre ggf. eine Beispieldatei mit anonymisierten Daten hilfreich.
Gruß
Franz
Da habe ich keine Lösung auf die schnelle sorry!
Evtl. mal im Internet suchen da gibt es viele Lösungen!
Hallo Wolfgang,
ich kann dir dazu leider nicht weiterhelfen. Bin in dem Gebiet nicht so fit. Ich hoffe, dass dir jemand anders helfen konnte.
Viele Grüße
Philipp
Schlauberger, hast meine Anfrage nicht ganz verstanden!
Ich wähle in der ListBox einen beliebigen Anfangsbuchstaben in der Namen-Liste. Dadurch wird der ListIndex aber noch nicht verändert. Erst durch 1 x hoch/runter mit den Pfeiltasten sind die dazugehörigen Textfelder aktualisiert.
Wenn ich dies nicht mache, ist immer noch der alte ListBox.ListIndex aktiv, da das reignis „ListBox1_click()“ ja noch nicht statt gefunden hat!
Weist du jetzt was ich meine?
Noch ein Schlauberger, hast meine Anfrage nicht ganz verstanden!
Ich wähle in der ListBox einen beliebigen Anfangsbuchstaben in der Namen-Liste. Dadurch wird der ListIndex aber noch nicht verändert. Erst durch 1 x hoch/runter mit den Pfeiltasten sind die dazugehörigen Textfelder aktualisiert.
Wenn ich dies nicht mache, ist immer noch der alte ListBox.ListIndex aktiv, da das Ereignis „ListBox1_click()“ ja noch nicht statt gefunden hat
Hallo Franz,
es ist eine UserForm mit abhängigen Textfelder, welche bei Auswahl in der ListBox die dazugehörigen Werte anzeigen. Diese werden aus der Namen-Liste im Tabellenblatt „Tabelle1“ eingelesen.
Das Click- und Change-Ereignis kommt beim Drücken einer Buchstabentaste a-z nicht zum Einsatz. Der Listindex bleibt beim alten Wert(Namen) stehen.
Die ListBox zeigt aber schon den zu dem dazugehörigen gedrückten Buchstaben Namen an!!!
Erst wenn ich 1 x die hoch/runter-Pfeile betätige, tritt das Click- und Change-Ereignis in Kraft und die dazugehörigen Textfelder werden richtig aktualisiert.
Wolfgang
Hallo Wolfgang,
hast Du die Multiselect Eigenschaft der Listbox auf fmMultiSelectSingle gesetzt?
LG Gerd
Hab’s schon verstanden.
Frage:
Welche Version verwendest??
Ich öffne die Liste mit’n Mausklick aufn Pfeil nach unten!!!
Hallo Wolfgang,
ich hab jetzt mal unter Excel 2007 in einem Userform getestet. Das Change_Ereignis wird bei einer Listbox bei folgenden Aktionen ausgelöst:
- Mausklick
- Pfeiltasten
- Anfangsbuchstabe eintippen
- Wert- und Index-Änderungen per Makro.
- ggf. Wertänderungen im RowSource-Bereich der Listbox
Warum die Eingabe des Anfangsbuchstabens das Change-Ereignis bei dir nicht auslöst: ???
Nachfolgend ein Codebeispiel für ein Userform, in dem per Listbox ein Datensatz ausgewählt und die zugehörigen Daten aus einer Tabelle in andere Steuerelemente eingelesen werden. Nach Datenänderung können die Daten ggf. auch wieder in die Tabelle zurückgeschrieben werden oder Datensätze gelöscht/neu angelegt werden.
Dabei muss man darauf achten, dass es nicht zu sich endlos wiederholenden Aufrufen von Ereignisprozeduren kommt. In meinem Code verhindert das die Variable „bEintragen“. Deren Wert wird ggf. so gesetzt, dass die Change-Prozedur der Listbox sofort wieder verlassen wird.
Gruß
Franz
'Userform-Code erstellt unter Excel 2007
'Userform enthält folgende Steuerelemente, die im Code angesprochen werden:
' ListBox1 - ListBox mit Daten aus Spalte A
' tBox\_A - Textbox mit Daten aus Spalte A (Musseingabe)
' tBox\_B - Textbox mit Daten aus Spalte B
' tBox\_C - Textbox mit Daten aus Spalte C (Datum)
' CB\_Loeschen - Commandbutton
' CB\_Neu - Commandbutton
' CB\_Abbrechen - Commandbutton
' CB\_Eintragen - Commandbutton
Option Explicit
Private Zeile As Long 'Merker für die Tabellenzeile des in der Listbox gewählten Eintrags
Private wks As Worksheet 'Objektvariable für Tabellenblatt mit den Daten
Private bEintragen As Boolean 'Merker, dass Listbox1\_Change-Prozedur sofort wieder verlassen \_
werden soll
Private Sub UpdateTextboxen()
'Aktualiseren der Textboxinhalte mit Tabellendaten, z.B nach Auswahl eines Listbox-Eintrags
Me.tBox\_A = wks.Cells(Zeile, 1).Text
Me.tBox\_B = wks.Cells(Zeile, 2).Text
Me.tBox\_C = wks.Cells(Zeile, 3).Text
End Sub
Private Function Werte\_in\_Tabelle() As Boolean
'Textbox-Inhalte in Tabellenblatt schreiben
Werte\_in\_Tabelle = True
If Zeile = 0 Then
MsgBox "Bitte Datenzeile in Listbox wählen oder mit ""Neu"" als neuen Datensatz anlegen!"
Werte\_in\_Tabelle = False
Else
With wks.Cells(Zeile, 1)
If Me.tBox\_A = "" Then
MsgBox "Für Textbox ""Spalte A"" muss ein Wert eingegeben werden!"
Werte\_in\_Tabelle = False
Exit Function
Else
.Value = Me.tBox\_A
End If
End With
With wks.Cells(Zeile, 2)
If Me.tBox\_B = "" Then .ClearContents Else .Value = Me.tBox\_B
End With
With wks.Cells(Zeile, 3)
If Me.tBox\_C = "" Then
.ClearContents
ElseIf IsDate(Me.tBox\_C) Then
.Value = CDate(Me.tBox\_C)
Else
MsgBox "Für Textbox ""tBox\_C"" wurde kein gültiges Datum eingegeben!"
Werte\_in\_Tabelle = False
Exit Function
End If
End With
Call Listbox1\_Update
End If
End Function
Private Sub Listbox1\_Update()
'Aktualisiert die Auswahlliste von Listbox 1 mit Daten aus Spalte A
With wks
Me.ListBox1.RowSource = "'" & .Name & "'!" \_
& .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Address
End With
End Sub
'Ereignisprozeduren der Commandbuttons
Private Sub CB\_Abbrechen\_Click()
'Button Abbrechen
Unload Me
End Sub
Private Sub CB\_Eintragen\_Click()
'Button Ändern
bEintragen = True
If Me.ListBox1.ListIndex -1 Then
If Werte\_in\_Tabelle = False Then GoTo Beenden
'Unload Me
Else
MsgBox "Es wurde noch kein Eintrag in der Listbox gewählt"
End If
Beenden:
bEintragen = False
End Sub
Private Sub CB\_Neu\_Click()
'Button Neu - Inhalte der Textboxen werden als neuer Datensatz an Ende angefügt
bEintragen = True
If Me.ListBox1.ListIndex -1 Then
With wks
Zeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
If Werte\_in\_Tabelle = False Then GoTo Beenden
Call Listbox1\_Update
Me.ListBox1.ListIndex = Me.ListBox1.ListCount - 1
End With
Else
MsgBox "Es wurde noch kein Eintrag in der Listbox gewählt"
End If
Beenden:
bEintragen = False
End Sub
Private Sub CB\_Loeschen\_Click()
'Button Löschen
bEintragen = True
If Me.ListBox1.ListIndex -1 Then
If MsgBox("Gewählten Eintrag wirklichlöschen?", \_
vbQuestion + vbYesNo + vbDefaultButton2, \_
"Datenzeile löschen") = vbYes Then
With wks
wks.Rows(Zeile).Delete
Listbox1\_Update
Zeile = 0
Me.ListBox1.ListIndex = -1
End With
End If
Else
MsgBox "Es wurde noch kein Eintrag in der Listbox gewählt"
End If
bEintragen = False
End Sub
'Ereignisprozeduren Listbox1
Private Sub ListBox1\_Change()
'Reagiert bei Auswahl per Buchstabenauswahl, Mausklick oder Pfeiltasten \_
oder Index-/Wertänderung per Makro
If bEintragen = True Then Exit Sub
Zeile = Me.ListBox1.ListIndex + 2
Call UpdateTextboxen
End Sub
'Ereignisprozeduren Textbox tBox\_C
Private Sub tBox\_C\_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Eingabe in Textbox prüfen und ggf. in vollständiges Datum umwandeln
With Me.tBox\_C
If .Text = "" Then
'Leer ist OK
ElseIf IsDate(.Text) Then
.Text = CDate(.Text)
Else
MsgBox "Für Textbox ""tBox\_C"" wurde kein gültiges Datum eingegeben!"
Cancel = True
End If
End With
End Sub
'Ereignisprozeduren des Userforms
Private Sub UserForm\_Initialize()
Set wks = Worksheets("Tabelle1")
Call Listbox1\_Update
End Sub
Hallo Gerd,
ja ich habe die Multiselect Eigenschaft der Listbox auf fmMultiSelectSingle gesetzt. Es ist kompliziert!
Ich habe versucht mit SendKeys „{UP}“ und auch ‚DOWN‘ im Modul:
- Sub Listbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) -
den Pfeilklick hoch/runter zu simulieren, was auch einwandfrei funktioniert, bis auf den Rücksprung zum 1.Eintrag in der ListBox, den bekommt Excel nicht mit.
Was ich benötige ist an sich ein „simulierter Mausklick“.
Hallo Manfred,
Version Excel 2003.
Das Change- Click-Ereignis wird bei mir auch durch Mausklick, oder Pfeil hoch- runter-Taste ausgelöst.
Du solltest den Text richtig lesen!
Ich betätige nur eine Buchstaben-Taste z.B. „e“ und in der ListBox springt die Markierung automatisch zum 1.Namen mit „e“ beginnend. Dabei wird aber kein „Change- Click-Ereignis“ ausgelöst!
Das ist das Problem !!!
Wolfgang
Hab’s schon verstanden.
Frage:
Welche Version verwendest??
Ich öffne die Liste mit’n Mausklick aufn Pfeil nach unten!!!
Hallo Softoldi,
vielen ank für das Vertrauen in meine VBA-Kenntnisse.
Aber hier bin ich noch am Anfang der Übungen und kann dzu leider keine sinnvollen Tipps geben.
Gruß Hugo
Hallo Franz,
danke für Deine ausführliches Skript. Da waren noch ein paar Unsicherheiten drin, aber das passt zu dem, was ich suchte.
Wolfgang
Hallo,
trotzdem Danke für eine Antwort.
Wolfgang