Discussione: Corso VBA
Visualizza messaggio singolo
Vecchio 13-02-2012, 16.10.41   #2
Alexsandra
Senior Member
WT Expert
 
L'avatar di Alexsandra
 
Registrato: 19-05-2007
Loc.: Verona
Messaggi: 1.208
Alexsandra è un gioiello raroAlexsandra è un gioiello raroAlexsandra è un gioiello raroAlexsandra è un gioiello raro
#3

Ambiente di sviluppo e generatore di macro



Avrete certamente notato, usando quotidianamente Excel, che capita molto spesso di svolgere le stesse operazioni ripetendo lo stesso comando per compiere normalissime azioni di routine che implicano le stesse modalità di esecuzione. Invece di ripetere la stessa serie di istruzioni ogni volta che si vuole eseguire una determinata operazione è possibile, utilizzando una macro, creare un automatismo che ci permetta di eseguire una serie di comandi automaticamente all'interno dell’applicazione stessa. Le macro sono procedure, o meglio, un insieme di comandi e istruzioni, che permettono di eseguire una serie di operazioni utilizzando un singolo comando, automatizzando attività ripetitive che altrimenti richiederebbero una vasta serie di comandi manuali in sequenza.
In pratica una macro è una procedure composta da un insieme di istruzioni che permettono di eseguire un compito ripetitivo e che Microsoft ha reso disponibile nei suoi pacchetti Office anche ai non addetti ai lavori attraverso l'introduzione del Registratore di Macro


Il Registratore di macro
Un modo semplice per imparare VBA è quello di registrare le proprie macro con lo strumento Registratore di macro, e quindi leggere, eseguire e modificare il codice della macro che avete registrato in Visual Basic Editor. Una macro è un insieme di istruzioni fornite sotto forma di codici per rendere il computer in grado di eseguire un'azione e questo particolare strumento è presente in tutte le applicazioni di Office e permette di registrare una serie di operazioni in una macro per poi essere eseguite quando se ne presenta la necessità. Bisogna tenere presente che una volta attivato il registratore di macro vengono registrate tutte le azioni svolte dall'utente e convertite in codice Visual Basic, pertanto prima di compiere questa azione si devono fissare le condizioni nelle quali successivamente queste macro verranno eseguite, in sostanza, si deve stabilire nel proprio ambiente di lavoro le stesse condizioni che esisteranno quando la macro verrà eseguita. Questa operazione viene definita col termine di fissare le condizioni iniziali, per meglio comprendere si può supporre, per esempio, di voler creare una macro che applica un determinato tipo e dimensione di carattere a delle celle selezionate di un foglio Excel, le condizioni iniziali, che abbiamo accennato prima, sono che questa macro abbia almeno un foglio di calcolo aperto e una cella selezionata.

Se avviamo il registratore di macro, dopo visualizziamo un foglio di calcolo e selezioniamo delle celle, tutte queste operazioni entrano a far parte della macro stessa in quanto, come abbiamo già detto, il registratore di macro registra tutte le azioni che si eseguono, anche quelle che esulano dal compito che si vuole assegnare, diventando così parte integrante della macro. In pratica per definire le condizioni iniziali si intende la "preparazione dell’ambiente di lavoro" in modo che il codice della macro contenga esclusivamente le operazioni da svolgere. Per poter mandare in esecuzione una macro dobbiamo prima verificare il grado di protezione che abbiamo impostato in Excel, lo possiamo vedere attraverso questo percorso Strumenti - Macro - Protezione e ci comparirà una maschera come quella sotto riportata

Fig. 1

Impostando il livello di protezione su medio, come vedete in Figura 1, verrà mostrato un messaggio di avviso ogni volta che andrete ad aprire file che conterranno macro, e permetterà di scegliere se eseguirle o meno. Il messaggio che vi apparirà è il seguente

Fig. 2

