Come azzerare alcuni campi maschera in base a casellacontrollo

Anonimo
2023-03-29T08:25:23+00:00

Win 10

Access 2007

Buongiorno,

sto cercando di risolvere questo quesito:

in una maschera ho:

Testo1

CasellaControllo2

e la casellacontrollo3

vorrei che nel momento che seleziono la casellacontrollo3 questa azzera il testo1 e la casellacontrollo2

per farlo ho proceduto in questo modo:

Private Sub CasellaControllo3_BefoureUpdate(Cancel As Integer)

If MsgBox ("Sei sicuro? tutti i dati verranno eliminati!", vbQuestion + vbYesNo + vbDefoultButton2, "Azzeramento dati") = vbNo Then

me.Undo

End If

me.Testo1 = Null

me.CasellaControllo2 = Null

End Sub

tutto bello peccato che se dico di no mi azzera ugualmente i campi :(

dove sbaglio?

Ivan

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

6 risposte

Ordina per: Più utili
  1. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2023-03-29T16:02:27+00:00

    Me.undo serve per annullare tutti i controlli della maschera mentre il cancel si riferisce al controllo dell'evento

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2023-03-29T14:52:10+00:00

    perchè così dici:

    se la risposta è NO allora Cancel = True (annulla l'operazione)

    altrimenti (Else)

    procedi con l'azzeramento dei campi = Null

    però adesso mi devi spiegare perchè hai sostituito il mio Me.Undo con Cancel = True

    :)

    Ivan

    La risposta è stata utile?

    0 commenti Nessun commento
  3. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2023-03-29T14:21:27+00:00

    Ciao ora, al pc ,è tutto più semplice.

    tu sei nell'evento BefoureUpdate del pulsante3.

    Ei hai il seguente codice:

    If MsgBox ("Confermi il salvataggio?", vbQuestion + vbYesNo + vbDefoultButton2, "SchedaInformazioni") = vbNo Then

    me.Undo

    End If

    End Sub

    immagino che avendo una risposta vbNo vuoi innanzi tutto annullare la modifica del pulsante3 allora devi usare solo

    Cancel=True

    infatti la sub prevede: Private Sub CasellaControllo3_BefoureUpdate(Cancel As Integer)

    Inoltre, nel codice che hai postato all'inizio, tu hai

    Private Sub CasellaControllo3_BefoureUpdate(Cancel As Integer)

    If MsgBox ("Sei sicuro? tutti i dati verranno eliminati!", vbQuestion + vbYesNo + vbDefoultButton2, "Azzeramento dati") = vbNo Then

    me.Undo

    End If

    me.Testo1 = Null

    me.CasellaControllo2 = Null

    End Sub

    che dopo il me.Undo End If prosegue con le istruzioni che impostano i Null

    allora,

    o dopo la Me.Undo imposti una Exit sub per non proseguire

    o modifichi la If in questo modo

    If MsgBox ("Sei sicuro? tutti i dati verranno eliminati!", vbQuestion + vbYesNo + vbDefoultButton2, "Azzeramento dati") = vbNo Then

    me.Undo

    Else

    me.Testo1 = Null

    me.CasellaControllo2 = Null

    End If

    End Sub

    Riepilogando, prova con il seguente codice:

    Private Sub CasellaControllo3_BefoureUpdate(Cancel As Integer)

    If MsgBox ("Sei sicuro? tutti i dati verranno eliminati!", vbQuestion + vbYesNo + vbDefoultButton2, "Azzeramento dati") = vbNo Then

    Cancel = True
    

    Else

    me.Testo1 = Null
    
    me.CasellaControllo2 = Null
    

    End If

    End Sub

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2023-03-29T12:16:52+00:00

    grande Mimmo :)

    sapevo che arrivavi in mio soccorso ma ... l'arabo non l'ho mai capito :))))

    Me.Undo l'ho usato per evitare una manipolazione dei dati errata, come richiesta se si volevano apportare i cambiamenti prima di chiudere la maschera e pensavo che andava bene anche qui per non procedere con la cancellazione dei dati su NO.

    andiamo per gradi:

    1. esecuzione comando su "BefoureUpdate" immagino sia corretta;

    If MsgBox ("Confermi il salvataggio?", vbQuestion + vbYesNo + vbDefoultButton2, "SchedaInformazioni") = vbNo Then

    me.Undo

    End If

    End Sub

    questa era la stringa che uso per confermare o meno la modifica apportata alla maschera.

    allora ho pensato che riadattandola potesse andare bene anche per azzerare alcuni campi maschera:

    Private Sub CasellaControllo3_BefoureUpdate(Cancel As Integer)

    If MsgBox ("Sei sicuro? tutti i dati verranno eliminati!", vbQuestion + vbYesNo + vbDefoultButton2, "Azzeramento dati") = vbNo Then

    me.Undo

    End If

    End Sub

    così cosa fa? apporta le modifiche oppure no.

    come faccio allora a dirgli:

    NO non azzerare i campi?

    = vbNo Then

    Me.Undo

    dovrebbe essere corretto.

    ma se invece è SI come fare a fargli azzerare i campi?

    Ivan

    La risposta è stata utile?

    0 commenti Nessun commento
  5. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2023-03-29T11:13:52+00:00

    Ciao,

    Il problema è il comando Me.Undo

    Ed inoltre devi impostare una Exit sub altrimenti cmq ripulisce i campi.

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento