L`ambientedi programmazionediVBA

Transcript

L`ambientedi programmazionediVBA
Access: Programmazione VBA
Lezione n. 1
L’ambiente di
programmazione di VBA
Introduzione a VBA
A partire dalla versione Access 95, Microsoft ha inserito VBA (Visual Basic for Application) come
linguaggio di programmazione, allineando finalmente il prodotto agli altri applicativi Office: VBA è
ora il linguaggio di programmazione comune a tutte le applicazioni Office.
Anche produttori di terze parti hanno implementato VBA all’interno del loro prodotto come ad
esempio AUTOCAD, programma di disegno tecnico professionale.
Codice vs Macros
E’ possibile realizzare applicazioni utilizzando le macro, ma l’utilizzo del linguaggio VBA permette
una maggiore flessibilità ed un completo controllo di tutti gli oggetti esposti da Access;
personalmente continuo a considerare le macro solo come un utile strumento per eseguire una serie
di operazioni ripetitive.
Vi sono però alcune attività che non possono essere eseguite con le macro. Queste attività sono:
•
Gestione errori: tramite VBA è possibile intercettare gli errori di esecuzione e ridirigere
l’esecuzione verso una procedura di gestione dell’errore o verso altri punti della procedura
stessa. Ciò impedisce fra l’altro che l’applicazione si fermi senza che l’utente possa fare
nulla per risolvere la situazione.
•
OLE automation: solo tramite VBA è possibile manipolare oggetti di altre applicazioni
(Word, Excel, Outlook): dopo avere impostato l’opportuno riferimento alla libreria di
oggetti che ci interessa (e vedremo come fare) posso manipolare da Access un foglio Excel e
riempire una parte di esso con, ad esempio, il risultato di una query di selezione.Oppure
posso generare un messaggio di posta elettronica e spedirlo tramite Outlook, personalizzato
con i dati contenuti nel database.
•
Transazioni: per transazione si intende una serie di operazioni su un database il cui risultato
finale è positivo solo se tutte le singole operazioni hanno avuto esito positivo; tutte le
operazioni devono invece venire annullate se una delle operazioni fallisce. Classico esempio
è quello del trasferimento di denaro da un conto all’altro: l’operazione deve essere
convalidata solo se le due operazioni di prelievo da un conto e di versamento sull’altro conto
hanno successo.Tramite VBA è possibile gestire problematiche di questo tipo.
Maurizio Montella - Manuali.Net © 2004 Tutti i diritti riservati
1
Access: Programmazione VBA
Lezione n. 1
•
Processi record-by-record: per processi record-by-record intendo la possibilità di scorrere
una tabella (o il risultato di una query) dal primo all’ultimo record eseguendo un’operazione
oppure un’altra a seconda del contenuto dei campi del record corrente.
•
Utilizzo di chiamate API: non tratteremo in questo corso le chiamate alle funzioni API.
Sappiate però che solo tramite VBA è possibile eseguire chiamate alle API di Windows.
Una cosa che nelle prime versioni di Access era invece possibile fare solo con una macro era
mostrare una finestra di menu all’avvio dell’applicazione: era sufficiente scrivere il comando in una
macro di nome AUTOEXEC la quale veniva eseguita automaticamente all’apertura di Access; ora
esiste anche la possibilità di eseguire la stessa operazione dal menu Strumenti Æ Avvio impostando
il nome della maschera che si vuole visualizzare. Chi è affezionato alle macro può’ comunque
sempre creare una macro di nome AUTOEXEC.
La sola possibilità di gestione degli errori sarebbe di per sè sufficiente a farmi optare per VBA al
fine di realizzare applicazioni Access più affidabili e robuste. Ma come vedremo VBA permette di
manipolare molto più efficacemente tutti gli oggetti di Access: tabelle, maschere, query, report
Vediamo ora di fare pratica con l’ambiente VBA.
Dove scrivo il codice VBA ?
Il codice VBA viene scritto in oggetti di tipo Modulo: un Modulo è, in altri termini, il “contenitore”
delle procedure VBA che andremo a scrivere.
I moduli possono essere di due tipi: moduli a livello di form o report, e moduli Standard.
I moduli Standard sono visibili nella finestra di database selezionando il selettore Moduli. Per un
progetto nuovo non vi sarà ovviamente nessun modulo visualizzato; vedremo poco più avanti come
crearne uno.
I moduli standard contengono l’insieme delle procedure VBA della nostra applicazione che
vogliamo siano sempre disponibili in qualsiasi punto dell’applicazione.
I Moduli a livello di form o report sono invece memorizzati nel form o nel report stesso e non
sono visibili nell’elenco dei Moduli Standard.
Maurizio Montella - Manuali.Net © 2004 Tutti i diritti riservati
2
Access: Programmazione VBA
Lezione n. 1
I moduli a livello di form contengono generalmente l’insieme delle procedure che sono eseguite
quando viene cliccato un pulsante (button) sulla maschera o quando viene selezionato un valore in
un menu a tendina (combo box).
Una buona regola da seguire è la seguente:
• scrivete il codice che processa il form o i dati in esso contenuti in moduli a livello di form
• scrivete funzioni di carattere generale nei moduli Standard.
Vediamo ora come creare un nuovo modulo Standard.
Il mio primo modulo
Creiamo un nuovo database e chiamiamolo Corso.mdb
Nella finestra di database selezioniamo il selettore Moduli: come detto prima, essendo un database
nuovo, l’elenco è vuoto.
Clicchiamo su Nuovo: si apre l’editor VBA, ambiente di programmazione del tutto simile a quello di
Visual Basic, in cui verranno scritte e controllate (fase di debug) tutte le procedure.
Se la finestra non è uguale a quella qui presentata non vi preoccupate, vedremo poi come
personalizzare l’ambiente di lavoro; dovrebbe comunque essere visibile l’area dell’editor VBA
contenente una riga con la dichiarazione:
Option Compare Database
e i due menu a tendina (Generale) e (Dichiarazioni).
Salviamo il modulo: dal menu File selezioniamo Salva e sostituiamo il nome Modulo1 proposto
con il nome Lezione1. Diamo l’ OK. Abbiamo così creato un nuovo modulo che per ora è vuoto nel
senso che non vi è definita ancora nessuna procedura.
Sempre dal menu File, selezioniamo Chiudi e torna su MS Access; possiamo vedere che adesso il
modulo appena creato è visibile nell’elenco dei Moduli Standard.
Maurizio Montella - Manuali.Net © 2004 Tutti i diritti riservati
3
Access: Programmazione VBA
Lezione n. 1
Posso creare tanti moduli quanti voglio. L’utilità di creare più moduli consiste nel fatto che, in
questo modo, posso raggruppare in un unico “contenitore” funzioni che sono concettualmente
attinenti. Se sto sviluppando un’applicazione finanziaria potrei voler raggruppare tutte le funzioni
finanziarie in un modulo, tutte le funzioni di utilità generale in altro modulo e cosi via.
La mia prima Procedura
Vediamo ora come creare una procedura; come esempio cominciamo a crearne una semplicissima il
cui scopo è quello di visualizzare una finestra con un messaggio.
Dalla finestra di database di Access facciamo doppio click sul modulo Lezione1 creato
precedentemente: si riapre il VBA editor. In alternativa al doppio click si può cliccare col tasto
destro del mouse sul nome del modulo e selezionare Struttura.
Posizioniamoci subito sotto la dichiarazione Option Compare Database.
Dal menu Insert selezioniamo Procedure: viene mostrata la seguente finestra popup:
•
•
•
•
Digitiamo un nome per la procedura nella casella
Nome (per esempio Procedura1)
Selezioniamo Sub nel frame Type (se non è già
selezionato)
Selezioniamo Public nel frame Scopo
Clicchiamo su OK
Il VBA editor scrive per noi le seguenti istruzioni:
Public Sub Procedura1()
End Sub
Notiamo subito una cosa importante:
Qualsiasi riga di codice che fa parte di una procedura sarà sempre inclusa fra due righe come le
precedenti:
• la prima riga dichiara la procedura
• l’ultima riga stabilisce la fine della procedura stessa.
Nel caso precedente abbiamo scritto una procedura Sub di tipo Public, cioè visibile in qualsiasi
punto del Progetto.
In un eccesso di fantasia scriviamo ora le seguenti due righe all’interno della procedura:
Beep
MsgBox "Benvenuto nel mondo di VBA"
In modo che il risultato finale sia il seguente:
Public Sub Procedura1()
Beep
MsgBox "Benvenuto nel mondo di VBA"
End Sub
Maurizio Montella - Manuali.Net © 2004 Tutti i diritti riservati
4
Access: Programmazione VBA
Lezione n. 1
Salviamo il modulo.
Premiamo F5: ciò fa eseguire la procedura su cui siamo posizionati. Il risultato dovrebbe essere
quello di produrre un beep sonoro e di visualizzare una finestra di popup con il messaggio
"Benvenuto nel mondo di VBA"
Abbiamo scritto la nostra prima, anche se semplice, procedura. Inoltre abbiamo visto come
realizzare un output per l’utente con la funzione di Access: MsgBox(<testo del messaggio>)
Per prendere dimestichezza con il VBA editor e per studiarne alcune caratteristiche, creiamo una
nuova procedura di tipo Sub e chiamiamola Procedura2. Copiamo il seguente codice all’interno
della Procedura2, per il momento non ha importanza comprenderne esattamente il significato.
Dim st As String
st = InputBox("Inserire un messaggio")
If st = "" Then
Exit sub
Else
MsgBox "Hai scritto: " & st, vbInformation, "Richiesta stringa"
End If
Salviamo il Progetto.
Possiamo eseguirla premendo F5: verrà visualizzata una maschera di input; digitiamo una stringa e
diamo l’OK. Comparirà un secondo popup che visualizza la stringa che abbiamo inserito.
Al di là dell’intelligenza della procedura, ciò che ora voglio farvi vedere è come navigare fra
procedure e fra moduli differenti.
Come detto un modulo è un “contenitore” di procedure. Per visualizzare una procedura esistente,
dobbiamo selezionarla nel menu a tendina di destra dell’area di editing (Declarations). A questo
punto vedremo Procedura1 e Procedura2 in quanto sono le due procedure che abbiamo creato.
Proviamo a selezionare Procedura1 e poi Procedura2: nell’area di editing verrà visualizzata l’una o
l’altra.
Se vengono visualizzate sempre entrambe le procedure significa che l’editor è
impostato in visualizzazione Full Module View. Possiamo passare da questa
visualizzazione alla visualizzazione singola cliccando sul pulsantino di sinistra
che troviamo in basso a sinistra dell’editor. Cliccando sul secondo pulsantino si
torna in Full Module View.
Maurizio Montella - Manuali.Net © 2004 Tutti i diritti riservati
5
Access: Programmazione VBA
Lezione n. 1
Sta a preferenza vostra mantenere l’una o l’altra visualizzazione; comunque in Full Module View,
selezionando un nome di procedura nel menu a tendina, viene mostrata la procedura ed il cursore si
posiziona sulla prima riga del codice corrispondente.
Un’altra interessante vista è quella che si ottiene selezionando Project Explorer dal menu View. In
questo modo viene visualizzata una finestra con l’elenco di tutti i moduli contenuti nel progetto.
Ciò ci permette di visualizzare e selezionare un modulo diverso da quello su cui stiamo lavorando
senza dover passare ad Access in continuazione.
Proviamo ad aggiungere semplicemente un paio di moduli senza definire in essi alcuna procedura.
Abbiamo già visto come fare.
Come noterete man mano che viene aggiunto un modulo, l’elenco nel Project Explorer viene
aggiornato. Facendo doppio click su un modulo si può accedere alle procedure in esso contenute;
nel menu a tendina (Declarations) vengono visualizzate solo le procedure del modulo in cui ci
troviamo.
Per eliminare un modulo basta posizionarsi sul modulo stesso e premere Del; anche tutte le
procedure in esso contenute verranno eliminate.
Fate quindi attenzione: prima di eliminare un modulo dovete essere certi che in nessun altro
modulo (standard o di maschera) si faccia riferimento ad una funzione contenuta nel modulo che
vogliamo eliminare.
Proviamo a cancellare uno dei due moduli appena creati.
Per chiudere la finestra del Project Explorer cliccare come di consueto sulla x di chiusura finestra.
Nella prossima lezione vedremo la differenza fra una procedura di tipo Sub e una procedura di tipo
Function.
Maurizio Montella - Manuali.Net © 2004 Tutti i diritti riservati
6