Newsgroup: it.comp.appl.access
Titolo: Come mostrare un "Messaggio Errore" ?

Help me!
Ho impostato alcuni campi come ad immissione obligatoria e vorrei che quando
si salti uno di questi campi, al momento di memorizzarli, mi esca un
messaggio (che non sia quello di defoult di Access, peraltro con termini
poco carini) che mi indica che tale casella è obbligatoria compilarla...
Ho pensato si risolvesse su Dati con -Valido se: <>""- e -Messaggio errore:
"La casella Tal dei Tali e obbligatoria"- Ma non funzia!!

Usa il codice VBA
msgbox "Messaggio",Tipo di Avviso, "Titolo della finestra"

 msgbox "Messaggio",Tipo di Avviso, "Titolo della finestra"
Hmm... va quasi bene! Solo che se imposto la casella come ad immissione
obligatoria ed  uso il tuo codice VBA, esce prima il "msgbox" da me
impostato e poi quello standard di Access.
Mentre se non uso la scelta ad immissione obbligatoria esce solo il "msgbox"
da me impostato, ma solo se passo quella casella senza immettere dati.
Capita spesso che ci si sposti con il mouse saltando la casella, ed ecco che
non avrei nessun avviso!!


Prova a sfruttare l'evento "BeforeUpdate" della maschera.
Ciao.


Ho provato, ma nula di fatto. Ho scritto:
Private Sub AccessoriRitirati_Exit(Cancel As Integer)
MsgBox "Messaggio", Tipo_di_Avviso, "Titolo della finestra"
End Sub
ed inserito la "Routine Evento" in ogni casella. Debbo essere proprio tosto,
visto che non riesco a capě dove e' che sbaglio... mah!

 
Hai usato l'evento "Exit" del controllo AccessoriRitirati.
Ti avevo suggerito di usare all'interno del codice relativo alla form (e 
non al controllo) l'evento "BeforeUpdate" che in italiano è "Prima di 
aggiornare".
Forse sono stato troppo "ermetico" per chi non è abbastanza esperto.
Per riparare provo ad essere più chiaro.
Ti allego un esempio che ho scritto recentemente.
All'interno di una maschera ho il controllo "NumeroScheda" che contiene 
un numero della scheda che è obbligatorio inserire e che non deve essere 
zero.
In visualizzazione struttura della maschera, nella finestra delle 
proprietà della maschera, all'interno della linguetta "Evento" c'è 
l'evento "Prima di aggiornare" o, se usi Access in inglese, "Before update".
In corrispondenza di questo evento ho scritto il seguente codice:
Private Sub Form_BeforeUpdate(Cancel As Integer)
     If IsNull(Me.NumeroScheda) Or Me.NumeroScheda = 0 Then
         MsgBox "Il numero scheda è obbligatorio e non può essere 0"
         ' Se l'operatore ha sbagliato cancello il contenuto.
         Me.NumeroScheda.Value = ""
         Exit Sub
     End If
End Sub
Questa routine viene eseguita prima di cambiare record o prima di uscire 
dalla maschera e più precisamente prima di aggiornare i valori dei campi 
della tabella associata con i valori nei controlli della maschera.
Se il campo interessato non è stato compilato come richiesto, il 
programma rimane nella maschera corrente e attende che venga inserito un 
valore corretto senza aggiornare la tabella.
Spero di aver spiegato meglio.
Ciao.

 ha scritto nel messaggio
|
| Hai usato l'evento "Exit" del controllo AccessoriRitirati.
| Ti avevo suggerito di usare all'interno del codice relativo alla form (e
| non al controllo) l'evento "BeforeUpdate" che in italiano è "Prima di
| aggiornare".
| Forse sono stato troppo "ermetico" per chi non è abbastanza esperto.
| Per riparare provo ad essere più chiaro.
| Ti allego un esempio che ho scritto recentemente.
| All'interno di una maschera ho il controllo "NumeroScheda" che contiene
| un numero della scheda che è obbligatorio inserire e che non deve essere
| zero.
| In visualizzazione struttura della maschera, nella finestra delle
| proprietà della maschera, all'interno della linguetta "Evento" c'è
| l'evento "Prima di aggiornare" o, se usi Access in inglese, "Before
update".
| In corrispondenza di questo evento ho scritto il seguente codice:
|
| Private Sub Form_BeforeUpdate(Cancel As Integer)
|
|      If IsNull(Me.NumeroScheda) Or Me.NumeroScheda = 0 Then
|          MsgBox "Il numero scheda è obbligatorio e non può essere 0"
|          ' Se l'operatore ha sbagliato cancello il contenuto.
|          Me.NumeroScheda.Value = ""
|          Exit Sub
|      End If
|
| End Sub
|
| Spero di aver spiegato meglio.
|
| Ciao.
|
Sei stato chiarissimo e ti ringrazio per il linguaggio elementare che hai
usato. Io ho provato a modificare il codice che mi hai dato in questo modo:
Private Sub AccessoriRitirati_BeforeUpdate(Cancel As Integer)
If IsNull(Me.AccessoriRitirati) Then
         MsgBox "Messaggio da personalizzare"
         ' note personali.
         Me.AccessoriRitirati.Value = ""
         Exit Sub
