Accedi per seguire   
Seguaci 0
Alexsandra

Vba : Gestione Degli Errori - Metodi E Proprietà

1 messaggio in questa discussione

Gestione degli errori - Metodi e proprietà

Continuiamo il nostro percorso nell'apprendimento e conoscenza delle basi del linguaggio VBA, ma prima di addentrarci nell'argomento vorrei aprire una piccola parentesi che ci servirà comunque nel proseguo del nostro corso per presentarvi questo linguaggio che in seguito amplieremo, per ora ci limiteremo ad affrontare passo passo i problemi che potete incontrare nella personalizzazione dei vostri file Excel e in questa lezione parleremo del debug dell'applicazione ossia del controllo degli errori nell'esecuzione del codice.Iniziamo ora un percorso che toccherà i vari aspetti e problematiche che potete trovare affrontando di primo impatto il VBA ed il suo editor, cercherò di portarvi a conoscenza dei vari problemi che potete incontrare e come risolverli.

Un altro aspetto del VBA è il suo editor ed affrontare la gestione degli errori, è molto frequente, anche per chi conosce bene il VBA, commettere degli errori, per la maggior parte sono dovuti ad errori di digitazione, o ad errori di distrazione, vediamo come dobbiamo comportarci in questi casi, nella lezione precedente abbiamo visto come entrare nell'editor, non abbiamo ancora conosciuto come gestire un errore.

Ora ci aiuteremo con degli esempi, per esporvi il percorso da seguire per la risoluzione degli errori all'interno dell'editor, lo scopo di questa lezione è proprio quello di mettervi in condizione di usare l'editor di VBA e riuscire ad interpretare i suoi messaggi e gli errori che vi può rimandare.

Per qualsiasi dubbio potete chiedere chiarimenti nell'apposita sezione, detto questo ora ritorniamo al Visual Basic Editor per spiegare come comportarsi ed agire nei casi in cui si presenti un errore inaspettato, cerchiamo ora con qualche piccolo esempio di capire come aggirare l'errore, facciamo un esempio di codice e posizioniamo il cursore alla fine dell'ultima riga di una ruotine qualsiasi che abbiamo scritto e premiamo due volte Invio, si creerà uno spazio dopo l'ultima riga ed in tale posizione proviamo ad inserire il seguente codice:

Sub prova()
Sheets("Foglio11").Range("F5").Select
End Sub

il cui significato è: vai nel Foglio 11 di questa cartella e seleziona (Select) la cella F5 Range("F5").

Tornando ad Excel (basta cliccare sulla prima icona col simbolo di Excel in alto a sinistra) e mandando in esecuzione la macro (premere ALT+F8, selezionare il nome della macro e poi Esegui) succede che ci compare un avviso come quello sotto riportato

%25232old_01.png Fig. 1

Come si può intuire dal testo si tratta di un errore generato dal codice, se premiamo sul pulsante Debug ci verrà automaticamente aperto l'editor di VBA e verremo riportati nella routine (o Sub) che lo ha causato

%25232old_02.png Fig. 2

Nella figura sopra riportata potrete notare che la riga di codice che ha causato l'errore è già evidenziata in giallo, questo ci facilita notevolmente le cose, abbiamo già individuato l'errore e possiamo così intervenire e correggere il codice, tuttavia l'errore ha bloccato l'esecuzione della macro e per poter continuare ad operare dobbiamo ripristinare l'editor (cioè sbloccarlo) e rimediare all'errore. Per eseguire questa operazione basta premere sul pulsante blu in alto nella barra degli strumenti contrassegnato dalla freccia rossa, il quale interrompe il debug del codice e ripristina l'uso dell'editor.

Spieghiamo ora la natura dell'errore volontariamente provocato: nella nostra cartella di lavoro, l'errore è stato causato per il semplice fatto che non esiste all'interno della stessa un foglio denominato Foglio11, per cui VBA ha evidenziato questa situazione con quel codice un po' sibillino ed interrompendo l'esecuzione della macro, in pratica non ha trovato il percorso che gli abbiamo indicato

Programmazione ad Oggetti: Metodi e Proprietà

Continuiamo con l'esposizione dei vari metodi e funzioni che possiamo usare tramite il VBA, tenendo ben presente che il linguaggio VBA è orientato agli oggetti. Ma cosa significa questa espressione? Si riferisce ad una tecnica di programmazione ormai invalsa in questi ultimi anni, tutto il mondo intorno a noi è pieno di oggetti: la tastiera, il mouse, lo schermo e così via, quello che contraddistingue un oggetto è una serie di caratteristiche o Proprietà.

