Articolo wiki
  • Questo articolo wiki è bloccato
Applicabile a 975 visualizzazioni

Excel - 8 cose da fare per evitare *problemi* - VBA

Livello tecnico : Base

Riepilogo

Livello tecnico: Conoscenza di base di Visual Basic for Applications Si applica a: Excel (97/2000/2002(XP)/2003/2007/2010/2013)

Dettagli

NOTA. Gli esempi ed il codice sono forniti *così come sono* e l’autore declina ogni responsabilità per un loro uso scorretto. Utilizzate gli esempi forniti o file di prova per i vostri test. La correzione delle eccezioni (errori) e il controllo del tipo di dati inserito è solo parziale. I file vogliono essere un semplice esempio che illustra come sia possibile automatizzare Excel e sono forniti solo a scopo dimostrativo.

Situazione.

Come evitare gli errori più comuni nell'automatizzazione dei file di Excel.

1) Fare sempre una copia del file da modificare

Non fidatevi delle vostre conoscenze del vb di Excel. Quando lavorate alla modifica di un file, fatene sempre una copia e lavorate con quella. Ad ogni step di implementazione del codice che funziona come vi aspettate, salvate e fate una nuova copia del file. E via così. Meglio eliminare 10 vecchie copie, che avere un file inservibile o con una serie di modifiche che non sono quelle che volevamo. Tornare indietro costa tempo e non sempre si torna esattamente da dove si era partiti.

2) Rendere obbligatoria la dichiarazione delle variabili

Fin dai tempi del caro vecchio Visual Basic (il tool per creare programmi) non era spuntata di default la dichiarazione obbligatoria delle variabili . Questo nelle intenzioni avrebbe dovuto semplificare l'utilizzo del linguaggio Visual Basic, ma in effetti porta alla creazione di codice non sicuro e incontrollato.

Per attivare la dichiarazione obbligatoria delle variabili:

  • ALT+F11 per visualizzare l'editor del VB di Excel
  • Strumenti
  • Opzioni
  • Scheda Editor
  • Mettere la spunta a Dichiarazione di variabili obbligatoria
  • Ok

Figura 1: La finestra Ozioni con la spunta a Dichiarazione di variabili obbligatoria.

Da questo momento in poi in ogni modulo di codice verrà aggiunta la dichiarazione Option Explicit che vi costringerà a dichiarare le variabili prima di poterle utilizzare (ATTENZIONE, NON nei moduli dei progetti creati prima di effettuare questa procedura).

Figura 2: La dichiarazione Option Explicit all'inizio del modulo di codice e l'errore di variabile non definita che si ottine eseguendo la Sub m_2(). La Sub m_1() non da invece nessun errore in quanto la variabile è correttamente dichiarata.

3) Tipizzare le variabili

Il passo successivo alla dichiarazione delle variabili è la loro tipizzazione. Più di mille parole, valgono alcuni esempi. Questa dichiarazione:

Dim MiaVariabile

fa si che la variabile sia di tipo Variant, possa cioè contenere qualsiasi tipo di dato: una stringa di testo, un numero, una data. Questo è da evitare in quanto non è possibile avere il controllo del contenuto della variabile. Sono davvero pochi i casi nei quali si necessita di una variabile del tipo Variant e anche in quei casi è sempre bene esplicitarlo nella dichiarazione:

Dim MiaVariabile As Variant

Le variabili vanno quindi tipizzate, cioè va dichiarato quale tipo di dato conterranno:

Dim MiaVariabile As String   (per una variabile che conterrà tringhe di testo)

Dim MiaVariabile As Long     (per una variabile che conterrà valori numerici interi)

Dim MiaVariabile As Date    (per una variabile che conterrà una data)

ecc.

Qui sotto un esempio in m_1() di una dichiarazione di variabile di tipo Variant che consente di inserire qualsiasi valore e un esempio in m_2() di una dichiarazione tipizzata che restituisce errore se il valore che inseriamo nella variabile non corrisponde a quello dichiarato:

Figura 3: La Sub m_2() restituisce un errore perché il tipo che cerchiamo di inserire nella variabile è una String e non un Long come dichiarato. Questo ci consente di controllare il tipo di valore che noi o l'utente cerchiamo di inserire nella variabile. La Sub m_1() non da errori ma non ci permette nessun tipo di controllo sul contenuto della variabile.

4) Utilizzare nomi significativi per macro, funzioni, variabili, costanti e oggetti (UserForm, controlli, moduli, ecc.)

Abituiamoci a dare nomi significativi a tutto quello che abbiamo nel nostro progetto. Questo ci aiuterà se dovremo poi tornare sul codice per modificarlo e renderà più chiaro cosa contiene una variabile, esegue una macro o controllo. Le due macro qui sotto fanno la stessa cosa, ma la seconda (oltre ad utilizzare la programmazione ad oggetti di cui parleremo dopo) ha nomi significativi per le variabili e per la macro:

5) Public e Private

Definite la visibilità delle vostre Sub e/o Function. Se non mettete nulla davanti a Sub o a Function, la routine verrà considerata come Public e quindi sarà visibile anche dall'esterno del modulo di codice che la contiene. Dov'è il problema, direte voi, non mettiamola e mettiamo solo Private se vogliamo che la visibilità della Sub/Function sia confinata al modulo di codice che la contiene. Il mio consiglio è di specificare sempre se la routine è Public o Private. Tutti gli altri linguaggi di programmazione considerano la routine Private se manca la dichiarazione e obbligano a definirla il Public se si vuole che sia visibile dall'esterno. Insomma, vb si comporta al contrario di tutti gli altri linguaggi. Quindi visto che prima o poi passerete ad altri linguaggi per automatizzare le versioni future di Office, obbligatevi a mettere sempre lo stato di visibilità delle vostre routine.

6) Programmazione ad oggetti

Trovate un intero Wiki qui:

C'è poco da aggiungere. Sempre e solo programmazione ad oggetti.

7) Commenti

Commentate, anche diffusamente, il vostro codice. Nomi significativi e commenti fanno si che, passato tanto tempo, il vostro codice rimanga comprensibile. E lo sia anche per chi non lo ha scritto... Qui sotto un esempio della stessa macro già vista al punto 4) con in più i commenti:

8) Testate a fondo il codice

Non limitatevi ad un semplice test! Provate e riprovate ogni singola routine con il passo passo (tasto F8). Il codice potrebbe essere eseguito con attivi dati, una cella, un foglio, un file differenti da quelli che lo sono al momento del test. Ad evitare errori vi aiuta la programmazione ad oggetti (vedi il punto 6) e l'utilizzo degli strumenti di debug che sarà oggetto di un prossimo articolo..

Conclusioni.

Quanto sopra aiuta ad evitare gli errori/problemi più comuni quando scriviamo codice vb per i nostri file di Excel.

Riferimenti.

Per chi non avesse mai utilizzato il VBA di Excel e volesse provare, un aiuto qui:

Commenti.

Sono graditi i tuoi commenti a questo articolo Wiki e, se lo ritieni interessante, per favore spunta la voce : E' stato utile all'inizio della pagina.

Grazie.

NOTA. Excel non dispone nativamente di procedure assolutamente sicure per impedire la visualizzazione e la modifica del codice vb e/o per la protezione dei fogli. E’ una cosa da tenere sempre presente quando si distribuiscono file con contenuti ritenuti delicati. Ricordate anche che è possibile lanciare il file di Excel senza che vengano eseguite le macro.

Risorse.


 Avvio Pulito di Windows
(courtesy of Microsoft MVP Franco Leuzzi)

Computer infettato da malware (courtesy of Microsoft MVP Vincenzo Di Russo)

Commenti (4)

avanzamento