End Sub
Osservazioni: "AccessoriRitirati" è una casella di note, e dopo aver seguito
passo passo e fatto alcuni tentativi e prove non sono comunque riuscito ad
ottenere quanto voluto (ho provato anche ad inserire il codice in una
casella di testo normale per vedere se era colpa della casella NOTE, ma
nulla di fatto.)

 
Fammi sapere.
Ciao.

 | > |
| Evidentemente non sono stato abbastanza chiaro.
| l'istruzione corretta, nel tuo caso, dovrebbe essere:
| Private Sub Form_BeforeUpdate(Cancel As Integer)
| Per inserire questo codice, assicurati di aver visualizzato le proprietā
| della form (maschera in italiano) e NON le proprietā del controllo
| "AccessoriRitirati".
| A questo punto, quando fai click sui tre puntini corrispondenti
| all'evento "Prima di aggiornare" e scegli di scrivere il codice nella
| finestra successiva, ti si apre l'editor VBA con giā scritta la riga
| "Private Sub Form_BeforeUpdate(Cancel As Integer)".
| Il resto va bene.
| >
| > If IsNull(Me.AccessoriRitirati) Then
| >          MsgBox "Messaggio da personalizzare"
| >          ' note personali.
| >          Me.AccessoriRitirati.Value = ""
| >          Exit Sub
| > End Sub
| >
| Fammi sapere.
|
| Ciao.
|
Wow... Capito, e grazie... soprattutto per non avermi fatto pesare la mia
ignoranzia. Prometto che a settembre, come avro' tempo da dedicarmi,
iniziero' una lettura sul VBA!
Allora, ho corretto l'errore, vado nella Form (e non pių sulla casella di
controllo come io insistevo). Ma mi manca una istruzione di chiusura
corretta, poiche' mi da il seguente errore di compilazione VBA:
Errore di compilazione: Blocco If senza End If
Č stata utilizzata un'istruzione If senza la corrispondente istruzione End
If.
Il codice esatto da me scritto e' il seguente:
Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Me.AccessoriRitirati) Then
         MsgBox "Messaggio da personalizzare"
         ' note personali.
         Me.AccessoriRitirati.Value = ""
         Exit Sub
End Sub
In attesa che inizi la lettura di un buon libro di VBA, mi sai dire dove
sbaglio?

          Exit Sub
END IF


"antcim"
| > Allora, ho corretto l'errore, vado nella Form (e non più sulla casella
di
| > controllo come io insistevo). Ma mi manca una istruzione di chiusura
| > corretta, poiche' mi da il seguente errore di compilazione VBA:
| > Errore di compilazione: Blocco If senza End If
| > È stata utilizzata un'istruzione If senza la corrispondente istruzione
End
| > If.
| >
| > Il codice esatto da me scritto e' il seguente:
| >
| > Private Sub Form_BeforeUpdate(Cancel As Integer)
| > If IsNull(Me.AccessoriRitirati) Then
| >          MsgBox "Messaggio da personalizzare"
| >          ' note personali.
| >          Me.AccessoriRitirati.Value = ""
| >          Exit Sub
|
| END IF
|
| > End Sub
|
OK! Funzia... (in parte).
Dopo End If ho dovuto mettere anche End Sub, non so se e' esatto fare cosi',
ma in questo modo esce il messaggio, solo che dopo questo messaggio, dopo
aver confermato per la chiusura dell'avviso, questo mi lascia andare avanti,
anche se non inserisco nulla. In pratica non mi obbliga ma mi avvisa solo.

 |
Ciao
--
Alberto