Come usare macro evento nelle maschere Access: tutorial pratico

Macro Access: le macro evento nelle maschere Access permettono di eseguire azioni automaticamente quando si verifica un evento, per esempio apertura della maschera, caricamento, cambio record, clic su un pulsante, aggiornamento di un controllo o salvataggio del record. Sono una soluzione efficace quando vuoi automatizzare il comportamento dell’interfaccia senza scrivere VBA complesso.

Che cosa sono le macro evento

Una macro evento è una macro collegata a una proprietà evento di una maschera o di un controllo. Nel Foglio proprietà trovi eventi come Su apertura, Su caricamento, Su corrente, Prima di aggiornare, Dopo aggiornamento, Su clic, Su doppio clic, Su chiusura e molti altri. Quando l’evento si verifica, Access esegue le azioni definite nella macro.

Le macro incorporate sono memorizzate nell’oggetto che le usa. Questo le rende comode per logiche locali: un pulsante che apre un report, una combo che aggiorna una sottomaschera, una maschera che applica un filtro all’apertura. Se invece la stessa logica deve essere riutilizzata in molti oggetti, può essere preferibile una macro autonoma o una funzione VBA.

Macro incorporate e macro autonome

Una macro incorporata appartiene a una proprietà evento. Se apri il Generatore dall’evento Su clic di cmdApriCliente, la sequenza di azioni resta legata a quel pulsante. È semplice da trovare e mantenere per chi lavora sulla maschera.

Una macro autonoma è un oggetto separato nel Riquadro di spostamento e può essere richiamata da più punti. È utile per processi condivisi, ma richiede convenzioni di nome chiare. Non duplicare la stessa macro incorporata in dieci pulsanti se l’azione è realmente comune.

Creare una macro evento passo passo

Apri la maschera in Visualizzazione Struttura, seleziona il controllo interessato e premi F4. Nella scheda Evento individua, per esempio, Su clic. Fai clic sul pulsante Genera e scegli Generatore di macro. Access apre l’editor delle macro.

Aggiungi un’azione, per esempio ApriMaschera, seleziona la maschera da aprire e configura gli argomenti. Salva la macro e la maschera. Passa in Visualizzazione Maschera e prova il controllo. Se l’azione dipende dal record corrente, testala su record diversi e sul nuovo record.

Evento Su apertura

L’evento Open avviene quando la maschera viene aperta e può essere usato per verificare condizioni iniziali o annullare l’apertura in determinate situazioni. Non sovraccaricarlo con operazioni lente. Se devi preparare l’interfaccia dopo che la maschera è disponibile, Load può essere un punto più adatto.

Una macro Su apertura può controllare un valore, mostrare un messaggio o applicare una logica preliminare. Se la maschera viene aperta da più percorsi, evita assunzioni non verificate sui dati della maschera chiamante.

Evento Su caricamento

Load viene usato spesso per inizializzare l’interfaccia: nascondere o mostrare controlli, impostare un filtro, assegnare valori a controlli non associati o eseguire operazioni che devono avvenire a ogni apertura.

Se la maschera contiene combo e sottomaschere, non eseguire Requery indiscriminati su tutto durante Load. Ogni Requery può generare accessi ai dati; in ambienti con back-end remoto questo può rallentare l’apertura.

Evento Su corrente

L’evento Current si verifica quando la maschera passa a un record diverso. È utile per aggiornare elementi dell’interfaccia in base al record corrente, per esempio abilitare un pulsante solo se Stato=’Aperto’ o aggiornare un riepilogo.

Current può verificarsi molte volte durante la navigazione. Evita quindi azioni pesanti, messaggi modali o esportazioni. Un MsgBox mostrato a ogni cambio record renderebbe la maschera praticamente inutilizzabile.

Prima di aggiornare e Dopo aggiornamento

BeforeUpdate è l’evento chiave per la validazione. Permette di annullare il salvataggio quando i dati non rispettano una regola. Una macro può mostrare un messaggio, annullare l’evento e spostare il focus, anche se per logiche molto articolate VBA può risultare più leggibile.

AfterUpdate avviene dopo che il valore o il record è stato aggiornato. È adatto per aggiornare controlli dipendenti, eseguire un Requery mirato o attivare un processo che ha senso solo dopo il salvataggio. Non usarlo per una regola che avrebbe dovuto impedire il salvataggio.

Evento Su clic

È l’evento più comune dei pulsanti. Può aprire maschere, report, query, eseguire filtri, andare a un record, chiudere oggetti o mostrare messaggi. Una macro Su clic è spesso sufficiente per i comandi dell’interfaccia.

Rendi i pulsanti espliciti. Un pulsante “Apri dettaglio” dovrebbe eseguire una sola azione principale. Se un singolo clic avvia esportazione, modifica dati, invia email e chiude la maschera, il flusso diventa difficile da capire e diagnosticare.

Aprire una maschera filtrata con una macro

