2012-08-16 4 views
5

In Access habe ich ein Formular, in dem drei Textfelder sind. Ich versuche, eine Textbox tbxCombinedName mit einer Kombination aus beidem genannt zu aktualisieren:Update Textfeld während der Eingabe

  • Textbox tbxLastName (Person Nachname)
  • Textbox tbxFirstName (Person Vorname)

Meine Frage ist: welche Textbox-Eigenschaft verwende ich, so dass, während ich Text in tbxLastName eingeben, das CombinedName Textfeld ist aktualisiert sofort und danach in der Tabelle gespeichert Kontakte.

Auf Microsoft's website habe ich festgestellt, dass die Schritt-Prozesse, wenn sie in ein Textfeld eingeben, sind wie folgt:

KeyDown- → KeyPress → Before → Ändern → KeyUp

Ich habe versucht, die OnChange mit und OnKeyDown-Eigenschaften, aber ohne Erfolg. Welche Eigenschaft in Kombination mit welchem ​​Code ermöglicht die Aktion "Aktualisiere als Sie"?

ist, was ich früher geschrieben, was nicht funktioniert hat: für alle Ihre Hilfe im Voraus

Private Sub tbxLName_change() 

Dim lastName As String 
Dim nameCode As String 

lastName = tbxLName.Value 
Debug.Print lastName 
nameCode = tbxNameCode.Value 
nameCode = lastName 
Debug.Print nameCode 

End Sub 

Dank.

Antwort

6

Dies ist einer der wenigen Fälle, in denen Sie auf die Eigenschaft .text verweisen sollten.

Im Fall ändern:

lastName = tbxLName.Text 

Die .text Eigenschaft ist nur verfügbar, wenn ein Steuerelement den Fokus hat und es bezieht sich auf die sichtbaren Inhalte der Steuerung.

Dies ist jedoch eine Datenbank und die allgemeine Regel lautet, dass Sie berechnete Felder nicht speichern. Der vollständige Name kann leicht aus einer Abfrage abgerufen werden.

+0

Eine einfache Antwort, funktioniert aber perfekt. Danke –

+1

+1 Guter Rat zum Erhalten der gewünschten Informationen von einer Frage –

+0

Kann die Abfrage den ersten und letzten Namen in diesem Format verarbeiten: 'LLLLLL_F'? (LLLLLL ist die erste 6 Buchstaben des Nachnamens. F ist der erste Buchstabe des Vornamens) –

1

Nur ein paar Anmerkungen:

Sie wollen mit KeyPress gehen, weil es die Möglichkeit, den Schlüssel der Benutzer gedrückt zu ändern bietet oder zu negieren.

unten Im Beispiel sind nur Buchstaben erlaubt und Kleinbuchstaben obere verrohrt sind:

Private Sub tbxLName_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
     Const ASCII_LOWER_RANGE = 65 
     Const ASCII_UPPER_RANGE = 122 
     Const ASCII_LOWER_A = 97 
     Const ASCII_LOWER_Z = 122 
     Const UPPER_MODIFIER = -32 
     Const ASCII_CANCEL_CODE = 0 

     Select Case KeyAscii 
      Case ASCII_LOWER_RANGE To ASCII_UPPER_RANGE 
       If KeyAscii >= ASCII_LOWER_A And KeyAscii <= ASCII_LOWER_Z Then 
        KeyAscii = KeyAscii + UPPER_MODIFIER 
       End If 
      Case Else 
       KeyAscii = ASCII_CANCEL_CODE 'Cancel Key Press 
     End Select 
End Sub 
+0

ray023 Dies sind nicht die gleichen' lastName = tbxLName.Text'. Die Standardeigenschaft ist '.value' und ist in MS Access nicht identisch mit' .text'. Die Eigenschaft '.text' ist ** nur ** verfügbar, wenn ein Steuerelement den Fokus hat. – Fionnuala

+0

@ Remou Einer dieser kleinen Unterschiede VB6/VBA? Ich werde nur diesen Teil entfernen. Danke für die Information. – ray