Come inserire checkbox in una maschera Access: tutorial pratico

Inserire checkbox in una maschera Access è il modo più naturale per rappresentare valori Sì/No come Attivo, Pagato, Approvato, Completato o Consenso. In Microsoft Access una casella di controllo può essere associata direttamente a un campo di tipo Sì/No oppure può essere non associata e usata come controllo dell’interfaccia per filtri, opzioni o logiche VBA. Quando trascini un campo Sì/No nell’area della maschera, Access crea normalmente una checkbox come controllo predefinito.

Le checkbox sono semplici, ma vanno progettate bene: devi distinguere il valore memorizzato dalla didascalia mostrata all’utente, capire come funzionano True e False in Access/VBA, gestire il valore Null quando il controllo lo consente, scegliere se usare una casella singola, un pulsante di opzione o un gruppo di opzioni e validare le combinazioni che hanno significato aziendale. In questa guida vediamo tutto il flusso per Access per Microsoft 365 e Access 2024, inclusi Runtime, filtri, query e maschere continue.

Indice

  • Quando usare una checkbox
  • Creare un campo Sì/No
  • Aggiungere una checkbox associata
  • Aggiungere una checkbox non associata
  • True, False e Null
  • Usare checkbox nei filtri
  • Usare checkbox con VBA
  • Validare combinazioni di opzioni
  • Maschere continue
  • Microsoft 365, Access 2024 e Runtime
  • Problemi comuni
  • FAQ e conclusione

Quando la checkbox è il controllo giusto

Una checkbox è ideale quando la domanda ha due stati chiari: sì/no, vero/falso, attivo/non attivo. Esempi tipici sono ClienteAttivo, Pagato, Newsletter, Approvato, Spedito o Archiviato.

Non usarla per rappresentare tre o più categorie. Se devi scegliere tra Nuovo, In lavorazione e Chiuso, una casella combinata è più corretta. Se devi scegliere una sola opzione tra un piccolo gruppo visibile, puoi usare un gruppo di opzioni.

Campo Sì/No nella tabella

La soluzione più pulita per un valore booleano persistente è creare nella tabella un campo di tipo Sì/No. La maschera si associa a quel campo e la checkbox visualizza lo stato. Questo mantiene il tipo dati coerente e rende query e filtri più semplici.

Se il dato è obbligatoriamente binario, definisci anche il valore predefinito coerente. Per esempio un nuovo cliente potrebbe avere Attivo = Sì; un ordine potrebbe avere Pagato = No fino alla registrazione del pagamento.

Come aggiungere una checkbox associata

Microsoft documenta la procedura per aggiungere un controllo checkbox a valori Sì/No nella pagina Add a check box control to show Yes/No values.

  1. Apri la maschera in Visualizzazione Layout o Struttura.
  2. Mostra l’Elenco campi, se necessario.
  3. Individua il campo Sì/No.
  4. Trascinalo nella maschera.
  5. Access crea normalmente la casella di controllo associata.
  6. Modifica l’etichetta per mostrare una descrizione comprensibile.
  7. Salva e prova in Visualizzazione Maschera.

La proprietà Origine controllo deve contenere il nome del campo, per esempio Attivo. Il nome del controllo, invece, può essere chkAttivo.

Perché rinominare il controllo

Usare prefissi come chk rende il VBA più leggibile. Se il campo si chiama Attivo e il controllo chkAttivo, è più facile capire se stai lavorando con l’oggetto grafico o con il campo. Non è obbligatorio, ma nei progetti grandi riduce gli errori.

Checkbox non associata

Puoi creare una casella che non salva direttamente un valore. In Visualizzazione Struttura scegli il controllo Check Box e posizionalo nel form senza impostare Origine controllo. È utile per opzioni temporanee come Includi archiviati in una maschera di ricerca.

Il valore esiste soltanto nella sessione del form, salvo che tu lo usi per aggiornare altri dati. Non presentare una checkbox non associata come se fosse un campo salvato senza spiegazione, perché l’utente potrebbe aspettarsi che la scelta persista.

True e False in VBA

In VBA puoi verificare direttamente il valore:

If Me.chkAttivo = True Then
MsgBox "Cliente attivo"
Else
MsgBox "Cliente non attivo"
End If

Una forma più compatta:

If Me.chkAttivo Then
MsgBox "Cliente attivo"
End If

Quando il controllo può essere Null, usa Nz:

If Nz(Me.chkAttivo, False) Then
MsgBox "Attivo"
End If

Valori Null e comportamento a tre stati

In alcuni scenari un controllo può rappresentare anche uno stato indeterminato. Prima di usare tre stati chiediti se il modello dati lo richiede davvero. Spesso un campo booleano dovrebbe essere sempre Sì o No, e lasciare Null crea ambiguità: significa non noto, non compilato o falso?

Se l’azienda distingue esplicitamente tra Sì, No e Non specificato, documenta il significato e gestisci le query di conseguenza. Altrimenti imposta un valore predefinito e vincoli coerenti.