L’azione ApriMaschera permette di specificare una Condizione WHERE. Puoi usare un riferimento al controllo corrente per aprire un dettaglio specifico. Questo è l’equivalente macro di molte chiamate DoCmd.OpenForm in VBA.

Prima di aprire verifica che la chiave non sia Null se il contesto lo richiede. Puoi usare una condizione If nel Generatore di macro per mostrare un messaggio quando manca il valore e aprire la maschera soltanto nel caso valido.

Applicare filtri

L’azione ApplyFilter può limitare i record di una maschera secondo filtri o criteri. Microsoft Support documenta l’azione e il comportamento dei filtri nelle versioni desktop correnti. È utile per maschere di ricerca e pannelli in cui l’utente seleziona criteri.

Mostra chiaramente quando un filtro è attivo. Un utente può credere che alcuni record siano spariti quando in realtà la vista è ancora filtrata. Inserisci un pulsante Mostra tutti o Rimuovi filtro se il processo lo richiede.

Requery, Refresh e Repaint

Questi comandi vengono spesso confusi. Requery riesegue l’origine dati di un controllo o di una maschera; Refresh aggiorna i record già presenti; Repaint ridisegna l’interfaccia. Una macro deve usare l’azione coerente con l’obiettivo.

Se una combo dipende da dati appena aggiunti, Requery della combo è appropriato. Se vuoi solo mostrare modifiche già salvate da altri utenti nei record correnti, Refresh può essere sufficiente. Evita Requery dell’intera maschera se basta aggiornare un singolo controllo.

Macro condizionali

Il Generatore di macro permette blocchi If. Puoi controllare se un campo è Null, se uno stato ha un valore specifico o se l’utente si trova su un nuovo record. Le condizioni rendono le macro molto più potenti di una semplice sequenza lineare.

Mantieni però la logica leggibile. Se una macro contiene molti livelli annidati di If, decine di azioni e gestione di numerosi casi, il passaggio a VBA può migliorare manutenzione, debug e riuso.

Gestione errori nelle macro

Le macro di Access dispongono di strumenti per controllare errori e flusso. Non ignorare indiscriminatamente gli errori. Se un oggetto da aprire non esiste o una query fallisce, l’utente deve ricevere un messaggio utile e il processo deve fermarsi in modo coerente.

Per applicazioni complesse è spesso utile centralizzare il logging in VBA. Le macro restano ottime per azioni UI semplici e prevedibili.

Macro e convalida dati

Una macro evento può controllare campi obbligatori prima del salvataggio e mostrare messaggi. Tuttavia i vincoli fondamentali devono essere definiti anche a livello tabella quando possibile: Required, indici univoci, regole di convalida e integrità referenziale proteggono i dati anche fuori dalla maschera.

Usa la macro per rendere l’errore comprensibile e guidare il focus. Non sostituire un vincolo dati con una macro fragile che viene eseguita soltanto in un percorso.

Macro e sottomaschere

Quando un controllo della maschera principale cambia, una macro può fare Requery della sottomaschera o di una combo. Ricorda che il controllo sottomaschera ha un proprio nome, che può differire dal nome dell’oggetto maschera contenuto.

Evita di ricaricare sottomaschere pesanti a ogni pressione di tasto. Collega l’azione a AfterUpdate della combo o a un pulsante Cerca, non all’evento Change di una casella di testo se non hai un motivo preciso.

Macro e maschere popup

Puoi aprire una maschera popup con l’azione ApriMaschera e configurare modalità finestra. Le proprietà PopUp e Modal appartengono alla maschera; la macro determina come e con quali criteri viene aperta.

Per un dialogo semplice una macro può essere sufficiente. Se devi restituire valori complessi alla maschera chiamante o gestire un flusso articolato, VBA offre più controllo.

Macro e OpenArgs

Il metodo VBA OpenForm espone OpenArgs in modo molto chiaro; nelle macro puoi ottenere risultati analoghi con gli argomenti disponibili e riferimenti a controlli o TempVars a seconda del caso. Se il processo dipende da parametri complessi, documenta il protocollo.

Non usare campi temporanei in una tabella condivisa solo per comunicare tra due maschere. In ambiente multiutente causerebbe conflitti.

Quando preferire VBA

VBA è consigliabile quando devi costruire stringhe SQL dinamiche, gestire file, eseguire cicli, creare funzioni riutilizzabili, lavorare con DAO o implementare una gestione errori articolata. Una macro non deve diventare un linguaggio di programmazione visuale gigantesco solo per evitare VBA.

Al contrario, non trasformare un semplice pulsante Apri report in venti righe di VBA. Meno codice significa meno superficie da mantenere.

Microsoft 365, Access 2024 e Runtime

Le macro evento descritte appartengono ad Access desktop per Windows e sono disponibili nelle versioni correnti incluse in Microsoft 365 e Access 2024. Access Runtime può eseguire macro e maschere già progettate, ma non è un ambiente completo di progettazione.

Le vecchie Access Web Apps non devono essere confuse con le macro delle maschere desktop. Non esiste una versione nativa di Access desktop per macOS equivalente a Windows. Se serve un’app Web, occorre una tecnologia differente.

32/64 bit non modifica le azioni macro standard. Le differenze emergono soprattutto se la macro chiama funzioni VBA che usano API o componenti esterni.

Sicurezza delle macro

Office può disabilitare contenuto attivo in file non attendibili. In ambiente aziendale usa posizioni attendibili e criteri gestiti. Non chiedere agli utenti di abilitare macro indiscriminatamente in database ricevuti da fonti sconosciute.

Se il front-end è stabile, puoi distribuire ACCDE. Conserva sempre il sorgente ACCDB e un backup. La distribuzione non sostituisce il controllo versione.

Prestazioni

La macro in sé è generalmente leggera; sono le azioni eseguite a poter essere costose. Requery, apertura di report, query remote e sottomaschere possono generare traffico. Valuta quindi la frequenza dell’evento.

Un’azione lenta su Load viene eseguita una volta; la stessa azione su Current può essere eseguita centinaia di volte. Scegli l’evento in base al significato e al costo.

Debug delle macro evento

Se una macro non parte, verifica che la proprietà evento mostri [Macro incorporata] e che la maschera sia nella vista corretta. Controlla eventuali condizioni If e i nomi degli oggetti. Un riferimento errato può generare prompt parametro o errori.

Riduci temporaneamente la macro a pochi passaggi per isolare il problema. Aggiungi messaggi diagnostici con moderazione durante lo sviluppo e rimuovi quelli inutili prima della distribuzione.

Scenario pratico: filtro ordini

frmFiltroOrdini contiene cboCliente e cmdVisualizza. Su clic di cmdVisualizza, una macro verifica che il cliente sia selezionato e apre frmOrdini con Condizione WHERE sull’IDCliente. Se il valore è Null, mostra un messaggio e non apre la maschera.

Questo flusso non richiede VBA e rimane facilmente leggibile. Se in futuro aggiungi dieci criteri facoltativi, valuta però una funzione VBA che costruisca il filtro dinamicamente.

Scenario pratico: aggiornare una combo

frmOrdine contiene cboCliente e un pulsante per aggiungere un nuovo cliente in una popup. Dopo la chiusura della popup, una macro può eseguire Requery di cboCliente. In questo modo il nuovo cliente compare subito nell’elenco.

Non rieseguire Requery dell’intera frmOrdine se basta aggiornare la combo. Un aggiornamento mirato è più veloce e riduce il rischio di spostare il record corrente.

Scenario pratico: controllare un record

BeforeUpdate può verificare che DataFine non preceda DataInizio. Se la condizione è falsa, la macro mostra un messaggio e annulla il salvataggio. La stessa regola, se fondamentale, dovrebbe essere presente anche nella tabella.

La maschera aggiunge una spiegazione amichevole; la tabella garantisce che il vincolo non venga aggirato da altri percorsi.

Manutenzione

Dai nomi chiari a macro autonome e controlli. Documenta quali eventi contengono macro, soprattutto in maschere complesse. Prima di rinominare query o tabelle consulta il riquadro Dipendenze oggetti e controlla i riferimenti nelle macro.

Evita azioni duplicate tra macro evento, macro AutoExec e VBA di apertura. Quando lo stesso effetto viene applicato da più punti, il comportamento diventa difficile da prevedere.

Link interni

Approfondisci con messaggi personalizzati nelle maschere, apertura di una maschera filtrata, validazione dei dati e la categoria Guide Access.

Fonti Microsoft

Per filtri e macro consulta Microsoft Support: ApplyFilter. Per il comportamento delle maschere consulta la documentazione corrente di Microsoft Support e Microsoft Learn, inclusi DoCmd.OpenForm e gli eventi delle maschere.

FAQ

Serve VBA per automatizzare una maschera? No. Molte azioni possono essere realizzate con macro evento.

Qual è l’evento per validare prima del salvataggio? BeforeUpdate.

Posso filtrare con una macro? Sì, con ApplyFilter oppure ApriMaschera e Condizione WHERE.

Quando usare Requery? Quando devi rieseguire l’origine dati del controllo o della maschera.

Le macro funzionano in Runtime? Sì, se già progettate e il contenuto attivo è consentito.

Conclusione

Usare macro evento nelle maschere Access è un modo efficace per automatizzare l’interfaccia senza scrivere codice complesso. Scegli l’evento che corrisponde al momento reale del processo, mantieni le macro brevi e usa condizioni per gestire i casi previsti.

Per logiche semplici, macro incorporate e azioni come ApriMaschera, ApplyFilter, Requery e MessageBox sono spesso sufficienti. Quando il flusso cresce, passa a VBA invece di costruire macro troppo estese. In entrambi i casi, proteggi i dati con vincoli strutturali e testa il comportamento in Microsoft 365, Access 2024 e Runtime secondo l’ambiente di distribuzione.

Lascia un commento