Ad esempio il mouse è dotato di una rotellina e di due tasti, un oggetto oltre alle proprietà possiede anche dei Metodi ossia delle funzioni attraverso i quali esercitare delle azioni. Nell'esempio appena citato, (quello del mouse) tenendo premuto il tasto sinistro e facendo scorrere il mouse si seleziona una o più parole di una riga di testo. Riferendoci alla nostra cartella di lavoro possiamo dire che essa è costituita da oggetti di varia natura, come gli oggetti grafici o i controlli (finestre di dialogo, pulsanti ecc.) incollati su un foglio, ma non è questa la peculiarità di un foglio elettronico la cui ossatura è costituita, partendo dal livello più basso, da:

- celle

- intervalli

- fogli

- cartelle di lavoro

Se osserviamo questo insieme di oggetti come un albero genealogico il capostipite, o il culmine, spetta all'oggetto, denominato Application, che rappresenta, tutti gli Oggetti di Excel. Si tratta appunto di Excel stesso. Proseguendo nella discesa genealogica troveremo i seguenti oggetti :

- L'oggetto Workbook : è la cartella di lavoro (cioè il nostro file)

- L'oggetto Worksheet : è il foglio di lavoro (Foglio1, Foglio2 ecc...)

- L'oggetto Range : è un intervallo di celle (A1: B12, C1: D12, ecc...)

Sintatticamente possiamo affermare che ciascun oggetto fa parte di una famiglia o classe e l'accesso al singolo membro di ciascuna classe si effettua attraverso metodi, "pluralistici", ai quali corrispondono insiemi di oggetti omogenei quali: Workbooks, Worksheet, Range e Cells, inoltre i membri più elevati si possono omettere nel caso che il soggetto sia attivo; vedremo meglio questo passaggio fra poche righe.

Fin qui abbiamo delineato i componenti principali cercando di esporre come vengono interpretati dal Visual Basic applicato al foglio elettronico, ma l'obiettivo vero è quello di focalizzare gli oggetti che formano l'ossatura, il nucleo di uno spreadsheet (foglio di lavoro), al cui centro, vi sono intervalli e celle con il loro contenuto di dati da elaborare o formule di legame; il loro inquadramento nel mondo Visual Basic è fondamentale e aiuterà a capire meglio tutto il resto, vediamo di interpretare quanto appena affermato usando il Visual Basic. Con queste sintassi

Workbooks("Lezione2.xls") e Worksheets("Foglio1")

si individuano rispettivamente la cartella e il foglio di lavoro (notare i loro nomi virgolettati entro le parentesi), ma dobbiamo però tenere presente che un elemento può anche venire individuato tramite un indice, il quale può essere o il numero di ordine o il nome fra virgolette, per capire meglio il concetto di indice possiamo dire che la sintassi Workbooks(2) e Workbooks("Lezione2.xls") puntano entrambe alla stessa cartella [Lezione2.xls] a patto che questa sia la seconda fra quelle aperte contemporaneamente da Excel.

Infatti se abbiamo solo la cartella Lezione2.xls aperta, la sintassi esatta diventa Workbooks(1)

A questo punto è abbastanza chiaro che l'indice che usiamo fra parentesi nell'oggetto Workbooks varia ed è strettamente legato al numero di cartelle aperte nel momento dell'esecuzione di questa istruzione, pertanto possiamo far notare che è possibile scrivere questa istruzione in tre diversi modi:

- Application.Workbooks(1).Worksheets(1).Range("A1:B10")

- Application.Workbooks("Lezione2.xls").Worksheets(1).Range("A1:B10")