Impostare un valore predefinito

Per una checkbox puoi definire Default Value nella tabella o nel controllo. Un nuovo record può partire deselezionato oppure selezionato. Se la regola vale per tutti i punti di inserimento, preferisci il livello tabella.

Didascalia chiara

L’etichetta deve essere formulata come stato o scelta comprensibile. Attivo è meglio di Flag1. Consenso marketing è meglio di Check. La qualità dell’interfaccia dipende molto dai testi, non soltanto dai controlli.

Checkbox e query

Un campo Sì/No può essere usato nei criteri di query. In visualizzazione struttura puoi filtrare sui valori booleani secondo la sintassi prevista. In VBA e SQL Access puoi usare True/False o le rappresentazioni appropriate del motore.

Per capire come impostare criteri puoi consultare come usare i criteri nelle query Access e come filtrare dati con una query.

Usare una checkbox per filtrare una maschera

Supponiamo che chkSoloAttivi sia non associata. Nell’evento AfterUpdate:

Private Sub chkSoloAttivi_AfterUpdate()
If Nz(Me.chkSoloAttivi, False) Then
Me.Filter = "Attivo=True"
Me.FilterOn = True
Else
Me.FilterOn = False
End If
End Sub

La casella non modifica i clienti; decide soltanto cosa mostrare. È importante distinguere visivamente i controlli filtro dai controlli associati ai dati.

Usare più checkbox come filtri

Puoi avere chkAttivi, chkScaduti e chkConOrdini, ma la logica diventa rapidamente complessa. Centralizza la costruzione del filtro in una procedura invece di duplicare codice in ogni evento.

Private Sub ApplicaFiltri()
Dim s As String
If Nz(Me.chkSoloAttivi, False) Then s = "Attivo=True"
If Nz(Me.chkSoloScaduti, False) Then
If Len(s)>0 Then s=s & " AND "
s=s & "DataScadenza<Date()"
End If
Me.Filter=s
Me.FilterOn=(Len(s)>0)
End Sub

Richiama ApplicaFiltri da AfterUpdate di ciascuna checkbox.

Checkbox e pulsanti di opzione

Una checkbox è indipendente dalle altre. Se vuoi permettere più selezioni contemporanee, va bene. Se invece l’utente deve scegliere una sola alternativa tra tre, usa un gruppo di opzioni o una casella combinata.

Per esempio, Email, Telefono e WhatsApp come canale preferito non dovrebbero essere tre checkbox se può esserci un solo valore. Se più canali sono consentiti contemporaneamente, allora tre booleani possono avere senso, anche se in modelli più evoluti potresti normalizzare la relazione.

Validare almeno una scelta

Se il requisito dice che almeno una delle tre checkbox di contatto deve essere selezionata, controlla BeforeUpdate:

Private Sub Form_BeforeUpdate(Cancel As Integer)
If Not Nz(Me.chkEmail,False) And Not Nz(Me.chkTelefono,False) And Not Nz(Me.chkWhatsApp,False) Then
MsgBox "Seleziona almeno un canale di contatto.", vbExclamation
Cancel=True
End If
End Sub

Se invece il requisito ammette una sola scelta, usa un controllo che rappresenta naturalmente una selezione singola.

Bloccare la checkbox

Se il valore deve essere visibile ma non modificabile, imposta Locked = Sì. Microsoft documenta la proprietà Locked anche per le checkbox. Se la disabiliti con Enabled = No, l’aspetto e l’interazione cambiano.

La guida ufficiale è Locked Property.

Nascondere la checkbox

Se non deve essere visibile per certi utenti puoi usare Visible = False. Ricorda che nascondere non equivale a proteggere il dato. Se un campo è riservato, gestisci anche autorizzazioni sull’origine.

Checkbox in maschere continue

Le checkbox funzionano bene in maschere continue per mostrare rapidamente stato Sì/No di più record. L’utente può vedere quali righe sono completate o attive. Se il form è editabile, la modifica diretta di molte checkbox può essere molto veloce ma aumenta il rischio di clic accidentali.

Valuta se bloccare la modifica e offrire un pulsante esplicito per cambiare stato, soprattutto quando il flag ha conseguenze importanti.

Checkbox e formattazione condizionale

Puoi usare il valore Sì/No in un’espressione di formattazione condizionale su altri controlli. Per esempio, se Pagato = No puoi evidenziare il Totale. Questo rende più visibile lo stato senza dipendere soltanto dalla piccola casella.

VBA dopo la modifica

L’evento AfterUpdate della checkbox è utile per attivare o disattivare altri controlli:

Private Sub chkConsegna_AfterUpdate()
Me.DataConsegna.Enabled = Nz(Me.chkConsegna,False)
If Not Nz(Me.chkConsegna,False) Then Me.DataConsegna = Null
End Sub

Prima di cancellare automaticamente un valore, assicurati che la regola sia desiderata e valuta una conferma se il dato potrebbe essere importante.

Checkbox e campi calcolati

