2012-08-16 17 views
5

In Access, ho un modulo in cui ci sono tre caselle di testo. Sto cercando di aggiornare una casella di testo chiamato tbxCombinedName con una combinazione di entrambi:Aggiornamento casella di testo durante la digitazione

  • testo tbxLastName (della persona Cognome)
  • testo tbxFirstName (della persona Nome)

La mia domanda è: quale proprietà textbox devo usare, così come sto scrivendo il testo in tbxLastName, la casella di testo CombinedName è aggiornato immediatamente e successivamente salvato nella tabella Contatti.

Su Microsoft's website, ho trovato che i processi di passo quando si digitano in una casella di testo sono le seguenti:

KeyDown → → KeyPress PrimaDiInserire → Modifica → TastoSu

Ho provato con l'OnChange e Proprietà OnKeyDown, ma senza risultati. Quale proprietà, combinata con quale codice, consentirà all'azione di aggiornamento-come-tu-type di funzionare?

Questo è quello che ho scritto in precedenza, che non ha funzionato:

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 

Grazie per tutto il vostro aiuto in anticipo.

risposta

6

Questo è uno dei pochi casi in cui è necessario fare riferimento alla proprietà .text.

In evento Change:

lastName = tbxLName.Text 

La struttura .text è disponibile solo quando un controllo è attivo e si riferisce al contenuto visibile del controllo.

Tuttavia, questo è un database e la regola generale è che non si memorizzano campi calcolati. Il nome completo può essere facilmente ottenuto da una query.

+0

Una risposta semplice, ma funziona perfettamente. Grazie –

+1

+1 Buon consiglio su come ottenere le informazioni desiderate da una query –

+0

La query può elaborare il nome e il cognome in questo formato: 'LLLLLL_F'? (LLLLLL è le prime 6 lettere del cognome F è la prima lettera del nome) –

1

Solo un paio di note:

Si consiglia di andare con KeyPress perché fornisce la possibilità di modificare o negare la chiave l'utente spinto.

Nell'esempio che segue, solo lettere permessi e minuscole sono superiore incamiciato:

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 Questi non sono gli stessi' lastName = tbxLName.Text'. La proprietà di default è '.value' e non è uguale a' .text' in MS Access. La proprietà '.text' è ** solo ** disponibile quando un controllo ha lo stato attivo. – Fionnuala

+0

@Remou Una di quelle sottili differenze VB6/VBA? Ho intenzione di rimuovere quella parte. Grazie per avermi fatto sapere. – ray