- Application.Workbooks("Lezione2.xls").Worksheets("Foglio1".Range("A1:B10")

Ricordate che poco sopra abbiamo però affermato che i membri più elevati si possono omettere quando sono attivi, per cui:

- Se abbiamo Excel aperto

- Se la cartella Lezione2.xls è aperta

- Se infine ci troviamo nel Foglio1

Possiamo ridurre tutto il listato ad un semplice

Range("A1:B10")

In caso contrario credo che sia abbastanza chiaro come agire usando gli indici per individuare il nostro intervallo (o Range). Prestiamo inoltre attenzione alle proprietà "pluralistiche" che poco sopra abbiamo citato: le prime volte è facile scordarsi del plurale, scrivendo Workbook("Lezione2.xls") anziché Workbooks ("Lezione2.xls") oppure Worksheet("Foglio1") invece di Worksheets ("Foglio1").

Vediamo qualche esempio di codice da applicare a quanto esposto finora, ma soprattutto vediamo come automatizzare l'esecuzione di routine creando un pulsante, ad esempio apriamo la nostra cartella ("Lezione2.xls") e rientriamo nel Visual Basic Editor. Questa volta scriveremo noi una macro direttamente senza affidarci all'aiuto del Registratore di macro utilizzato nella precedente lezione. Ponendoci al di sotto dell'ultima riga della macro precedente (basta porre il cursore alla fine di End Sub e premere una o due volte Invio), scriviamo il seguente codice

Sub Nascondi_Foglio()
Worksheets(2).Visible = False
MsgBox "Il Foglio 2 è sparito"
End Sub 

Commentiamo questo codice:

- la routine inizia con Sub (seguito dal nome della routine, le macro sono tutte sub-routine) e termina con End Sub

- l'oggetto Worksheets(2) ossia il Foglio 2, è seguito da una sua proprietà che si evidenzia con .visible, si richiama perciò la proprietà visible che consente al foglio di essere visibile o meno a seconda del fatto che tale proprietà sia dichiarata vera o falsa (in questo caso = False indica che il foglio sarà nascosto).

- MsgBox "Il Foglio 2 è sparito" è invece una funzione di VBA che permette di mostrare all'utente un messaggio che nella sua forma più semplice riporta un messaggio di avviso per l'utente (il testo racchiuso fra virgolette) ed un bottone di OK necessario per la sua chiusura. Torniamo ora ad Excel e facciamo click col destro del mouse sulla barra degli strumenti, ci comparirà un box con delle voci, scegliamo Moduli

%25232old_03.png Fig. 3

Ci comparirà un nuova barra flottante che possiamo ancorare alle altre barre degli strumenti semplicemente trascinandocela.

%25232old_04.png Fig. 4

Premiamo sul pulsante evidenziato dal riquadro rosso e poi spostandoci sul foglio di lavoro teniamo premuto il pulsante di sinistra del mouse, trasciniamolo fino a raggiungere le dimensioni desiderate ed al rilascio ci comparirà il nostro pulsante. Contestualmente si aprirà anche la finestra per assegnare la macro al pulsante appena creato

%25232old_05.png Fig. 5

Stessa operazione e identico risultato si può ottenere inserendo un'immagine sul foglio (si dovrà attivare la barra degli strumenti Disegno) e quindi tramite il solito menu contestuale ottenuto cliccando col destro sull'immagine, assegnargli la macro, Il pulsante ottenuto sarà simile al seguente:

%25232old_06.png Fig. 6

Possiamo ridimensionare il pulsante, editarne il testo, cambiarne i caratteri ecc ... facendo click sopra al pulsante stesso col pulsante destro del mouse e scegliere, tra le voci del menù contestuale che compare, quella di cui abbiamo bisogno. Se invece vogliamo spostare il pulsante, facciamo ancora click col destro del mouse, sparirà il menù contestuale e rimarrà evidenziato il pulsante

%25232old_07.png Fig. 7

Possiamo allora spostarlo a piacimento e ridimensionarlo trascinandolo negli angoli. Possiamo ora mandare in esecuzione la macro stessa semplicemente cliccando sul pulsante appena creato, adesso il foglio è sparito, come facciamo a farlo riapparire? Basta creare una nuova macro che assoceremo ad un altro pulsante, con le stesse modalità di costruzione della precedente:

Sub Mostra_Foglio()
Worksheets(2).Visible = True
MsgBox "Il Foglio 2 è Ricomparso"
End Sub 

I commenti sono superflui perchè il codice è esattamente identico al precedente solo che la proprietà visible è stata ora posta a True (Vero) ed in tal caso il Foglio 2 riappare, esaminate attentamente i codici e quanto esposto, e nella prossima lezione ci addentreremo più profondamente nel Visual Basic.

Come avete avuto modo di vedere abbiamo accennato anche a qualche esempio di codice, è molto importante riuscire a capire i legami fra i vari membri che legano la struttura del nostro file, ma è altrettanto importante non correre subito ad esempi e file "preconfezionati", è comprensibile la noia che le prime lezioni possano far nascere, ma per i neofiti che si avvicinano a questo linguaggio, sono fondamentali.

Modificato da Alexsandra

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Accedi per seguire   
Seguaci 0