Non memorizzare un flag che può essere sempre derivato facilmente senza considerare i rischi di incoerenza. Per esempio Scaduto può essere calcolato confrontando DataScadenza con Date(), invece di essere salvato e aggiornato ogni giorno. Altri stati, come Approvato, rappresentano invece un evento aziendale reale e devono essere memorizzati.

Audit del cambio stato

Per flag importanti può essere utile registrare chi e quando ha effettuato il cambiamento. Una semplice checkbox Approvato non dice chi l’ha selezionata. Puoi aggiungere DataApprovazione e UtenteApprovazione e valorizzarli nell’evento AfterUpdate o, meglio, in una procedura controllata.

If Nz(Me.chkApprovato,False) Then
Me.DataApprovazione = Now()
Me.UtenteApprovazione = Environ$("Username")
End If

Per requisiti di audit forti, non affidarti soltanto a controlli del front-end; valuta una soluzione server con permessi e tracciamento adeguati.

Microsoft 365 e Access 2024

Microsoft include Access per Microsoft 365 e Access 2024 nella documentazione delle proprietà e dei controlli Sì/No. La creazione di checkbox associate rimane una funzione standard delle maschere desktop.

Access Runtime

Le checkbox funzionano normalmente nelle maschere eseguite in Runtime. Progetta l’interfaccia affinché l’utente possa capire chiaramente quali caselle salvano dati e quali sono filtri temporanei. Testa il front-end Runtime, soprattutto se gli eventi AfterUpdate eseguono VBA.

Windows e 32/64 bit

Il controllo checkbox standard non richiede differenze tra 32 e 64 bit. I problemi di architettura riguardano componenti esterni o API, non i normali valori booleani e le proprietà del form.

Accessibilità

Una checkbox deve avere un’etichetta vicina e comprensibile. Non usare soltanto colore o posizione per comunicare il significato. Assicurati che l’ordine di tabulazione consenta di raggiungerla facilmente da tastiera quando deve essere modificabile.

Prestazioni

I campi Sì/No sono semplici e le checkbox hanno un impatto minimo. I rallentamenti arrivano più spesso dal codice eseguito dopo ogni clic. Se AfterUpdate lancia query pesanti o ricarica intere maschere, valuta una progettazione più efficiente.

Errori comuni e troubleshooting

La checkbox non salva il valore

Controlla Origine controllo. Se è vuota, la checkbox è non associata. Se punta a un campo, verifica che la query Origine record sia aggiornabile.

La checkbox è grigia

Controlla Enabled, Locked e AllowEdits della maschera. La query potrebbe inoltre essere non aggiornabile.

Vedo valori Null

Controlla proprietà e dati esistenti. Decidi se il modello deve ammettere uno stato indeterminato. Se no, assegna un valore predefinito e correggi i record storici con cautela.

Il filtro mostra risultati sbagliati

Controlla la sintassi booleana e se il campo è veramente Sì/No. Non confrontare testo come ‘Sì’ con un campo booleano senza comprendere il tipo.

La casella si resetta cambiando record

Se è non associata il suo comportamento è indipendente dal record. Se dovrebbe essere salvata, collegala a un campo. Se è un filtro, il reset può essere voluto o gestito con codice.

La checkbox cambia ma altri controlli non si aggiornano

Inserisci la logica nell’evento AfterUpdate e, se deve essere coerente anche quando navighi tra record, richiamala da Form_Current.

Checklist

  • Il dato è veramente binario?
  • Il campo della tabella è Sì/No?
  • La checkbox associata ha Origine controllo corretta?
  • Le checkbox filtro sono chiaramente distinguibili?
  • Null ha un significato esplicito oppure è eliminato?
  • AfterUpdate non esegue operazioni inutilmente pesanti?
  • Le regole importanti sono validate?
  • Il valore può richiedere audit?
  • Runtime è stato testato?

FAQ

Quale tipo dati devo usare?

Per una scelta binaria persistente usa normalmente un campo Sì/No.

Come aggiungo la checkbox?

Trascina un campo Sì/No nella maschera oppure inserisci il controllo Check Box in Struttura.

Posso usare una checkbox solo come filtro?

Sì. Lasciala non associata e usa il valore per applicare Filter o costruire criteri.

Come verifico il valore in VBA?

Puoi usare If Me.chkAttivo Then. Se Null è possibile, usa Nz con un valore predefinito coerente.

Funziona in Access Runtime?

Sì. Verifica però codice e logica di navigazione nella versione Runtime distribuita.

Conclusione

Per inserire checkbox in una maschera Access usa campi Sì/No per stati realmente booleani e collega la casella al campo tramite Origine controllo. Usa checkbox non associate per filtri e opzioni temporanee, gestisci True/False e Null in modo esplicito e scegli altri controlli quando le alternative sono più di due.

Le checkbox funzionano al meglio quando la loro etichetta è chiara e la logica associata è semplice. Per altri tutorial visita Guide Access.

Lascia un commento