Nota: Per versioni di Excel superiori alla 2003 il livello di sicurezza è settato per default con le macro disabilitate, per poter salvare il file con il progetto VBA si deve seguire questo percorso dal menu File - Salva con nome e selezionare nella casella a discesa la voce Cartella di lavoro con attivazione macro di Excel

Fig. 3

Ad ogni modo si consiglia di controllare il Centro di protezione per verificare il grado di sicurezza impostato a cui si può accedere dalla barra multifunzione seguendo il percorso dal menu Sviluppo - Sicurezza macro

Fig. 4

Successivamente viene visualizzata la finestra del centro di protezione come quella sotto riportata

Fig. 5

Si consiglia di selezionare l’opzione “Disattiva tutte le macro con notifica” in questo modo quando viene aperto un file contenente codice VBA Excel rimanda un avviso che il file che si sta per aprire contiene un progetto VBA che identifica come potenzialmente pericoloso. Scegliendo questa opzione quando poi andiamo ad aprire un file che contiene macro ci viene portato a video sotto la barra dei menù un avviso in cui possiamo scegliere se attivarle oppure no

Fig. 6

E’ doveroso ricordare che le macro possono contenere codice dannoso o anche un'applicazione virale, pertanto fate attenzione nell'aprire file che riporteranno il messaggio sopra esposto, aprite file contenenti macro solo se siete certi della fonte.
Fine Nota

Fatta questa premessa iniziamo a costruire la nostra prima macro utilizzando il registratore di Macro che si trova nel menu Strumenti - Macro - Registra nuova macro

Fig. 7

Nota: Per versioni di Excel superiori alla 2003 il percorso che dobbiamo seguire per registrare una nuova macro è: Visualizza - Macro - Registra Macro

Fig. 8
Fine Nota

Eseguita questa operazione ci comparirà una finestra come quella sotto riportata

Fig. 9

Vediamo i vari campi che compaiono in questa finestra

Nome macro: La prima opzione della finestra di dialogo è il Nome Macro che per default viene assegnato un nome che consiste nella parola Macro seguita da un numero in funzione del numero di macro già registrate in quella sessione di lavoro. Si consiglia però di assegnare un nome più significativo e personalizzato per identificare il compito assegnato alla macro. Per esempio se si registra una macro che cambia il tipo e la dimensione del carattere si può immettere il nome Cambiacaratt nel campo di testo del nome della macro

Tasto di scelta rapida: si può usare facoltativamente la casella di immissione rapida da tastiera per definire una combinazione di tasti che quando verrà premuta porterà all'esecuzione della macro, immettendo quindi la lettera che si vuole usare come "tasto rapido". Si consiglia di usare questa opzione solo nel caso in cui si ritenga che in seguito la macro verrà usata molto spesso. Ricordo inoltre che tutte le combinazioni di tasti rapidi o "scorciatoie" sono combinazioni tra il tasto Ctrl (Control) e il tasto che viene assegnato, per esempio, se inseriamo Z nell'apposito campo, per eseguire la macro basta usare la combinazione di tasti CTRL+Z

Memorizza macro in: In questo campo di testo è possibile scegliere dove salvare la macro una volta registrata. Le scelte previste sono:
  • Cartella macro personale
  • Nuova cartella di lavoro
  • Questa cartella di lavoro

Se si sceglie Cartella macro personale Excel salva la macro in una speciale cartella detta Personal.xls che viene caricata automaticamente quando si avvia Excel. Se invece si sceglie "Questa cartella di lavoro", la macro verrà salvata nella cartella corrente (scelta consigliata)

Descrizione: Le informazioni inserite in questo campo non vengono usate dalla macro ma servono solo per aggiungere alcune note o commenti su ciò che fa la macro, per default il VBA immette una descrizione costituita dalla data di registrazione della macro e dall'autore

Per fornire un esempio specifico, si supponga che tutti i giorni si debba aprire un file che si chiama "Lezione1" e si deve scrivere nella cella A1 del Foglio1 Inizio ore 08,00 e nella cella A1 del Foglio2 Fine ore 12,00 potremmo automatizzare questa procedura usando una macro. Premiamo sul tasto OK della figura sopra esposta (Fig. 9) e procediamo alla creazione della macro. Innanzi tutto attiviamo il Foglio1 e portiamo il cursore nella cella A1 e scriviamo la frase Inizio ore 08,00 e poi premiamo il tasto Invio, portiamoci poi nel Foglio2 e nella cella A1 e scriviamo la frase Fine ore 12,00 e premiamo ancora Invio

Ritorniamo poi al Foglio1 e possiamo anche interrompere la registrazione della nostra macro seguendo questo percorso: Strumenti - Macro - Interrompi registrazione

Fig. 10

A questo punto la nostra macro è stata creata, la procedura di fine registrazione può essere eseguita nel modo sopra descritto oppure al momento della registrazione può comparire a video anche un box come il seguente

Fig. 11

La finestra di figura 11 rimarrà sullo schermo durante la registrazione, è possibile spostarlo come volete, e per fermare la registrazione basta premere sul pulsante quadrato che vedete in figura.

Nota: Per versioni di Excel superiori alla 2003 per interrompere la registrazione della macro si deve seguire il seguente percorso Visualizza - Macro - Interrompi Registrazione e la finestra riportata in figura 11 si chiude

Fig. 12
Fine Nota

A questo punto possiamo verificare se la macro registrata funziona, cancelliamo quello che abbiamo scritto nei due fogli e proviamo a mandarla in esecuzione, seguendo il percorso dal menu Strumenti - Macro - Macro

Fig. 13

Nota: Per versioni di Excel superiori alla 2003 per mandare una macro in esecuzione il percorso da seguire è: Visualizza - Macro - Visualizza Macro

Fig. 14
Fine Nota

In seguito si apre una maschera come la seguente

Fig. 15

In questo box vengono elencate tutte le macro registrate o scritte direttamente all'interno dell'editor, basta solo selezionare col mouse la macro interessata e premere sul pulsante Esegui per mandarla in esecuzione, oppure utilizzando il tasto di scelta rapida associato alla macro (CTRL+Z) o semplicemente premendo il tasto F5. Si può eseguire una macro in modalità interruzione, (o Step by Step) selezionando la macro e cliccando sul pulsante “Esegui Istruzione” che aprirà la finestra dell’Editor con il modulo che contiene la macro selezionato e già attivo e col cursore posizionato sulla prima riga di codice selezionata in giallo. Le istruzioni verranno eseguite premendo il tasto F8, questa è un’opzione per poter verificare il funzionamento della macro passo-passo. Premendo il tasto “Elimina” la macro selezionata verrà eliminata e cliccando sul tasto “Opzioni” si può cambiare l’assegnazione del tasto di scelta rapido e la descrizione della macro.

Cliccando invece su “Modifica” si visualizza il codice della macro registrata, e si accede all’Editor di VBE con la finestra dell’Editor già aperta e il codice della macro che è stato prodotto dall’azione compiuta. Nel nostro esempio troveremo un codice come il seguente:
Codice:
Sub Macro1()
'
' Macro1 Macro
' prova registratore di macro
'
'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Inizio ore 8,00"
    Range("A2").Select
    Sheets("Foglio2").Select
    ActiveCell.FormulaR1C1 = "Fine ore 12,00"
    Range("A2").Select
    Sheets("Foglio1").Select
End Sub
Analizzando il codice vediamo che la prima riga contiene l’intestazione della procedura, cioè la parola chiave Sub seguita dal nome che abbiamo assegnato alla macro e da due parentesi, che indica l’inizio della sub routine e delle istruzioni che verranno eseguite quando manderemo in esecuzione la macro. Nell'ultima riga è presente la parola chiave End Sub che indica la fine della procedura e tra le due istruzioni vengono collocate le istruzioni da seguire

Le prime 5 righe sono precedute da un apice e sono dei commenti che vengono ignorate dal VBE, praticamente sono le frasi che abbiamo inserito in fig. 15 all’inizio della registrazione, mentre alla riga 6 viene selezionata la cella A1 tramite l’istruzione ‘Select’ e nella riga successiva viene inserita la scritta “Inizio ore 8,00” mentre alla riga successiva viene selezionata la cella A2 che corrisponde alla pressione del tasto Invio che rimanda a capo e seleziona la cella A2 nel foglio di lavoro.

Nella riga 9 viene selezionato il foglio 2 e nella riga successiva viene inserita la scritta “Fine ore 12,00” nella cella A1, si passa poi alla cella A2 quando viene premuto il tasto invio nel foglio di lavoro che rimanda a capo e infine si ritorna al foglio 1 terminando la registrazione.

Se si desidera che una macro selezioni una cella specifica, esegua un’azione e poi selezioni un’altra cella mediante un riferimento relativo alla cella attiva, è possibile utilizzare dei riferimenti di cella definiti relativi e assoluti durante la registrazione della macro. Per registrare una macro utilizzando riferimenti relativi, si deve attivare la funzione dal percorso Visualizza – Macro – Usa riferimenti relativi della barra multifunzione

Fig. 16


Definizione di “riferimento assoluto”
Per “riferimento assoluto” si intende l’indirizzo esatto di una cella, indipendentemente dalla posizione della cella contenente la formula. Un riferimento assoluto ha la forma $A$1, in pratica viene inserito il simbolo $ prima del riferimento, notare che possono esistere riferimenti di cella misti, che presentano la seguente forma A$1, in questo caso il riferimento assoluto è riferito alla riga, mentre un riferimento assoluto per la colonna ha la forma $A1. Diversamente dai riferimenti relativi, i riferimenti assoluti non si adattano automaticamente quando si copiano delle formule su righe e colonne.
Codice:
Sub copia()
' copia nella cella A1 il contenuto di A3
' indirizzamenti assoluti
 Range("A1").Value = Range("A3").Value
End Sub

Definizione di “riferimento relativo”
Per “riferimento relativo”si intende un riferimento di cella, utilizzato in una formula, che cambia quando la formula viene copiata in un’altra cella o intervallo. Dopo che la formula viene copiata e incollata, il riferimento relativo nella nuova formula cambia per fare riferimento a una cella differente distante dalla formula lo stesso numero di righe e colonne che distanziano il riferimento relativo originale dalla formula originale.
Se ad esempio la cella A3 contiene la formula =A1+A2 e si copia la cella A3 nella cella B3, la formula nella cella B3 diventa =B1+B2.

Mentre invece la formula "=R[-1]C*2" è un esempio di riferimento relativo e si riferisce alla riga precedente [-1] a quella attiva e la stessa colonna.


Limitazioni del Registratore di macro
Si può osservare che la procedura di registrazione di una macro, anche se è un modo semplice e uno strumento utile per imparare e creare codici VBA, può essere utilizzato solo per i codici semplici e di base e non per la creazione di codici avanzati e procedure complesse a causa di alcune limitazioni. Durante la registrazione di una macro è possibile creare solo sotto-procedure e non le funzioni che restituiscono un valore, non è possibile allocare in memoria le informazioni durante la registrazione e non possono essere utilizzate le variabili, oppure utilizzare istruzioni condizionali quali If-Then, o utilizzare cicli Loop, o chiamare altre procedure o funzioni. Un codice di una macro registrata è di solito inflessibile e non è il più efficace, anzi necessita sempre di una pulizia nelle linee di codice dalle informazioni inutili aggregate alla macro registrata.
___________________________________

- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale -
Alexsandra non è collegato