Newsgroup: it.comp.appl.access
Titolo: Uscita da controllo

Su una form ho la necessità di eseguire la seguente routin per essere sicuri 
di inserire un valore nella textbox prima di spostare il cursore su una 
textbox successiva.
Vorrei non eseguire la routin alla pressione dei tasti Tab e Freccia Su per 
spostarmi di una textbox precedente.
Ho cercato diversi esempi ma non ci riesco.
Private Sub NumeroFattura_Exit(Cancel As Integer)
If IsNull(Me.NumeroFattura) Then
MsgBox "Inserisci Numero Fattura", vbOKOnly
Cancel = True
End If
End Sub
saluti max

 End Sub
Dichiara una variabile boolean all'interno della tua form e la imposti a 
True alla pressione del tasto Tab, che intercetti con l'evento KeyDown; la 
imposti a False sull'evento Exit.
--
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype: pbsoftsolution


Scusami ma non riesco a comprendere bene.........mi fai un esempio ?
Grazie


Hai mai scritto codice VBA?
===========================================
Option Explicit
Dim blnTabPremuto As Boolean
...
Public Sub Form_Load()
  ...
  blnTabPremuto = False
  ...
End Sub
Public Sub MyControl_KeyDown(...)
  ...
  If <il tasto che ho premuto č TAB> Then
    blnTabPremuto = True
  Else
    blnTabPremuto = False
  End If
  ...
End Sub
Public Sub MyControl_Exit(Cancel As Integer)
  ...
  If blnTabPremuto Then
    Cancel = True
    Exit Sub
  End If
  ...
End Sub
===========================================



Scusami credo che le routin dovrebbero essere Private Sub ?
Ho provato il tutto ma non succede niente......
Credo che pigiando il tasto tab non dovrebbe andare avanti e se pigiato il 
tasto tab e freccia dovrebbe tornare indietro.
Cosa sbaglio?

 Cosa sbaglio?
Anzi tutto, secondo me sbagli ad utilizzare l'evento Exit per controllare 
il valore di una textbox; ti consiglio di utilizzare il BeforeUpdate.
Per cecare di aiutarti meglio, mi sono ricreato la tua casistica.
Eccoti il codice, stavolta scritto con l'intellisense :-)
===================================
Option Compare Database
Option Explicit
Dim blnTABPremuto As Boolean
Private Sub Form_Load()
    blnTABPremuto = False
End Sub
Private Sub Testo1_BeforeUpdate(Cancel As Integer)
    If blnTABPremuto Then Exit Sub
    If Nz(Me!Testo1, "") = "" Then
      Cancel = True
      Exit Sub
    End If
End Sub
Private Sub Testo1_Exit(Cancel As Integer)
    blnTABPremuto = False
End Sub
Private Sub Testo1_KeyDown(KeyCode As Integer, Shift As Integer)
    If ((KeyCode = vbKeyTab) Or (KeyCode = vbKeyUp)) And (Shift = 1) Then
        blnTABPremuto = True
    End If
End Sub



Ho provato il tutto ma con un problema che non riesco a capire.....
Dopo il primo tentativo che va a buon fine i successivi non tengono conto 
del codice, sia che uso Private Sub Testo1_BeforeUpdate(Cancel As Integer)
che Private Sub Testo1_Exit(Cancel As Integer)

"Gabriele Bertolucci" <in...@REMOVEpbsoft.it> ha scritto nel messaggio 
news:875ea3551049d8...@news.virgilio.it...

Adesso funziona alla perfezione
Private Sub NumeroFattura_Exit(Cancel As Integer)
   If blnTabPremuto Then
    blnTabPremuto = False
   Exit Sub
    End If
    If Nz(Me!NumeroFattura, "") = "" Then
      MsgBox "Insrisci Numero Fattura", vbOKOnly
      Cancel = True
      Exit Sub
    End If
End Sub
Grazie per la pazienza 

 As Integer) che Private Sub Testo1_Exit(Cancel As Integer)
Come sarebbe a dire che il primo tentativo va a buon fine e gli altri no?
Ti faccio notare che il codice che ti ho scritto non ha alcun controllo sul 
fatto che una casella contenga già il valore NULL prima di una modifica. 
Se vuoi anche quel controllo devi modificare il codice che ho inviato.
