[vba] TextBox eingabe für Listenfeld mit Enter bestätigen
#1
Guten Tag,
ich habe gerade folgendes Problem.
Ich habe eine Textbox welche nach betätigen eines Buttons direkt in ein Listenfeld schreibt.
Nun möchte ich die Eingabe anstatt mit einem Button durch drücken der Enter-Taste bestätigen, was mir aber nicht so recht gelingen will.

Mein Code sieht wie folgt aus.

Code:
Option Explicit
Private Sub CommandButton1_Click()
With ListBox1
.ColumnWidths = "1cm;1cm;1cm"
.AddItem TextBox1                   'erste Spalte in Listbox
.List(.ListCount - 1, 1) = TextBox2 'zweite Spalte in Listbox
.List(.ListCount - 1, 2) = TextBox3 'dritte Spalte in Listbox
'---- usw. ----------
End With
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
End Sub
Jedes mal wenn ich versuche eine Eingabe über Enter via
Code:
If KeyCode = vbKeyReturn Then ...
End If
einzufügen, bekomme ich Fehlermeldungen oder es passiert einfach garnichts.
Die Änderung habe ich jetzt nicht direkt in den Code eingefügt da ich gefühlt schon jede Zeile einmal durchprobiert habe um den Befehl einzufügen.

Ich vermute es liegt an der Zeile

Code:
Private Sub CommandButton1_Click()
aber wenn ich versuche dort einen anderen Namen einzutragen bekomme ich auch ständig Fehlermeldungen.
Im Anhang befindet sich noch meine Exceldatei.

Viele Grüße
Tim0


Angehängte Dateien
.xlsm   Listbox.xlsm (Größe: 15,63 KB / Downloads: 6)
Top
#2
Hallo Tim,

verändere die Aktivierreihenfolge der Elemente in der Userform, das die Textbox3 nach der Textbox2 kommt und teste mal folgenden Code

Code:
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   '---- Eigenschaft der Listbox ColumnCount anpassen
   With ListBox1
      .ColumnWidths = "1cm;1cm;1cm" ' Breite fuer hier 3 Spalten entsprechend anpassen
      .AddItem TextBox1                   'erste Spalte in Listbox
      .List(.ListCount - 1, 1) = TextBox2 'zweite Spalte in Listbox
      .List(.ListCount - 1, 2) = TextBox3 'dritte Spalte in Listbox
      '---- usw. ----------
   End With
   TextBox1 = ""
   TextBox2 = ""
   TextBox3 = ""
End Sub
Gruß Stefan
Win 10 / Office 2016
Top
#3
Vielen Dank!
Funktioniert einwandfrei, hat mich schon ganz verrückt gemacht das Problem. :20:
Wenn möglich, würde ich mich noch über eine kleine Erklärung freuen, wieso das mit diesen Änderungen funktioniert.

Gruß
Timo
Top
#4
Hallo Timo,

ich habe anstelle des CommandButton_Click-Ereignis das Textbox_Exit-Ereignis verwendet, das ausgeführt wird, wenn Du die Textbox3 verläßt. Den Code selber habe ich unverändert übernommen.

Hattest Du den Versuch mit Enter im Click-Ereignis des Buttons stehen?
Gruß Stefan
Win 10 / Office 2016
Top
#5
Ok ich habe ein weiteres Problem, wenn ich das ganze auf eine Textbox herunter breche und auch den Sub-Wert auf TextBox 1 ändere reagiert er bereits wenn ich irgendwo hin klicke, er sollte wenn möglich aber ausschließlich auf die Taste "Enter" reagieren.
Mein Fehler, es war nicht was ich oben gefragt hatte, ich hatte bloß angenommen das es keinen Unterschied machen würde ob es eine oder mehrere Textboxen sind.

Hattest Du den Versuch mit Enter im Click-Ereignis des Buttons stehen?
Ja, hatte ich.

Mit deiner Erklärung ergibt es auch Sinn warum er bei einer Textbox nicht explizit auf Enter reagiert. :D
Gruß Timo
Top
#6
Hallo,

dann versuche es mal mit dem KeyDown-Ereignis und prüfe indem ob die Enter-Taste gedrückt wurde.
Gruß Stefan
Win 10 / Office 2016
Top
#7
(21.08.2015, 18:15)Steffl schrieb: Hallo,

dann versuche es mal mit dem KeyDown-Ereignis und prüfe indem ob die Enter-Taste gedrückt wurde.

Bekomme eine Fehlermeldung:
"Fehler beim Kompilieren
Die Deklaration der Prozedur entspricht nicht der Beschreibung eines Ereignisses oder einer Prozedur mit demselben Namen"

Code:
Private Sub TextBox1_KeyDown()
 If KeyCode = vbKeyReturn Then
     With ListBox1
       .ColumnWidths = "1cm;1cm;1cm"       ' Breite fuer hier 3 Spalten entsprechend anpassen
       .AddItem TextBox1                   'erste Spalte in Listbox
'.List(.ListCount - 1, 1) = TextBox2 'zweite Spalte in Listbox
'.List(.ListCount - 1, 2) = TextBox3 'dritte Spalte in Listbox
'---- usw. ----------
      End With
         TextBox1 = ""
'TextBox2 = ""
'TextBox3 = ""
End If
End Sub
Top
#8
Hallo,

das Ereignis hat Rückgabeparameter die Du mit angeben musst.

Code:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'MsgBox KeyCode
If KeyCode = vbKeyReturn Then
     With ListBox1
       .ColumnWidths = "1cm;1cm;1cm"       ' Breite fuer hier 3 Spalten entsprechend anpassen
       .AddItem TextBox1                   'erste Spalte in Listbox
'.List(.ListCount - 1, 1) = TextBox2 'zweite Spalte in Listbox
'.List(.ListCount - 1, 2) = TextBox3 'dritte Spalte in Listbox
'---- usw. ----------
      End With
         TextBox1 = ""
'TextBox2 = ""
'TextBox3 = ""
End If
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • Tim0
Top
#9
Danke, es funktioniert nun wie geplant.
Da fehlte mir wohl noch zu viel Grundlagenwissen, aber ich bin ja auch erst ein paar Tage dran. :)

Gruß Timo
Top
#10
Hallo Timo,

zur Erweiterung deines Grundlagenwissens: Dropdowns in Modulen
Gruß Stefan
Win 10 / Office 2016
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste