Come scrivere il primo codice VBA in Access: tutorial pratico

access vba: per scrivere il primo codice VBA in Microsoft Access conviene creare un modulo standard, attivare Option Explicit, inserire una semplice procedura Public Sub e provarla prima dalla finestra Immediata e poi da un pulsante o da un evento. Questo metodo consente di capire subito dove vive il codice, come viene eseguito e come si diagnosticano gli errori.

In questa guida partiamo da zero ma arriviamo a un’impostazione adatta anche a database reali: vedremo differenza tra Sub e Function, moduli standard e moduli di maschera, variabili, condizioni, procedure evento, gestione degli errori, compilazione, breakpoint e considerazioni per Microsoft 365, Access 2024, Access Runtime e Office a 32 o 64 bit. Gli esempi riguardano l’app desktop Access su Windows.

Indice

  • Preparare il database
  • Creare il primo modulo
  • Scrivere la prima Sub
  • Eseguire il codice
  • Variabili e tipi dati
  • Condizioni e cicli
  • Function e valori di ritorno
  • Collegare il codice a una maschera
  • Gestire errori e debug
  • Runtime, sicurezza e 32/64 bit
  • Problemi comuni
  • FAQ

Preparare Access prima di scrivere codice

Lavora sempre su una copia del database quando stai imparando o quando devi introdurre automazioni che possono modificare dati. Una procedura VBA può eseguire query di aggiornamento, eliminare record, spostare file o esportare dati; un errore di logica può quindi avere effetti concreti. Per un primo esercizio è sufficiente un database vuoto o una copia di test con pochi record.

Apri il Visual Basic Editor con Alt+F11. Se non lo hai mai usato, individua Esplora progetti e la finestra del codice. La guida dedicata a come aprire l’editor VBA in Access spiega in dettaglio l’ambiente. Qui ci concentriamo su come scrivere codice corretto e riutilizzabile.

Prima di iniziare verifica che il database sia attendibile. Access può disabilitare codice e macro nei file provenienti da fonti non considerate sicure. Non aggirare i controlli in modo indiscriminato: usa copie provenienti da fonti fidate e, in ambiente aziendale, posizioni attendibili gestite secondo le policy IT.

Creare il primo modulo standard

Dalla scheda Crea scegli Modulo. Access apre il VBE con un nuovo modulo standard. Salvalo come modPrimiTest. Il prefisso mod non è obbligatorio ma aiuta a riconoscere subito i moduli standard nel progetto.

In alto inserisci:

Option Compare Database
Option Explicit

Option Explicit è fondamentale perché obbliga a dichiarare le variabili. Senza questa direttiva, un errore di battitura può creare implicitamente una nuova variabile Variant e produrre risultati difficili da diagnosticare. Puoi impostare il VBE in modo che la dichiarazione esplicita venga inserita automaticamente nei nuovi moduli.

Scrivere la prima procedura Sub

Inserisci questo codice:

Public Sub PrimoCodice()
Dim messaggio As String
messaggio = "VBA funziona correttamente in Access."
MsgBox messaggio, vbInformation, "Test VBA"
End Sub

Public indica che la procedura può essere richiamata anche da altri moduli. Sub definisce una procedura che esegue istruzioni senza restituire direttamente un valore. Dim dichiara la variabile, mentre As String specifica che contiene testo. MsgBox mostra un messaggio.

La struttura è volutamente semplice ma già corretta. Evita di iniziare copiando procedure molto lunghe trovate online: se non comprendi il contesto, diventa difficile capire perché un oggetto, un riferimento o un metodo non funzionano nel tuo database.

Come eseguire la prima Sub

Posiziona il cursore dentro la procedura e premi F5. In alternativa apri la finestra Immediata con Ctrl+G e digita PrimoCodice, poi premi Invio. Dovresti visualizzare il messaggio.

Se compare un errore di compilazione, non ignorarlo. Apri il menu Debug e compila il progetto. Access evidenzierà il primo problema. Correggilo e ripeti finché il progetto compila senza errori. La compilazione non dimostra che la logica sia perfetta, ma verifica sintassi, dichiarazioni e molti riferimenti.

Capire le variabili

Le variabili memorizzano valori temporanei durante l’esecuzione. Scegli il tipo più adatto. String per testo, Long per molti numeri interi e identificativi, Currency per valori monetari, Date per date e orari, Boolean per vero/falso. Variant è flessibile e può rappresentare Null, ma non dovrebbe essere la scelta automatica.

Esempio:

Public Sub EsempioVariabili()
Dim idCliente As Long
Dim nomeCliente As String
Dim saldo As Currency
Dim dataControllo As Date

idCliente = 125
nomeCliente = "Cliente Demo"
saldo = 149.9
dataControllo = Date

Debug.Print idCliente, nomeCliente, saldo, dataControllo
End Sub

Usa la finestra Immediata per osservare l’output. Debug.Print è preferibile a continui MsgBox durante lo sviluppo perché non interrompe il flusso.

Null, stringa vuota e zero non sono la stessa cosa

In Access devi imparare presto a distinguere Null da stringa vuota e zero. Null indica assenza di valore. Se un controllo può essere Null, una conversione diretta come CLng(Me.txtID) può generare errore. Controlla IsNull oppure usa Nz solo quando la sostituzione è semanticamente corretta.

Per esempio:

If IsNull(Me.txtDataOrdine) Then
MsgBox "Inserisci una data.", vbExclamation
Exit Sub
End If

Evita di trasformare automaticamente tutti i Null in zero: in alcuni database zero è un valore reale e diverso da valore mancante.

Scrivere una condizione If

Una delle strutture più usate è If...Then...Else:

Public Sub ControllaImporto()
Dim totale As Currency
totale = 120

If totale >= 100 Then
MsgBox "Ordine di almeno 100 euro."
Else
MsgBox "Ordine inferiore a 100 euro."
End If
End Sub

Le condizioni possono combinare più test con And e Or. Mantienile leggibili. Se una condizione diventa molto lunga, spezzala in variabili booleane con nomi chiari o in funzioni separate.

Creare un ciclo

Un ciclo consente di ripetere un’operazione. Per un semplice conteggio puoi usare:

Public Sub EsempioFor()
Dim i As Long
For i = 1 To 5
Debug.Print "Passaggio " & i
Next i
End Sub

Nei database reali i cicli vengono spesso usati con recordset DAO. Non usarli però quando una singola query SQL può aggiornare o calcolare i dati in modo set-based: una query ben progettata è spesso più veloce di un ciclo che aggiorna un record alla volta.

Sub e Function: differenza fondamentale

Una Sub esegue istruzioni. Una Function restituisce un valore. Esempio:

Public Function CalcolaIVA(ByVal imponibile As Currency, ByVal aliquota As Double) As Currency
CalcolaIVA = imponibile * aliquota / 100
End Function

Puoi provarla dalla finestra Immediata con ? CalcolaIVA(100,22). Le funzioni pubbliche in moduli standard possono essere usate in diversi contesti Access, incluse espressioni e alcune query, purché rispettino i requisiti del contesto.

Microsoft documenta inoltre l’azione macro RunCode per richiamare Function definite nei moduli. Se una macro deve chiamare una Sub, puoi creare una Function wrapper che richiama la Sub. Evita di dare alla funzione lo stesso nome del modulo.

Passare parametri alle procedure

I parametri rendono il codice riutilizzabile:

Public Sub MostraCliente(ByVal idCliente As Long)
MsgBox "Cliente ID: " & idCliente
End Sub

ByVal passa una copia del valore. Per i primi progetti è spesso la scelta più prevedibile. ByRef, che è il comportamento predefinito se non specifichi nulla, permette alla procedura di modificare la variabile originale. Usalo intenzionalmente, non per abitudine.

Collegare il codice a un pulsante

Crea una maschera e aggiungi un pulsante. In visualizzazione Struttura apri la proprietà Su clic, seleziona [Procedura evento] e apri il Generatore di codice. Inserisci:

Private Sub cmdTest_Click()
PrimoCodice
End Sub

Ora l’utente non deve aprire il VBE: clicca il pulsante e Access richiama la procedura. Questo è il modello tipico di un’applicazione: l’interfaccia attiva codice dietro le quinte.

Quando lasciare il codice nel modulo della maschera

Se una procedura riguarda solo quella maschera, per esempio abilita un pulsante in base al record corrente, può restare nel modulo della maschera. Se invece la logica deve essere usata da più oggetti, spostala in un modulo standard.

Questa separazione riduce duplicazioni. Copiare lo stesso blocco in dieci maschere significa dover correggere dieci versioni quando cambia una regola.

Primo esempio con DAO

Access usa spesso DAO per interagire con dati e query. Un esempio semplice di query di azione:

Public Sub AggiornaStatoOrdini()
Dim db As DAO.Database
Set db = CurrentDb

db.Execute "UPDATE Ordini SET Stato='Scaduto' WHERE DataScadenza < Date() AND Stato<>'Pagato';", dbFailOnError
MsgBox db.RecordsAffected & " record aggiornati."

Set db = Nothing
End Sub

Prima di eseguire codice simile su dati reali prova la query come SELECT equivalente e fai un backup. dbFailOnError consente a DAO di generare errore se l’operazione non riesce invece di nascondere alcuni problemi.

Gestione degli errori

Il primo codice didattico può essere breve, ma una procedura operativa deve prevedere errori:

Public Sub ProceduraRobusta()
On Error GoTo GestioneErrore

' operazioni

Uscita:
Exit Sub

GestioneErrore:
MsgBox "Errore " & Err.Number & ": " & Err.Description, vbExclamation
Resume Uscita
End Sub

Non usare On Error Resume Next come soluzione generale. Può nascondere problemi e lasciare il programma in uno stato incoerente. È utile solo in situazioni molto circoscritte e con controllo immediato di Err.Number.

Breakpoint e F8

Premi F9 su una riga per creare un breakpoint. Avvia il flusso dall’interfaccia e, quando Access raggiunge quella riga, l’esecuzione si ferma. Premi F8 per avanzare istruzione per istruzione. Guarda i valori delle variabili e usa la finestra Immediata.

Il debug passo-passo è essenziale quando una procedura attraversa più condizioni. Ti permette di vedere quale ramo viene effettivamente eseguito invece di dedurlo soltanto dal risultato finale.

Riferimenti mancanti

Se il progetto non compila, controlla anche i Riferimenti nel VBE. Una libreria marcata MISSING/MANCANTE può causare errori persino in funzioni semplici. Questo accade spesso dopo lo spostamento del database su un altro PC.

In applicazioni distribuite riduci riferimenti non necessari. Se automatizzi altre applicazioni Office, valuta early binding durante lo sviluppo per avere IntelliSense e late binding quando serve maggiore tolleranza alle diverse versioni, ma testa sempre il comportamento reale.

Microsoft 365 e Access 2024

Il VBA di Access e il modello a oggetti desktop restano disponibili in Access per Microsoft 365 e Access 2024. Le procedure fondamentali, gli eventi e DAO sono parte dell’ambiente Access desktop. Controlla comunque la documentazione Microsoft per metodi specifici e per eventuali differenze introdotte dagli aggiornamenti.

Access non offre un’app desktop nativa equivalente su macOS. Una soluzione Access/VBA presuppone Windows. Per utenti Mac o browser valuta un’architettura differente anziché promettere un Access Web moderno equivalente all’app desktop.

Access Runtime

Runtime serve a eseguire applicazioni preparate. Non progettare un flusso in cui l’utente finale deve aprire il VBE e modificare codice. Con Runtime servono maschere, pulsanti, messaggi e gestione errori sufficienti a usare l’applicazione senza strumenti di sviluppo.

Prima della distribuzione compila il progetto, prova tutte le procedure e valuta ACCDE per impedire modifiche dirette al codice. Conserva comunque il file sorgente ACCDB in un archivio protetto e versionato.

Office 32 bit e 64 bit

Il codice VBA puro spesso non cambia. Le incompatibilità riguardano soprattutto API Windows, DLL, controlli ActiveX e driver. Le dichiarazioni API su VBA7 64 bit richiedono in genere PtrSafe e, quando appropriato, LongPtr.

Se il tuo primo progetto non usa API esterne, non complicarlo inutilmente. Ma se prevedi una distribuzione aziendale, documenta fin dall’inizio architettura Office e driver necessari.

Sicurezza del codice

Non inserire password, token o chiavi API direttamente nei moduli. Un file Access non è un vault. ACCDE ostacola la modifica del sorgente VBA ma non trasforma il codice in un posto sicuro per segreti. Usa sistemi di autenticazione e archiviazione credenziali appropriati.

Se l’organizzazione richiede fiducia del codice, valuta firma digitale e posizioni attendibili secondo le policy aziendali. Evita di disattivare globalmente le protezioni per risolvere un problema locale.

Problemi comuni del primo codice

Variabile non definita

Con Option Explicit significa che hai dimenticato di dichiararla o hai scritto il nome in modo diverso. Correggi il nome o aggiungi la dichiarazione corretta.

Sub o Function non definita

Controlla nome, visibilità Public/Private, modulo e riferimenti. Una procedura privata nel modulo di una maschera non è equivalente a una funzione pubblica in un modulo standard.

Errore di tipo

Verifica Null e tipo reale dei valori. Usa IsDate, IsNumeric, TypeName e conversioni esplicite solo dopo la validazione.

Il pulsante non esegue il codice

Controlla che l’evento Su clic sia [Procedura evento] e che il nome della procedura corrisponda al controllo.

Funziona soltanto sul PC dello sviluppatore

Verifica percorsi hard-coded, autorizzazioni, riferimenti, bitness e driver. Un’applicazione professionale deve usare configurazioni portabili.

Checklist per il primo progetto VBA

Usa Option Explicit. Compila il progetto. Dai nomi descrittivi. Separa logica riutilizzabile ed eventi. Valida i dati prima di convertirli. Gestisci gli errori. Prova su una copia. Usa Debug.Print. Non inserire credenziali nel codice. Documenta componenti esterni. Testa con un utente standard e su un PC diverso da quello di sviluppo.

Quando il progetto cresce, aggiungi una convenzione di versionamento e una procedura di rilascio. Mantieni una copia stabile precedente del front-end e annota le modifiche. In multiutente distribuisci front-end locali, non un unico file eseguito contemporaneamente da tutti su rete.

FAQ

Devo conoscere Visual Basic prima di usare VBA in Access?

No. Puoi partire da procedure semplici e imparare progressivamente, concentrandoti sul modello a oggetti Access e sulle operazioni che devi automatizzare.

Meglio imparare prima macro o VBA?

Le macro sono utili per capire eventi e automazioni semplici. Se devi creare applicazioni articolate, VBA diventa rapidamente importante. Le due tecnologie possono convivere.

Qual è il primo comando da provare?

Una semplice MsgBox o Debug.Print è ideale perché verifica subito che il modulo e l’esecuzione funzionino senza modificare dati.

Posso usare funzioni VBA in una query?

Sì, in molti casi una Public Function in un modulo standard può essere richiamata da espressioni e query. Considera però le prestazioni: una funzione chiamata per ogni record può essere più lenta di un’espressione nativa o di SQL set-based.

Come faccio a sapere se il codice è sicuro?

Compilazione e assenza di errori non bastano. Devi testare input errati, permessi, file mancanti, record Null, concorrenza e possibili effetti sui dati.

Approfondimenti

Conclusione

Scrivere il primo codice VBA in Access è soprattutto un esercizio di metodo. Crea un modulo standard, attiva Option Explicit, scrivi una Sub piccola e verificabile, eseguila dalla finestra Immediata e poi collegala all’interfaccia. Impara subito compilazione, breakpoint e gestione errori: sono strumenti fondamentali, non tecniche avanzate da rimandare. Quando il progetto cresce, organizza moduli e dipendenze, documenta Runtime e 32/64 bit e testa sempre su copie dei dati e su configurazioni reali. In questo modo il primo esperimento diventa una base solida per automazioni Access professionali.

Lascia un commento