Nascondere campi in una maschera Access significa rendere invisibili alcuni controlli dell’interfaccia senza necessariamente rimuovere i campi dalla tabella o dalla query che alimenta la maschera. In Microsoft Access il metodo principale consiste nell’impostare la proprietà Visibile (Visible) del controllo su No. Puoi farlo in fase di progettazione oppure modificare la proprietà con VBA quando il form è aperto, per mostrare o nascondere elementi in base al ruolo dell’utente, allo stato del record o a una scelta effettuata nella maschera.
Questa tecnica è molto utile quando una stessa maschera deve adattarsi a situazioni differenti. Puoi nascondere campi tecnici come ID interni, sezioni amministrative, dati non pertinenti per un certo profilo o controlli che devono apparire soltanto quando una condizione è vera. È però importante non confondere la visibilità con la sicurezza: un campo nascosto nel form esiste ancora nell’origine dati e può essere accessibile da altri oggetti o strumenti del database.
Indice
- Cosa significa nascondere un campo in una maschera
- Campo, controllo ed etichetta: differenze
- Procedura con la proprietà Visible
- Come nascondere più controlli
- Nascondere in base al valore di un campo
- Nascondere in base al ruolo
- Uso di VBA negli eventi Current e Load
- Maschere continue e controlli condizionali
- Layout e spazi vuoti
- Microsoft 365, Access 2024 e Runtime
- Problemi comuni e FAQ
Campo e controllo non sono la stessa cosa
Quando lavori con una maschera Access devi distinguere tra il campo dell’origine dati e il controllo visualizzato. Il campo può essere, per esempio, IDCliente nella tabella Clienti. Nella maschera puoi avere una casella di testo chiamata txtIDCliente associata a quel campo. Se imposti la proprietà Visible del controllo su No, nascondi la casella di testo ma non elimini il campo dalla tabella e non lo rimuovi necessariamente dalla query Origine record.
Questa distinzione è fondamentale. Nascondere un controllo è un’operazione di interfaccia. Se vuoi ridurre i dati caricati dalla maschera per motivi di prestazioni o progettazione, devi intervenire anche sull’origine record. Se invece il campo deve restare disponibile per codice, filtri o relazioni ma non deve essere mostrato all’utente, tenerlo nell’origine e rendere invisibile il controllo può essere una scelta corretta.
Per comprendere meglio le origini record puoi consultare come creare una query in Microsoft Access e come creare una query tra più tabelle.
Procedura base per nascondere un controllo
- Apri la maschera in Visualizzazione Struttura.
- Seleziona il controllo che vuoi nascondere.
- Premi F4 per aprire la finestra delle proprietà.
- Apri la scheda Formato.
- Individua la proprietà Visibile.
- Impostala su No.
- Salva la maschera.
- Aprila in Visualizzazione Maschera per verificare il risultato.
Se il controllo possiede un’etichetta associata e vuoi nascondere anche quella, verifica se l’etichetta segue il comportamento desiderato. In alcuni layout potresti dover intervenire separatamente sull’etichetta. È importante testare il form in visualizzazione normale perché la struttura può continuare a mostrare elementi invisibili per consentire la progettazione.
Quando conviene nascondere un campo
Gli scenari più comuni sono i campi tecnici, i valori riservati a un ruolo, le sezioni che hanno senso soltanto in certe condizioni e i controlli temporanei. Un ID numerico interno, per esempio, può essere indispensabile per le relazioni ma inutile all’operatore. Nasconderlo riduce il rumore visivo.
Un altro caso è una maschera ordini che mostra i campi di approvazione soltanto quando l’ordine supera una soglia economica. Oppure una scheda cliente può mostrare il campo Partita IVA soltanto quando il tipo cliente è Azienda. In questi casi la visibilità dinamica migliora l’usabilità perché l’utente vede soltanto ciò che è pertinente.
Nascondere un controllo con VBA
La proprietà Visible può essere modificata a runtime. Per esempio:
Private Sub Form_Load()
Me.txtNoteInterne.Visible = False
End Sub
Per mostrarlo:
Me.txtNoteInterne.Visible = True
Questa semplicità permette di creare interfacce adattive. La logica deve però essere centralizzata e prevedibile: se la visibilità cambia in molti eventi diversi, può diventare difficile capire perché un controllo appare o scompare.
Nascondere in base al valore di un campo
Supponiamo di avere una casella combinata cboTipoCliente e un controllo txtPartitaIVA. Vogliamo mostrare la Partita IVA solo per le aziende:
Private Sub AggiornaVisibilita()
Dim azienda As Boolean
azienda = (Nz(Me.cboTipoCliente, "") = "Azienda")
Me.txtPartitaIVA.Visible = azienda
Me.lblPartitaIVA.Visible = azienda
End Sub
Richiama la procedura nell’evento Current della maschera e nell’evento AfterUpdate della casella combinata:
Private Sub Form_Current()
AggiornaVisibilita
End Sub
Private Sub cboTipoCliente_AfterUpdate()
AggiornaVisibilita
End Sub
In questo modo la maschera resta coerente sia quando l’utente cambia record sia quando cambia il tipo cliente.
Nascondere controlli in base al ruolo
Puoi usare la stessa tecnica per profili utente. Per esempio un campo Margine potrebbe essere visibile soltanto ai responsabili:
Private Sub Form_Load()
Dim isManager As Boolean
isManager = UtenteCorrenteIsManager()
Me.txtMargine.Visible = isManager
Me.lblMargine.Visible = isManager
End Sub
La funzione di identificazione del ruolo deve essere implementata in modo affidabile. Se i dati sono realmente riservati, non affidarti soltanto a Visible = False. Un utente con accesso al database potrebbe utilizzare una query, una tabella o un’altra maschera. I permessi veri devono essere applicati anche sull’origine dati.
Nascondere non equivale a proteggere
Questa è una delle regole più importanti. Visible = No riduce ciò che l’utente vede nell’interfaccia, ma non cifra il dato e non impedisce ad altri oggetti di leggerlo. Se usi SQL Server, configura autorizzazioni sul server. Se usi un back-end Access in una cartella condivisa, gestisci correttamente i permessi Windows e l’accesso al file.
Lo stesso principio vale per il riquadro di spostamento. Nascondere tabelle e query può semplificare l’interfaccia, ma non deve essere presentato come una misura di sicurezza assoluta.
Visible, Enabled e Locked
Le tre proprietà svolgono ruoli diversi. Visible decide se il controllo è mostrato. Enabled decide se può essere utilizzato. Locked impedisce la modifica del valore attraverso il controllo mantenendolo visibile e normalmente disponibile per la consultazione.
Se l’utente deve vedere un dato ma non cambiarlo, usa in genere Locked. Se non deve vederlo affatto nell’interfaccia, usa Visible. Se deve vederlo ma non poterci interagire, valuta Enabled. Non usare Visible = False come sostituto di Locked quando il dato deve essere consultato.
Microsoft documenta la proprietà Locked in Locked Property e la proprietà Enabled in Enabled Property.
Campi calcolati
Un controllo calcolato può essere nascosto come qualsiasi altro controllo. Per esempio un totale interno usato da una formula può rimanere invisibile mentre il risultato finale viene mostrato in un altro controllo. Tuttavia evita di creare dipendenze inutilmente oscure. Se il valore è importante per il calcolo, documenta il ruolo del controllo e considera se sia più chiaro spostare l’espressione in una query.
Controlli non associati
Visible è molto utile anche per pulsanti, etichette e controlli non associati. Puoi mostrare un pulsante Approva soltanto quando il record è nello stato Da approvare, oppure un messaggio di avviso soltanto quando manca un dato obbligatorio.
Me.lblAvviso.Visible = IsNull(Me.DataScadenza)
Questa tecnica crea feedback immediato senza modificare i dati.
Maschere continue
Nelle maschere continue la stessa istanza visuale del controllo viene ripetuta per più record. Una modifica alla proprietà Visible del controllo riguarda il controllo della maschera e quindi può avere effetti su tutte le righe, non una singola riga indipendente. Se vuoi differenziare visivamente righe diverse, valuta la formattazione condizionale o altri approcci adatti alla visualizzazione continua.
È un errore comune aspettarsi che Me.txtCampo.Visible possa rendere il controllo invisibile soltanto per il record corrente lasciandolo visibile nelle altre righe di una maschera continua. Per esigenze per-record, la formattazione condizionale è spesso più appropriata.
Layout e spazi vuoti
Nascondere un controllo non sempre fa collassare automaticamente lo spazio del layout come avverrebbe in una pagina Web. Access usa un sistema di layout dei controlli e coordinate. Se nascondi una sezione importante potresti lasciare un’area vuota.
Per interfacce dinamiche molto complesse puoi modificare dimensioni e posizioni con VBA, ma aumenta la manutenzione. Spesso è più semplice progettare sezioni compatte, utilizzare pagine di un controllo scheda o aprire maschere diverse in base al flusso.
Nascondere sezioni intere
In alcuni casi non vuoi nascondere singoli campi ma un gruppo. Puoi racchiudere i controlli in una pagina del controllo scheda e gestire la visibilità della pagina, oppure applicare la stessa logica a tutti i controlli del gruppo. Un pattern utile consiste nell’usare la proprietà Tag.
Imposta Tag = SoloAdmin sui controlli interessati e poi:
Private Sub ApplicaProfilo()
Dim ctl As Control
Dim mostra As Boolean
mostra = UtenteCorrenteIsManager()
For Each ctl In Me.Controls
If ctl.Tag = "SoloAdmin" Then ctl.Visible = mostra
Next ctl
End Sub
Testa il codice con tutti i tipi di controllo presenti. La proprietà Visible è diffusa ma la logica di layout può richiedere aggiustamenti.
Nascondere un pulsante dopo un’azione
Puoi rendere invisibile un pulsante dopo che l’operazione è stata completata. Per esempio, dopo l’approvazione:
Private Sub cmdApprova_Click()
Me.Stato = "Approvato"
If Me.Dirty Then Me.Dirty = False
Me.cmdApprova.Visible = False
End Sub
È preferibile che la visibilità venga ricalcolata anche in Form_Current, così il pulsante resta coerente quando l’utente torna sul record.
Nascondere un campo in Visualizzazione Struttura
Se imposti Visible = No, il controllo rimane comunque individuabile durante la progettazione. Questo è necessario per poterlo selezionare e modificare. Non confondere quindi ciò che vedi in Struttura con il risultato in Visualizzazione Maschera.
Rimuovere il controllo oppure nasconderlo?
Se un campo non viene mai mostrato, non viene usato da codice e non serve all’interfaccia, valuta di rimuovere completamente il controllo dalla maschera. Mantenere centinaia di controlli invisibili complica la manutenzione e può rendere meno chiaro il progetto.
Se invece il controllo è necessario in alcune condizioni o serve come origine di un’espressione, mantenerlo nascosto può essere appropriato. La decisione deve essere intenzionale.
Prestazioni
Nascondere un controllo non significa necessariamente evitare il caricamento del relativo dato. Se il campo rimane nell’origine record, la query può comunque recuperarlo. Per grandi dataset o origini remote, ottimizza anche la query e seleziona soltanto i campi necessari.
Per il filtraggio dell’origine puoi approfondire come filtrare dati con una query in Access.
Access per Microsoft 365 e Access 2024
La logica della proprietà Visible e delle maschere desktop è la stessa nelle versioni correnti Access per Microsoft 365 e Access 2024. Microsoft 365 può ricevere aggiornamenti dell’interfaccia più frequenti, quindi la posizione di alcuni comandi può variare leggermente, ma la finestra delle proprietà e il modello VBA restano strumenti fondamentali.
Access Runtime
In Runtime l’utente dovrebbe vedere soltanto l’interfaccia necessaria. Per questo la visibilità condizionale può essere molto utile. Testa però la maschera nella configurazione Runtime reale e assicurati che nessuna funzione indispensabile resti nascosta per errore.
Runtime non crea una versione web o Mac di Access. Il front-end Access continua a essere un’applicazione desktop Windows.
32 bit e 64 bit
La proprietà Visible non cambia tra Access 32 e 64 bit. Le differenze emergono solo se il codice associato alla maschera usa API Windows, componenti ActiveX o librerie esterne. In quel caso verifica compatibilità e dichiarazioni PtrSafe quando richieste.
Visibilità e accessibilità
Non affidarti soltanto al colore o a elementi che appaiono e scompaiono senza spiegazione. Se una sezione è nascosta perché una condizione non è soddisfatta, può essere utile mostrare un testo breve che spieghi cosa deve fare l’utente. Un’interfaccia prevedibile riduce errori e richieste di assistenza.
Errori comuni e troubleshooting
Il controllo resta visibile
Controlla di aver modificato la proprietà del controllo corretto. In presenza di controlli con nomi simili, verifica la proprietà Nome. Se il codice imposta Visible = True nell’evento Current o Load, può sovrascrivere la configurazione di progetto.
Il controllo sparisce ma l’etichetta resta
L’etichetta può essere un controllo separato. Imposta Visible anche sull’etichetta o gestisci entrambi nella stessa procedura.
Il controllo scompare in tutte le righe della maschera continua
È il comportamento previsto della proprietà del controllo. Se devi distinguere record diversi, valuta formattazione condizionale o una maschera di dettaglio.
Il campo nascosto è ancora accessibile da query
È normale. Hai nascosto il controllo nella maschera, non il campo dall’intero database.
Dopo il cambio record la visibilità è sbagliata
Richiama la procedura di aggiornamento nell’evento Form_Current. Se la condizione dipende da un controllo modificabile, richiamala anche in AfterUpdate.
La maschera lascia grandi spazi vuoti
Visible non riorganizza automaticamente ogni layout. Ridisegna il form oppure gestisci posizioni e dimensioni con cautela.
Checklist
- Hai deciso se il campo deve essere nascosto o soltanto bloccato?
- Hai gestito anche l’etichetta?
- La procedura dinamica viene richiamata al cambio record?
- I campi riservati sono protetti anche a livello di origine dati?
- L’origine record recupera soltanto i dati necessari?
- Il layout resta leggibile quando un controllo è invisibile?
- La maschera continua funziona come previsto?
- Hai testato Access Runtime se previsto?
FAQ
Quale proprietà serve per nascondere un campo?
Usa la proprietà Visible del controllo e impostala su No, oppure in VBA assegna False.
Nascondere il campo lo elimina dalla tabella?
No. Nascondi soltanto il controllo della maschera.
Posso mostrare un campo solo agli amministratori?
Sì, impostando Visible dinamicamente in base al ruolo. Ma applica anche autorizzazioni reali sull’origine se il dato è sensibile.
Posso nascondere una casella combinata?
Sì. La proprietà Visible è disponibile sui normali controlli delle maschere.
Per impedire la modifica è meglio Visible o Locked?
Se il dato deve essere visibile ma non modificabile, usa Locked. Visible serve quando non vuoi mostrarlo.
Funziona in Runtime?
Sì. Verifica però che l’interfaccia Runtime mantenga accessibili tutte le funzioni necessarie.
Conclusione
Per nascondere campi in una maschera Access devi agire sul controllo visualizzato, impostando Visible = No in progettazione oppure modificando la proprietà con VBA. La visibilità dinamica permette di adattare l’interfaccia a stato, tipo di record e ruolo dell’utente, ma la logica va mantenuta semplice e centralizzata.
Ricorda che invisibile non significa protetto: se il dato è riservato, applica permessi anche sull’origine. Usa Locked per i valori che devono essere letti ma non modificati e riduci i controlli inutili quando non servono davvero. Per altri tutorial visita Guide Access.