VBA_Excel_dispense_parziale_v004[1].pdf

download VBA_Excel_dispense_parziale_v004[1].pdf

of 57

Transcript of VBA_Excel_dispense_parziale_v004[1].pdf

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    1/57

    Uso avanzato di MS Excel 1

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    2/57

    Uso avanzato di MS Excel 2

    LE BASI DEL FOGLIO ELETTRONICO EXCEL ............ ............. ............ .............. ............. .............. ...........1

    LE BASI DEL FOGLIO ELETTRONICO EXCEL ............. ............. ............ .............. ............. ............ .............4

    LE BASI DEL FOGLIO ELETTRONICO EXCEL ............. ............. ............ .............. ............. ............ .............4

    GLI ELEMENTI FONDAMENTALI ............................................................................................................................4 LE FORMULE ........................................................................................................................................................4 RIFERIMENTI........................................................................................................................................................5 NOMI ...................................................................................................................................................................6 TRIDIMENSIONALIT ...........................................................................................................................................6RIFERIMENTI AD ALTRE CARTELLE ......................................................................................................................6LE FUNZIONI ........................................................................................................................................................7

    Funzioni di base ............ .............. ............. ............ .............. ............. .............. ............. ............. ............. ..........7Funzioni logiche.... ............ .............. ............. .............. ............. .............. ............. .............. ............. .............. ...7Funzione di ricerca verticale ................... ............ .............. ............. .............. ............. ............. ............. ..........9Funzioni del tempo............ .............. ............. .............. ............. ............ .............. ............. .............. ............ ......9

    VISUAL BASIC PER APPLICAZIONI............................................................................................................10

    PREMESSE..........................................................................................................................................................10 ESEMPI BREVI ....................................................................................................................................................10

    Esempio 1 Creare una macro dalleditor VBA ................ .............. ............. .............. ............. .............. .....10Esempio 2 La funzione MsgBox...............................................................................................................11 Esempio 2 Personalizzazione della barra del titolo di Excel ............. ............ ............... ............ ............... .12Esempio 3 Individuazione di colonne nascoste .............. ............. .............. ............. .............. ............. ........12Esempio 4 Eliminazione di un foglio.... ............. .............. ............. .............. ............. .............. ............ ........12Esempio 5 Protezione di una macro............ ............. .............. ............. ............ .............. ............. .............. .13Esempio 6 Esecuzione automatica di una macro allapertura.............. ............. .............. ............. ............ 13Esempio 7 Conteggio del numero di righe, colonne e fogli ................... ............. .............. ............. ...........13Esempio 8 Copia di dati ............ ............... ............ .............. ............. .............. ............. ............ .............. .....14Esempio 9 Inserimento della data corrente.............. .............. ............. ............ ............... ............ .............. .14Esempio 10 Controllo del contenuto di una cella ....................... ............... ............ ............... ............ ........14Esempio 11 Controllo della posizione di una cella.............. .............. ............. .............. ............. .............. .15Esempio 12 Eliminazione delle celle vuote ........... ............... .............. ............. .............. ............. .............. .15Esempio 13 Funzioni............. .............. ............. .............. ............. ............ ............... ............ ............ ...........15

    LE BASI DI VBA.................................................................................................................................................17 LEDITOR DI VISUAL BASIC ...............................................................................................................................19

    Attivazione di VBE ............ ............ .............. ............. .............. ............. .............. ............. .............. .............. ..19Le finestre VBE ......... .............. ............. ............ .............. ............. .............. ............. ............. ............. ............ 20GESTIONE PROGETTI ..........................................................................................................................................21

    Aggiungere un nuovo modulo VBA ............. ............... ............... ............... .............. ............... ............ ...........22Rimuovere un modulo VBA ..................... ............. .............. ............. .............. ............. .............. ............ ........23Esportare e importare oggetti .............. .............. ............. ............... .............. ............. ............... ............ ........23

    LE FINESTRE DI CODICE......................................................................................................................................23 Minimizzare e massimizzare finestre...... ............. ............ .............. ............. .............. ............. ............ ...........23Mantenimento del codice VBA ............. .............. ............. .............. ............. .............. ............. ............ ...........24Entrando nel codice VBA ............. .............. ............. .............. ............. .............. ............. ............ .............. .....25

    PERSONALIZZARE LAMBIENTE VBE.................................................................................................................30La scheda Editor ....................... ............ .............. .............. ............. ............ .............. ............. ............ ...........30La scheda Formato editor ............ ............... ............ .............. ............. .............. ............. ............ .............. .....33La scheda Generale............. ............. ............ .............. ............. .............. ............ ............. .............. ............ ....34

    La scheda Ancoraggio............. ............. ............ .............. ............. .............. ............ .............. ............. ............ 34OGGETTI E COLLEZIONI .....................................................................................................................................35 Loggetto gerarchia................. ............. .............. ............ ............. .............. ............. ............. ............. ............ 35Le collezioni ........... .............. ............. .............. ............. .............. ............ .............. ............ ............. .............. .36Riferimento alloggetto ........... ............. ............... .............. ............. .............. ............. .............. ............. ........36

    PROPRIET E METODI ........................................................................................................................................37 Propriet degli oggetti ............. ............ .............. ............. .............. ............. .............. ............. ............ ...........37Metodi degli oggetti ................. .............. ............. ............ .............. ............. .............. ............. ............ ...........38

    GLI OGGETTI RANGE..........................................................................................................................................38 La propriet Range ....................... .............. ............ .............. ............. .............. ............. ............ .............. .....38La propriet celle ............ ............. .............. ............. .............. ............. .............. ............. ............ .............. .....40

    COSA SAPERE DEGLI OGGETTI ............................................................................................................................41

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    3/57

    Uso avanzato di MS Excel 3

    Concetti essenziali da ricordare...................................................................................................................41

    VBA: PROGRAMMAZIONE FONDAMENTALE .............. ............. ............ .............. ............. .............. .........43

    ELEMENTI DI LINGUAGGIO VBA: UNA PANORAMICA.........................................................................................43 COMMENTI.........................................................................................................................................................43

    Ispezione del codice VBA ............. .............. ............. .............. ............. .............. ............. ............ .............. .....44VARIABILI, TIPI DI DATI E COSTANTI ..................................................................................................................46

    Definizione del tipo di dati ............ ............... ............ ............... .............. ............. .............. ............ ............ ....47Dichiarazione di variabili ............ .............. ............. .............. ............. ............ .............. ............. .............. .....49Scopo delle variabili.....................................................................................................................................50Lavorare con le costanti.......... ............. ............ .............. ............. .............. ............. .............. ............ ............ 50Le stringhe......... ............ .............. ............. .............. ............. ............ .............. ............. ............. ............. ........50Le date.. ............. ............ .............. ............. .............. ............. ............ .............. ............. ............. ............. ........50

    ESPRESSIONI ASSEGNATE...................................................................................................................................50 SCHIERAMENTO .................................................................................................................................................50

    Esprimere uno schieramento........ .............. ............. .............. ............. .............. ............. ............ .............. .....50Dichiarare schieramenti multidimensionali.... .............. ............. .............. ............. .............. ............. ............ 50

    VARIABILI OGGETTO ..........................................................................................................................................50 TIPI DI DATI AD USO DEFINITO............................................................................................................................50 FUNZIONI DI COSTRUZIONE ................................................................................................................................50 MANIPOLARE OGGETTI E COLLEZIONI ................................................................................................................50

    Costruzioni With-End With ..........................................................................................................................50Costruzioni Each-Next .................................................................................................................................50

    CONTROLLO DELLESECUZIONE.........................................................................................................................50 Espressione GoTo ................. .............. ............. .............. ............. .............. ............ .............. ............. ............ 50Costruzione If-Then......................................................................................................................................50Costruzioni Select Case................................................................................................................................50Looping di blocchi di istruzioni.............. ............. ............ .............. ............. .............. ............. ............ ...........50

    USO DI COMPONENTI ESTERNE .................................................................................................................50

    LETTURA DI FILES METEO CON PAR_CSDLL.DLL.............................................................................................50 CALCOLO EVAPOTRASPIRAZIONE CON ET_CSDLL.DLL....................................................................................53

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    4/57

    Uso avanzato di MS Excel 4

    Le basi del foglio elettronico Excel

    Gli elementi fondamentali

    I file di Excel hanno estensione XLSe sono denominati Cartelle di lavoro, chea loro volta contengono pi Fogli. Un foglio di Excel suddiviso in righe(65536) e colonne (256). Lelemento fondamentale del foglio di lavoro costituito dalla cella, a sua volta caratterizzata dal riferimentoche la individua.Ad esempio, A1 la prima cella, C3 la cella posta allincrocio tra la terzacolonna (C) e la terza riga (3).Excel accetta due tipi di dati in una cella: le costantie le formule.

    Le costanti sono suddivise in tre categorie principali

    o Valori numerici: 57, 9%, 125000o Testi: azoto lisciviato, N. 20, outputo Data e ora: 18/11/2002, 21.00

    o Valori logici: FALSO, VEROo Valori di errore: #DIV/0!, #NOME?, #RIF!, #VALORE!

    Le formule sono una serie di istruzioni, che possono essere composte

    da costanti, o da riferimenti a costanti oppure da operatori aritmetici, attead ottenere dei risultati. Laddizione un esempio di formula.

    Sulle celle si possono fare diverse operazioni: selezione celle, cancellazionecontenuto, modifica contenuto, formattazione contenuto, trascinamentocontenuto, dimensionamento, inserimento celle, eliminazione celle, stampacontenuto.Anche i fogli di lavoro permettono diverse operazioni: movimento tra fogli,aggiunta fogli, eliminazione fogli, rinomina fogli, spostamento fogli,

    duplicazione fogli, stampa contenuto, lavoro simultaneo su pi fogli.Questultima operazione definisce la propriet della tridimensionalit (vedereparagrafo Tridimensionalit).

    Le formule

    Le formule sono espressioni aritmetiche del tipo 10+5.Una formula viene digitata in una cella nella forma del tipo: =10+5.Il segno uguale segnala al programma che i caratteri seguenti danno vita a unaformula.Dopo la conferma (tasto Invio) la cella visualizza il valore 15.

    Gli OPERATORI ARITMETICI - noti come PI, MENO, PER, DIVISO in unPC assumono la seguente forma: +, -, *, /.Lespressione: =10+5*2 d come risultato 20. Lespressione: =(10+5)*2dcome risultato 30.Una formula pu anche gestire valori di testo. Se la cella A1contiene il nomeModello, introducendo la formula =A1 in unaltra cella, anchessa visualizzerModello. Questo un valore stringa. possibile concatenare (unire) diversi valori di testo usando loperatorespaziale & (e commerciale). Avendo in A1 Modello e in B1 colturale,introducendo in unaltra cella la formula =A1&B1 si ottiene Modellocolturale.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    5/57

    Uso avanzato di MS Excel 5

    Per inserire uno spazio tra sostantivo e aggettivo, la formula va modificatacome: =A1& &B1. Questultima formula usa due operatori diconcatenamento (&) e una costante di stringa, cio lo spazio racchiuso tra ledoppie virgolette.Loperatore & pu concatenare anche celle contenenti valori numerici. Se lacella A1 contiene 10e la cella B15, inserendo la formula =A1&B1 in unaltra

    cella si ottiene 105. Questo valore risulta trasformato in un valore di testo, mapu essere usato per qualsiasi operazione matematica.Quando le formule diventano complesse pu diventare difficile capire a qualicelle facciano riferimento. In aiuto viene lopzione Verifica formule, richiamabiledal menu Visualizza/Barre degli strumenti. Posizionandosi su di una cellacontenente una formula e cliccando sul primo pulsante, Individua precedenti,sono indicate con delle frecce tutte le celle a cui la formula fa riferimento.Posizionandosi su una cella contenente una costante (valore) e cliccando sulterzo pulsante, Individua dipendenti, se alla costante fa riferimento unaformula, la freccia indica la cella contenente la fomula.

    RiferimentiNelluso corretto di Excel le formule non devono contenere quasi mai i valori,ma i riferimenti ai valori. Si introducano nella cella C1 il valore 10, in C2 ilvalore 5, infine in C3 il valore 2. Digitando in unaltra cella la formula=C1+C2*C3 si ottiene il valore 20. Questa modalit permette di variare ilrisultato al variare dei valori nelle celle a cui la cella del risultato fa riferimento.La variazione automatica del risultato avviene se in menu Strumenti, voceOpzioni, scheda Calcolo abilitata lopzione Ricalcolo automatico (di default).Altrimenti si pu disabilitare il ricalcolo automatico e rendere attivo il Ricalcolomanuale. In questo caso, una volta variati gli input della formula, occorrepremere F9 per aggiornare il risultato.

    In base alloperazione che si desidera eseguire, possibile scegliere tra iriferimenti relativi, mistio assoluti. Se la cella B1contiene il valore 10 e la cellaA2contiene la formula =B1, in A2 riportato il valore 10. Questo un esempiodi riferimento relativo. Quando si trascina o copia una formula che utilizza iriferimenti relativi, i riferimenti della formula trascinata o incollata vengonomodificati automaticamente per adeguarsi alla nuova posizione della formula.Se A2contiene la formula =B1, B1contiene 10, B2contiene 15, trascinando ocopiando la formula di A2in A3, questa mostra 15.I riferimenti assoluti invece non vengono adeguati durante il trascinamento o lacopia di una formula in una cella differente. Se in A3 contenuto 10, in C35, inC42, e in B1la formula =A3*C3, B1mostra 50. Trascinando la cella B1in B2si ottiene 0, ovvero il risultato della formula =A4*C4. Questo trascinamentorappresenta un errore. Per bloccare il riferimento ad A3occorre trasformare laformula della cella B1in =$A$3*C4. Il risultato in B2sar cos 20.Un riferimento assoluto del tipo =$A$3impedisce ladeguamento dei riferimentisia che si operi un trascinamento verticale che orizzontale. I riferimenti misticonsentono di bloccare verticalmente, ma non orizzontalmente, o viceversa.Nella formula =A$3*$C5con =A$3si permettono gli adeguamenti orizzontali,cio il cambiamento di colonna e si bloccano gli spostamenti verticali, cio icambi di riga. Il riferimento $C5opera esattamente il contrario.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    6/57

    Uso avanzato di MS Excel 6

    Nomi

    possibile utilizzare un nome per rappresentare una formula o un valorecostante tramite la Casella del nome, a sinistra della Barra della formula.Digitare il nome desiderato e premere INVIO. Se si denominano Bob e Dilan lecelle C2e B4, che contengono i valori 10 e 5, si pu ottenere il risultato dellasomma in A1, digitando in questa cella la formula =Bob+Dilan. Fare uso deinomi equivale allutilizzo di un riferimento assoluto. Per rimuovere un nome dicella, ad esempio Dilan, si opera dal menu Inserisci/Nome, voce Definiscinome, dalla quale si seleziona Dilan e poi si clicca sul pulsante Elimina.Un nome, oltre che a una cella pu essere attribuito anche a una costante. Unesempio il calcolo in Euro. Dal menu Inserisci/Nome si sceglie la voceDefinisci. Nella casella Nomi della cartella di lavoro: si digita euro e si cliccaAggiungi, mentre nella casella Riferito a:si digita =1936.27 e si conferma conOK. Se ora in una cella qualsiasi si digita =euro, viene restituito 1936.27, se sidigita =10*eurosi ottiene 19362.7, ecc.La tecnica di attribuire i nomi alle celle pu anche riguardare intervalli di celle.

    Tridimensionalit

    La tridimensionalit una operazione tipica di Excel. Word infatti unprogramma bidimensionale: i suoi documenti hanno sempre uno sviluppoorizzontale e verticale. Diversamente Excel si pu sviluppare anche inprofondit, cio su pi fogli contemporaneamente. Tra le implicazioni dellatridimensionalitc il consolidamento dei dati.Si nominino 12 fogli con i riferimenti ai mesi dellanno (Gen, Feb, Mar, ) piun foglio di riepilogo. Ad esempio se di un modello di auto sono stati venduti 10esemplari a gennaio, 15 a febbraio, 5 a dicembre, si vuole ottenere il totaledelle vendite nel foglio riepilogativo. Il numero di vetture riportato nella cellaF10 dei tre fogli mensili. Per ottenere il totale nella cella B3 del foglio

    riepilogativo, si procede come segue: posizionarsi nella cella B3del foglio riepilogativo e digitare =; attivare il foglio Gene cliccare sulla cella F10; premere il tasto + , attivare il foglio Febe poi la cella F10; premere il tasto + , attivare il foglio Dice poi la cella F10;

    finiti i fogli dei quali si vogliono sommare i valori, si confermalimmissione della formula con un INVIO.

    Il risultato ottenuto nella cella B3, 30, corrisponde alla formula:=Gen!F10+Feb!10+Dic!10. Il punto esclamativo permette a Excel di capireche il nome che lo precede appartiene a un foglio di lavoro.Se si modifica il valore in F10del foglio Gen, da 10 a 20, il risultato in B3del

    foglio riepilogativo diventa 40. La possibilit di creare formule che operano supi fogli prende il nome di Consolidamento tridimensionale dei dati.

    Riferimenti ad altre cartelle

    Oltre ai fogli della cartella a cui appartengono, le formule possono fareriferimento ai fogli posti in cartelle diverse. Si hanno in questo caso i Riferimentiesterni. Se si lavora con una cartella posizionata sul Desktop per fareriferimento alla cella D3del foglio Filmsdi una seconda cartella di lavoro dalnome Elenco.xls, sempre collocata sul Desktop, si digita:

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    7/57

    Uso avanzato di MS Excel 7

    =[Elenco.xls]Films!D3. Dopo aver confermato la formula la sintassiviene adeguata con lintero percorso del file: ='C:\Documents andSettings\Administrator\Desktop\[Nuovo Foglio di lavoro diMicrosoft Excel.xls]Films'!$D$3. Ogni volta che si apre una cartelladi lavoro contenente riferimenti ad altre cartelle, viene chiesto di aggiornare omeno i collegamenti allaltra origine dei dati.

    Le funzioni

    Le funzioni sono formule predefinite che rendono pi veloci operazioni ripetitive(es., sommare il contenuto di pi celle) o pi facili operazioni complesse (es.,unanalisi statistica).La sintassi generale delle funzioni del tipo: =NomeFunzione(Argomenti).Anzich digitare direttamente una funzione in una cella si pu ricorrere agliautomatismi del comando Inserisci funzione, richiamabile dalla barra deglistrumenti Standard. Si tratta di una metodologia non molto efficiente ma checostituisce un potente strumento conoscitivo per esplorare e studiare la

    notevole quantit di funzioni messe a disposizioni da Excel.

    Funzioni di base

    La funzione SOMMA rappresenta uno degli elementi fondamentali di Excel.Volendo sommare nella cella A6le prime quattro celle della colonna A, si digitain A6: =SOMMA(A1:A4). Per sommare le prime quattro celle della colonna Aedella colonna Csi digita: =SOMMA(A1:A4;C1:C4). Per sommare tutti i numeripresenti nelle prime quattro celle delle colonne A, B e C si digita:=SOMMA(A1:C4). La funzione Somma serve anche ad addizionare valoricontenuti in fogli diversi. Se dodici fogli sono nominati con i riferimenti dei mesi(Gen, , Dic) e si volessero sommare i valori contenuti nella cella A1di tutti ifogli la formula diventa: =SOMMA(Gen:Dic!A1). Analogamente si possonosommare anche intervalli di celle di cartelle diverse. La funzione che segueeffettua la somma dellintervallo di celle A1:C3locato nel Foglio2dellla cartellaComuni.xls: =SOMMA([Comuni.xls]Foglio2!$A$1:$C$3).

    Le funzioni MAX, MIN, MEDIA sono le tre funzioni statistiche pi semplici. Lefunzioni =MAX(A1:C4), =MIN(A1:C4), MEDIA(A1:C4) restituiscono,rispettivamente, il valore massimo, minimo e medio dei valori contenuti nelleprime quattro celle delle colonne A, Be C.

    Altre due semplici funzioni statistiche sono MODA, che restituisce il valore pi

    ricorrente di un intervallo di dati, e MEDIANA, che restituisce il numero cheoccupa la posizione centrale di un insieme di numeri.

    Funzioni logiche

    La funzione SErappresenta uno degli elementi fondamentali di Excel e non sene pu prescindere volendo operare con VBA. Serve a mettere a confronto dueelementi, ovvero a eseguire un TEST CONDIZIONALE. Il risultato di un testcondizionale un valore logico VERO oppure FALSO. Ogni test condizionaleinclude almeno un Operatore di confronto.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    8/57

    Uso avanzato di MS Excel 8

    OPERATORI DI CONFRONTO

    Maggiore > Diverso Minore < Maggiore o uguale >=Uguale = Minore o uguale 20000,Procedere,Abbandonare) nella cella compare ladicitura Procedere se il valore di A1 superiore a 20000, altrimentiAbbandonare. Anzich restituire del testo si possono alloccorrenza usarenumeri o espressioni matematiche, ad esempio:=SE(A1>20000,A1+A1*10%;Abbandonare). In questo caso se lacondizione imposta vera, ad esempio il valore 30000, viene restituito ilvalore maggiorato del 10%, cio 33000.Altre funzioni logiche sono utili a sviluppare test condizionali complessi, cio E,O, NON, quasi sempre abbinate alla funzione SE.La funzione logica E ha la sintassi generale

    =E(Condizione1,Condizione2), che restituisce:

    =E(Vero,Vero) VERO=E(Vero,Falso) FALSO=E(Falso,Falso) FALSO

    Se si digita in A3=E(A1>5,A2>10), la cella restituisce VERO se le celle A1eA2contengono valori maggiori di 5 e 10. Se uno dei due numeri risulta minoreo uguale al valore con cui si confronta, il risultato diventa FALSO. Le condizionipossono essere incrementate oltre le due dellesempio.La funzione logica O la sintassi generale =O(Condizione1,Condizione2),che restituisce

    =O(Vero,Vero) VERO=O(Vero,Falso) VERO=O(Falso,Falso) FALSO

    Se si digita in A3=O(A1>5,A2>10), la cella restituisce VERO se almeno unadelle celle A1e A2contiene valori maggiori di quelli di confronto. Con Osolo seentrambe le condizioni danno esito negativo si ottiene il responso FALSO.La funzione logica NON nega una condizione. Se si digita=SE(NON(A1=6),Scarso,Bravo)si chiede alla funzione di restituire ilvalore Scarso se il valore della cella A1non 6.Se per essere promossi in una scuola occorre la media del 6 e un numero di

    assenze inferiore a 5, per ciascuno studente registrato in un foglio elettronico sipu impostare un test condizionale del tipo:=SE(E(C2>=6,D280,"Ottimo",SE(E(A1>50,A1

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    9/57

    Uso avanzato di MS Excel 9

    nidificazione della funzione SE inserendo al suo interno unaltra funzione SEcon lausilio della funzione E. La procedura ulteriormente espandibile, peresempio:=SE(A1>80,"Ottimo",SE(E(A1>50,A140,A1

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    10/57

    Uso avanzato di MS Excel 10

    Visual Basic per Applicazioni

    Premesse

    Molti programmatori non considerano lipotesi di programmare in BASIC. Il nomestesso (acronimo di Beginners All-purpose Symbolic Instruction Code) indica chenon un linguaggio professionale. BASIC venne sviluppato per la prima volta agliinizi degli anni 60 come metodologia per insegnare tecniche di programmazione astudenti universitari. Successivamente, BASIC ha preso piede velocemente ed ora disponibile in svariati linguaggi per molti tipi di computers.Allinizio BASIC era un interpretedi linguaggio con delle prestazioni particolarmentelente poich ogni linea di codice doveva essere interpretata prima di poter essereeseguita. I linguaggi pi moderni di BASIC permettono la compilazione del codice,risultando cos molto pi veloci.BASIC si guadagn piena stima nel 1991 quando la Microsoft realizz Visual Basic

    per Applicazioni (VBA), rendendo particolarmente semplice lo sviluppo di applicazioniper Windows. Visual Basic ha veramente molto poco in comune con le prime versionidi BASIC, nonostante BASIC sia il fondamento sul quale VBA stato costruito esviluppato.Con Excel 5, Visual Basic per Applicazioni stato per la prima volta reso disponibilesul mercato. VBA costituisce il miglior esempio di linguaggio disponibile nelleapplicazioni Microsoft e viene oggi incluso in tutte le applicazioni di Office 2002,perfino in applicazioni di altri produttori di software. Il VBA appartiene alla famiglia dellinguaggio di programmazione Visual Basic (VB), con cui condivide sintassi estruttura, ma da cui si differenzia per contenere gli oggetti peculiari di unaapplicazione Windows. Per esempio, il connubio Excel e VBA offre la possibilit dicreare potenti strumenti informativi completamente automatizzati utilizzando gli

    oggetti di un foglio elettronico. Infatti, in Excel esistono numerosi oggetti come fogli dilavoro, grafici, tabelle pivot, scenari, funzioni matematiche, finanziarie, ecc.Progressivamente (a partire da Office 97) il VBA stato esteso a tutte le applicazioniMicrosoft, in modo da diventare un unico linguaggio di programmazione nellaspecificit dei rispettivi ambienti di lavoro e favorire cos la sinergia tra diversiprogrammi (ad esempio tra Access ed Excel).

    Esempi brevi

    In questo capitolo vengono riportati alcuni brevi esempi sulluso di VBA. I concetti dibase sono qui solo accennati e saranno approfonditi nei capitoli successivi, doveesamineremo i rudimenti della programmazione in VBA. Lo scopo quindi soloquello di un primo approccio che consenta di vedere alcune funzionalit di Excelabitualmente ignorate dagli utenti.

    Esempio 1 Creare una macro dalleditor VBA

    Lapprendimento della sintassi di VBA semplificato dal Registratore di Macro diExcel. Per registrare una macro denominata Comunicare, selezionare dal menuStrumenti/Macro/ Macro):

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    11/57

    Uso avanzato di MS Excel 11

    Scrivete Comunicare nella finestra Nome macro: e quindi Crea. Si entranellambiente VBA, costituito da una finestra in cui riportato il codice con leistruzioni:

    Sub Comunicare()...

    End Sub

    Queste istruzioni definiscono una procedura, che include altre istruzioniprecedute da un apice (di colore verde). Sono commenti che possono esserecancellati. Nello spazio della Sub (prima di End Sub) si possono scrivere leistruzioni che interessano.Si ritorna al foglio di Excel e si inserisce unimmagine (ad esempio una clipart:Inserisci/Immagine/Clipart). Posizionando il puntatore del mouse sopra

    limmagine.e cliccando il tasto destro compare il menu contestuale dal quale sipu selezionare Assegna macro. Dalla finestra di dialogo che appare si puselezionare Comunicare e cliccare OK. Quando con il puntatore del mouse sipassa sopra limmagine compare una mano e cliccando viene eseguita lamacro (ovvero linsieme delle istruzioni in essa inserite). Fino a questo puntoabbiamo creato una macro, chiamata Comunicare, e questa macro (per oravuota) attivata dal un click sullimmagine posta sul foglio di lavoro.

    Esempio 2 La funzione MsgBox

    La funzione MsgBox utile a scrivere frasi.Inserire in una proceduraMsgBox "Ciao come stai"Per esempio:Sub Comunicare()

    MsgBox "Ciao come stai"End Sub

    Eseguendo la macro si visualizza una finestra di messaggio riportante Ciaocome stai.La funzione MsgBox fastidiosa da usare quando le frasi sono lunghe. Permandarle a capo nel punto desiderato si ricorre alla costante vbCr, comenellesempio seguente:

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    12/57

    Uso avanzato di MS Excel 12

    Sub Comunicare()MsgBox "Ciao come stai" & vbCr & _Io sto beneEnd Sub

    Esempio 2 Personalizzazione della barra del titolo di Excel

    Inserire in una procedura le istruzioniApplication.Caption = "Sistemi colturali"

    Per esempio:Sub Caption()

    Application.Caption = "Sistemi colturali"End Sub

    Nella barra del titolo del programma Microsoft Excel viene sostituito conSistemi colturali.

    Esempio 3 Individuazione di colonne nascoste

    Inserire in una procedura le istruzioni

    If Columns("C:D").Hidden ThenColumns("C:D").Hidden = False

    Per esempioSub Colonne_Nascoste()

    If Columns("C:D").Hidden ThenColumns("C:D").Hidden = FalseEnd If

    End Sub

    Eseguendo la macro se le colonne C e D sono scoperte non accade nulla. Sesono nascoste vengono mostrate.

    Esempio 4 Eliminazione di un foglio

    Inserire in una procedura le istruzioniSheets(2).Delete

    Per esempio:Sub Elimina_foglio()

    Sheets(2).DeleteEnd Sub

    Eseguendo questa macro si visualizza una finestra di messaggio riportanteNei fogli potrebbero esistere dei dati. Per eliminarli in modo permanentescegliere Elimina. Cliccando Elimina il foglio denominato Foglio2 vienecancellato, cliccando Annulla leliminazione non viene eseguita.Se si inserisce nella riga precedente alle istruzioni di eliminazione del foglio laseguente istruzione:

    Application.DisplayAlerts = False

    la finestra di messaggio non viene visualizzata e lesecuzione della macrodetermina leliminazione immediata di Foglio2. opportuno ripristinare lavisualizzazione dei messaggi alla fine della procedura con la seguenteistruzione:

    Application.DisplayAlerts = TrueIl codice completo risulta:Sub Elimina_foglio()

    Application.DisplayAlerts = FalseSheets(2).Delete

    Application.DisplayAlerts = True

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    13/57

    Uso avanzato di MS Excel 13

    End Sub

    Esempio 5 Protezione di una macro

    Chi crea macro pu precludere ad altri utenti la visualizzazione del lorocontenuto. Dal menu Strumentiscegliere la voce Macro/Editor di Visual Basic.

    Compare leditor di VBA e dal suo menu Strumenti selezionare la vocePropriet di VBAProject. Scegliere la scheda Protezione ove possibileimmettere la password per proteggere laccesso al codice della macro.

    Esempio 6 Esecuzione automatica di una macro allapertura

    Per far eseguire una macro allapertura della cartella di lavoro si possono usaredue metodi: Auto Opene Workbook Open.Nel primo caso il codice deve essere allocato in un modulo. Per esempio si pufar comparire il messagio Ciao!, con il codiceSub Auto_Open()

    Msgbox "Ciao!"

    End SubNel secondo caso il codice deve essere allocato nel workbook. Cliccare duevolte This workbook dalleditor di VBA, finestra a sinistra denominata Progetto VBAProject (se non visibile richiamarla da Visualizza/Gestione progetti).Cliccare il menu in alto denominato (generale) e sceglere Workbook.Sulleditor compare il seguente codice:Private Sub Workbook_Open()

    End Sub

    Immettere listruzione MsgBox "Ciao!". Il codice compelto risulta:Private Sub Workbook_Open()

    MsgBox "Ciao!"End Sub

    Esempio 7 Conteggio del numero di righe, colonne e fogli

    La seguente macro conta il numero di righe in un intervallo di celle:Sub ContaRighe()

    Dim ContaRighe As SingleRange("E1:E3").SelectContaRighe = Selection.Rows.CountMsgBox (ContaRighe)

    End Sub

    In particolare viene contato il numero delle righe dellintervallo di celle E1:E3(cio 3) e visualizzato in una finestra di messaggio. Sostituendo Rows conColumnsviene restituito il numero delle colonne (in questo caso 1):Sub ContaColonne()

    Dim ContaColonne As SingleRange("E1:E3").SelectContaColonne = Selection.Rows.CountMsgBox (ContaColonne)

    End Sub

    Il seguente codice serve a contare il numero di fogli in una cartella:Sub ContaFogli()

    Dim ContaFogli As SingleContaFogli = Application.Sheets.CountMsgBox (ContaFogli)

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    14/57

    Uso avanzato di MS Excel 14

    End Sub

    Esempio 8 Copia di dati

    La copia di dati contenuti in un intervallo di celle pu essere fatta con laseguente macro:

    Sub CopiaRange()Range("A1:A3").Copy Destination:=ActiveCell

    End Sub

    In particolare i dati contenuti nellintervallo di celle A1:A3vengono copiati in unintervallo corrispondente che ha inizio dalla cella attiva. Lattivazione di unacella avviene posizionando in quella cella il cursore del mouse oraggiungendola con le frecce direzionali. Se si posiziona il mouse in G1,lesecuzione della macro copia i valori di A1:A3in G1:G3.Per copiare i dati nella cella attiva di un altro foglio, per esempio Foglio3, ilcodice diventa:Sub CopiaRange()

    Foglio3.Range("A1:A3").Copy Destination:=ActiveCell

    End Sub

    Esempio 9 Inserimento della data corrente

    Pu essere utile inserire la data corrente in una cartella di lavoro prima disalvarla. Il codice deve essere contenuto in This workbook. Cliccare il menuin alto denominato (dichiarazioni)e sceglere BeforeSave.Private Sub Workbook_Open()

    End Sub

    Immettere listruzione Range("A1") = Now. Il codice completo risulta:Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel AsBoolean)Range("A1") = Now

    End Sub

    Lesecuzione della macro assegna alla cella A1 la data corrente nel formatogg/mm/aaaahh:mmAM(o PM).

    Esempio 10 Controllo del contenuto di una cella

    La macro seguente visualizza una finestra di messaggio che informa se la cellaattiva contiene testo, date, formule o vuota:Sub ControlloContenuto()If Application.IsText(ActiveCell) = True ThenMsgBox "Testo"ElseIf ActiveCell = "" ThenMsgBox "Cella vuota"ElseEnd IfIf ActiveCell.HasFormula ThenMsgBox "Formula"ElseEnd IfIf IsDate(ActiveCell.Value) = True ThenMsgBox "Data"ElseEnd IfEnd If

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    15/57

    Uso avanzato di MS Excel 15

    End Sub

    Esempio 11 Controllo della posizione di una cella

    La macro seguente visualizza una finestra di messaggio che informa sullaposizione relativa della cella attiva. Ad esempio 6,4 indica che la cella attiva

    quella posizionata sulla sesta riga e sulla quarta colonna:Sub Posizione()myRow = ActiveCell.RowmyCol = ActiveCell.ColumnMsgBox myRow & "," & myCol

    End Sub

    Esempio 12 Eliminazione delle celle vuote

    La macro seguente elimina le celle vuote contenute in un intervallo di celle diuna colonna selezionato dallutente:Sub CancellaRigheVuote()

    Rng = Selection.Rows.CountActiveCell.Offset(0, 0).Select

    Application.ScreenUpdating = FalseFor i = 1 To RngIf ActiveCell.Value = "" ThenSelection.EntireRow.DeleteElse

    ActiveCell.Offset(1, 0).SelectEnd IfNext i

    Application.ScreenUpdating = TrueEnd Sub

    Sostituendo ""con 0vengono cancellate le celle contenenti 0.La dichiarazione Application.ScreenUpdating = False previene lo schermodallaggiornamento e dal tremolio e assicura lesecuzione rapida della macro. sempre opportuno ripristinare il valore Truealla fine della procedura.Questa macro utilizza il loop For Next. Le dichiarazioni For Next funzionanocome un contatore nellambito di un intervallo selezionato e determinanolinterruzione della macro.

    Esempio 13 Funzioni

    La creazione di funzioni complesse pu essere fatta in modo pi sempliceutilizzando il codice invece che il foglio elettronico. Nellesempio riportato vienecalcolata una imposta sul reddito usando la dichiarazione Select Casein baseal seguente scenario:

    - i primi 5000 euro non sono tassabili;

    - i successivi 2500 euro sono tassati al 22%;- ogni importo superiore a 7500 euro tassato al 25%.Digitare in A1Reddito e in B1il relativo ammontare, per esempio 20000. In A2digitare Imposta e in B2=tax(B1).Il codice il seguente:Public Function tax(income As Single)

    Select Case incomeCase Is

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    16/57

    Uso avanzato di MS Excel 16

    'in questo caso 550Case Elsetax = (income - 7500) * 0.25 + 550End Select

    End Function

    Il risultato in B2 3675 euro: (75005000)*22%+(20000-7500)*25%.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    17/57

    Uso avanzato di MS Excel 17

    Le basi di VBA

    Lelenco che segue un breve sommario di tutto quello che riguarda VBA:

    Con VBA compi delle azioni eseguendo il suo codice. Con VBA scrivi (o registri) il codice che viene mantenuto in un modulo VBA.

    I moduli vengono memorizzati in un libro di lavoro Excel, che puoi vedere oaprire usando il Visual Basic Editor (VBE).

    Un modulo VBA si compone di procedure.Una procedura essenzialmente una unit di codice di computer che eseguealcune azioni. Qui c un esempio di una semplice procedura Sub chiamataTestche calcola una somma e mostra il risultato in un box di messaggio.

    Sub Test( )Somma = 1 + 1

    MsgBox La risposta & SommaEnd Sub

    In questo caso la risposta 2.

    Oltre alle procedure Sub, un modulo VBA pu anche avere procedureFunction.Una procedura Function restituisce un valore singolo (o una matrice). Unafunzione pu essere chiamata da unaltra procedura VBA, o usata in unaformula di foglio di lavoro. Qui c un esempio di una funzione chiamata

    AddTwo:

    Function AddTwo(arg1 , arg2)

    AddTwo = arg1 + arg2End Function

    VBA manipola oggetti contenuti allinterno dellambiente in cui si lavora (in

    questo caso Excel lospite dellapplicazione).

    Excel offre pi di 100 classi di oggetti da manipolare. Esempi di oggetti sono illibro di lavoro, il foglio di lavoro, lintervallo di fogli di lavoro, un grafico, ecc.Sono disponibili anche altri oggetti usando il codice VBA.

    Le classi oggetto sono disposte gerarchicamente.Gli oggetti possono agire come contenitori per altri oggetti. Per esempio, Excel

    un oggetto chiamato Applicatione contiene altri oggetti, come un Workbooke CommandBar. Loggetto Workbookpu contenere altri oggetti, come Worksheete Chart. Loggetto Worksheetpu contenere oggetti quali Range, PivotTable, ecos via. La disposizione di questi oggetti riferita al modello di Excel object.

    Come gli oggetti formano una collezione.Per esempio, la collezione Worksheets consiste di tutti i fogli di lavoro in unparticolare libro di lavoro. La collezione CommandBarscomprende tutti gli oggettiCommandBar. Le collezioni sono loro stesse degli oggetti.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    18/57

    Uso avanzato di MS Excel 18

    Quando si fa riferimento ad un contenuto o ad un elemento oggetto, bisognaspecificare la posizione nella gerarchia degli oggetti usando un punto comeseparatore del contenitore dallelemento.

    Per esempio, si pu fare riferimento ad un libro di lavoro chiamato Book1.xlscome

    Application.Workbooks(Book1.xls)

    Questo si riferisce al libro di lavoro Book1.xlsnella collezione Workbooks. Lacollezione Workbooks contenuta nelloggetto Excel Application. Estendendoquesto ad un altro livello, si pu far riferimento a Sheet1in Book1come:

    Application.Workbooks(Book1.xls).Worksheets(Sheet1).Range(A1)

    Se si omette un riferimento specifico ad un oggetto, Excel usa gli oggetti attivi.

    Se Book1 il libro di lavoro attivo, il precedente riferimento pu esseresemplificato come

    Worksheets(Sheet1).Range(A1)

    Se Sheet1 il foglio attivo, si pu ulteriormente semplificare il riferimento cos:

    Range(A1)

    Gli oggetti hannopropriet

    Una propriet pu essere considerata come la struttura di un oggetto. Peresempio, un oggetto Rangeha propriet come Valuee Name. Un oggetto graficoha propriet come HasTitleand Type. Si pu usare VBA per determinare e/ocambiare le propriet di un oggetto.

    Si assegna una propriet combinando loggetto con la propriet, separandolicon un punto.Per esempio, si pu far riferimento al valore nella cella A1nel foglio 1 come:

    Worksheets(Sheet1).Range(A1).Value

    Si possono assegnare valori alle variabili VBA. Ad ogni variabile si pu

    attribuire un nome indicativo del valore della variabile stessa.Per assegnare il valore nella cella A1 nel foglio 1 di una variabile chiamataInteresse, si usa la seguente espressione VBA:

    Interesse = Worksheets(Sheet1).range(A1).Value Gli oggetti hanno metodi.

    Un metodo unazione che compie loggetto. Per esempio, uno dei metodi perloggetto Range ClearContents. Questo metodo cancella il contenutodellintervallo.

    I metodi vengono indicati combinando loggetto con il metodo, separandolicon un punto.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    19/57

    Uso avanzato di MS Excel 19

    Per esempio, per cancellare il contenuto della cella A1 nel foglio di lavoroattivo, si usa:

    Range(A1).ClearContents

    VBA inoltre include tutte i costrutti dei moderni linguaggi di programmazione

    per esempio matrici, loop, e cos via.Fino qui stata fornita una descrizione a grandi linee di VBA. Adesso si pu entrarenei dettagli.

    Leditor di Visual Basic

    In Excel 5 e Excel 95, un modulo VBA appariva come un foglio in un libro di lavoro.Da Excel 97 in poi, i moduli VBA non sono pi stati visualizzati come fogli di lavoro esi passati alluso di Visual Basic Editor (VBE) per visualizzare e per operare con imoduli VBA.

    I moduli VBA non sono visibili a meno che VBE non venga attivato.

    VBE una applicazione separata ma dipendente da Excel. Non possibile avviareVBE separatamente da Excel.

    Attivazione di VBE

    Quando si lavora in Excel, si pu passare a VBE in uno dei seguenti modi:

    Premendo Alt+F11. Selezionando Strumenti/Macro/Visual Basic Editor.

    Ciccando il pulsante Visual Basic Editor ( ), posto nella barra degli strumenti

    di Visual Basic.

    Non bisogna confondere Visual Basic Editor e Microsoft Script Editor:sono due cose completamente diverse. Script Editor usato percompilare script HTML scritti in VBScript o JavaScript. Lo Script Editornon verr descritto in questa sede.

    La figura seguente mostra VBE. Probabilmente, la vostra finestra VBE non sipresenta esattamente come quella mostrata in figura. Le finestre si possononascondere, ridurre, ingrandire e riorganizzare.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    20/57

    Uso avanzato di MS Excel 20

    Le finestre VBE

    VBE costituito da diverse componenti. Di seguito viene fornita una brevedescrizione delle componenti chiave.

    Barra menu

    La barra del menu di VBE funziona come ogni altra barra di menu. Essa contienecomandi che si usano per lavorare con le varie componenti di VBE. Inoltre esistonodelle opzioni veloci per molti comandi del menu VBE. Per esempio, il comandoVisualizza/Finestra Immediataha come via breve Ctrl+G.

    VBE configura i menu abbreviati. Ciccando con il tasto destro suqualunque cosa nella finestra di VBE si ottiene un menu diabbreviazioni dei comandi pi comuni.

    Barre degli strumenti

    La barra Standard degli strumenti, che si trova direttamente sotto la barra del menudi default, una delle sei barre disponibili di VBE (la barra menu anche consideratauna barra degli strumenti). Le barre degli strumenti VBE lavorano come in Excel: sipossono usare, muovere, ecc. Si usano i comandi Visualizza/Barra deglistrumenti/Personalizzaper lavorare con le barre strumenti VBE.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    21/57

    Uso avanzato di MS Excel 21

    Finestra di Gestione progetti

    La finestra Gestione progettimostra un diagramma ad albero corrispondente ad ognilibro di lavoro aperto in Excel in quel momento (inclusi quelli aggiunti e i libri di lavoronascosti).Ogni libro di lavoro conosciuto comeproject.

    Si preme Ctrl+R per rendere visibile una finestra. Per nascondere la finestra si premeil pulsante Chiudi nel titolo della sua barra (o premi col destro in una qualsiasi partedella finestra di Gestione progettie seleziona Nascondidal menu di scelta rapida).

    Finestra codice

    La finestra codice (anche conosciuta come finestra modulo) contiene il codice VBA.Ogni voce nel progetto ha una sua finestra di codice associata. Per vedere la finestradel codice di un oggetto, si preme due volte loggetto nella finestra Gestione progetti.Per esempio per vedere la finestra di codice delloggetto Foglio 1, si clicca due volteFoglio1nella finestra Gestione progetti.

    Unaltra strada per vedere la finestra di codice di un oggetto quella di selezionareloggetto nella finestra Gestione progetti e premere il tasto Visualizza Codice nellabarra strumenti in cima alla finestra Gestione progetti.

    Finestra immediata

    La finestra immediata la pi utile per eseguire direttamente espressioni VBA,testarle e controllarne gli errori nel codice. Questa finestra pu essere visibile omeno. Se non immediatamente visibile, si preme Ctrl+G. Per chiudere la finestra sipreme il bottone Chiudi nel titolo della sua barra (o clicca col destro in qualsiasi postonella finestra immediata e seleziona Nascondidal menu di scelta rapida).

    Gestione progetti

    Quando si lavora in VBE, ogni libro di lavoro Excel, comprese le componentiaggiuntive in quello che il lavoro corrente considerato un progetto. Si puimmaginare un progetto come una collezione di oggetti disposti in modo ordinato. Sipu espandere un progetto cliccando il segno pi (+) alla sinistra del nome delprogetto nella finestra di Gestione progetti. Si pu ridurre il progetto cliccando ilsegno meno (-) a sinistra del nome del progetto. Si pu anche usare il pulsanteEspandi/comprimi cartelle nella barra in cima alla finestra Gestione progetti perespandere o ridurre il progetto. Se si prova a espandere un progetto protetto, vienerichiesta la password.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    22/57

    Uso avanzato di MS Excel 22

    La figura seguente mostra una finestra di Gestione progetti.

    Quando si attiva VBE, non detto che il codice del modulo cheviene mostrato corrisponda alloggetto evidenziato nella finestraGestione progetti. Per essere sicuri di lavorare nel codice del

    modulo giusto, cliccare due volte loggetto nella finestra di Gestioneprogetti.

    Se sono aperti molti libri di lavoro, la finestra di Gestione progettipu risultare un poschiacciata. Sfortunatamente, non possibile nascondere il progetto nella finestra diGestione progetti.

    Ogni progetto espanso mostra i capitoli di ogni libro di lavoro (ogni foglio considerato un oggetto), e un altro oggetto chiamato ThisWorkbook (il qualerappresenta loggetto ActiveWorkbook). Se il progetto ha qualche modulo VBA, ilprogetto elencato mostra pure lelenco dei moduli. Un progetto pu anche contenere

    gli oggetti denominati UserForm(anche conosciuti come abituali box di dialogo). Se ilprogetto ha moduli di classe, mostrer anche un elenco dei moduli di classe.

    In Excel 2002, aggiungere un riferimento ad un progetto(usando il comando Strumenti/Riferimenti) causa lacomparsa di una voce in Gestione progetti. Ogniriferimento elencato come oggetto separato.

    Aggiungere un nuovo modulo VBA

    Per aggiungere un nuovo modulo VBA ad un progetto selezionare il nome delprogetto nella finestra di Gestione progetti e scegliere Inserisci/Modulo. Oppurecliccare col tasto destro sul nome del progetto e scegliere Inserisci/Modulodal menudi scelta rapida.

    Quando si registra una macro, Excel automaticamenteinserisce un modulo VBA per mantenere il codice registrato.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    23/57

    Uso avanzato di MS Excel 23

    Rimuovere un modulo VBA

    Per rimuovere un modulo o un modulo classe da un progetto, selezionare il nome delmodulo nella finestra Gestione progetti e scegliere File/Rimuovi xxx (dove xxx ilnome del modulo). possibile anche cliccare col tasto destro del mouse sul nome

    del modulo e scegliere Rimuovi xxx dal menu di scelta rapida. Non possibilerimuovere il codice di moduli associati al libro di lavoro (il codice moduloThisWorkbook) o al foglio (per esempio il codice modulo Foglio1).

    Esportare e importare oggetti

    Esportare ed importare oggetti pu essere utile se si vuole usare un oggetto in unprogetto diverso (come ad esempio un modulo VBA o un UserForm).

    Per esportare un oggetto, selezionare la finestra Gestione progetti e scegliereFile/Esporta file (o premere Ctrl+E). Apparir una finestra di dialogo che chiede il

    nome del file. Da notare che loggetto esportato rimane comunque nel progetto diorigine (ne viene esportata solo una copia). Se si esporta un oggetto UserForm,nessun codice associato con UserForm viene esportato.

    Per importare un file in un progetto si seleziona il nome del progetto nella finestraGestione progettie si sceglie File/Importa file. Si ottiene una finestra di dialogo cherichiede il nome del file. Si pu importare solo un file che stato esportato usando ilcomando File/Esporta file.

    Se si vuole copiare un modulo o un oggetto UserForminun altro progetto, non necessario esportare e poiimportare loggetto. Accertarsi che entrambi i progetti

    siano aperti e semplicemente attivare le finestreGestione progetti e trascinare loggetto da un progettoallaltro.

    Le finestre di codice

    A ogni oggetto associata una finestra di codice. Tali oggetti possono essere:

    Il libro di lavoro stesso (ThisWorkbooknella finestra Gestione progetti) Un foglio di lavoro o un foglio grafico nel libro di lavoro (per esempio, Foglio1

    di Grafico1nella finestra Gestione progetti) Un modulo VBA Un modulo di classe (uno speciale tipo di modulo che ti permette di creare

    nuove classi di oggetto) Una UserForm

    Minimizzare e massimizzare finestre

    In certi momenti, VBE pu avere molte finestre di codice aperte. La figura che seguemostra un esempio di che cosa si intende.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    24/57

    Uso avanzato di MS Excel 24

    Le finestre di codice sono molto simili alle finestre del foglio di lavoro in Excel. Sipossono minimizzare, massimizzare, nascondere, riarrangiare e cos via. Molti utentitrovano pi efficiente massimizzare la finestra di codice nella stanno lavorando. Permassimizzare la finestra di codice, cliccare il pulsante Ingrandiscinel titolo della barrao fare un doppio clic nel titolo della barra. Per ripristinare la finestra di codice,

    cliccare sul tasto Ripristinanel titolo della sua barra.Alle volte, pu essere utile avere due o pi finestre di codice visibili, ad esempio percomparare il codice di due moduli, o copiare codice da un modulo allaltro.Minimizzando una finestra di codice essa si localizza nella parte bassa delloschermo. Premendo il tasto Chiudi nel titolo della barra della finestra di codice lafinestra si chiude completamente. Per aprirla nuovamente cliccare due volte loggettoappropriato dalla finestra di Gestione progetti.VBE non permette di chiudere un libro di lavoro. Occorre richiamare Excel e fare lachiusura da qui. Comunque si pu usare la Finestra Immediataper chiudere un librodi lavoro o aggiungerne uno. Appena attivata la Finestra Immediata, digitareunespressione VBA simile a quella di seguito e premere Enter.

    Workbooks(myaddin.xla).CloseQuesta espressione esegue il metodo Chiudi delloggetto Workbook, il quale chiudeun libro di lavoro. In questo caso, viene chiuso un libro di lavoro che era statoaggiunto.

    Mantenimento del codice VBA

    In generale una finestra di codice pu sostenere quattro tipologie di codice:

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    25/57

    Uso avanzato di MS Excel 25

    Procedure sub. Una procedura una struttura di istruzioni che esegue alcuneazioni.

    Procedure funzioni. Una funzione un set di istruzioni che restituisce unsingolo valore o un ordine (concettualmente simile alla funzione di foglio dilavoro come =SUM).

    Procedure propriet. Queste sono procedure speciali usate in moduli di

    classe. Dichiarazioni. Una dichiarazione uninformazione circa una variabile fornita a

    VBA. Per esempio, lutente pu dichiarare il tipo di dati per le variabili cheintende usare.

    Un singolo modulo VBA pu mantenere qualunque passo di procedura Sub, Functione dichiarazione. Come organizzare un modulo VBA compito dellutente. Alcuniutenti preferiscono tenere tutto il loro codice VBA per una applicazione in un singolomodulo VBA; ad altri piace suddividere il codice in numerosi differenti moduli.

    Sebbene si abbiano molte possibilit su dove posizionare ilcodice, ci sono alcune restrizioni. Procedure di gestione di eventi

    devono essere poste nella finestra di codice relativa alloggettoche risponde allevento. Per esempio, se si scrive una procedurache viene eseguito nel momento in cui il libro di lavoro vieneaperto, questa procedura deve essere posta nella finestra dicodice delloggetto ThisWorkbook.

    Entrando nel codice VBA

    Prima di poter eseguire qualcosa di veramente significativo va scritta una certaquantit di codice VBA nella finestra di codice. Il codice VBA deve essere dentro unaprocedura. Una procedura una dichiarazione VBA. Per ora, focalizzeremolattenzione su uno dei tipi di finestre codice: il modulo VBA.

    Si pu aggiungere codice ad un modulo VBA in tre maniere:

    Entrando nel codice nella vecchia maniera e cio digitandolo sulla tastiera. Usando il registratore di macro di Excel per registrare le azioni e convertirle

    nel codice VBA. Copiando il codice da un altro modulo e incollandolo nel modulo in cui si sta

    lavorando.

    Entrare manualmente nel codice

    Alle volte, la via pi diretta la migliore, ovvero digitare il codice usando la tastiera.

    Si pu usare il tasto Tab per fare i rientri nelle righe che logicamente stanno insieme per esempio, le condizioni di espressioni fra un If e un End If. Questo non realmente necessario, ma rende il codice pi leggibile.Una singola istruzione in VBA pu avere una lunghezza indefinita. Per una maggioreleggibilit, comunque, possibile spezzare unistruzione lunga in due o pi righe. Perfare ci, al termine di una linea di istruzioni si aggiunge uno spazio seguito dalcarattere underscore (_), poi si preme Invio e si continua listruzione nella lineaseguente. Il seguente codice, per esempio, una unica dichiarazione suddivisa in 4righe:

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    26/57

    Uso avanzato di MS Excel 26

    MsgBox Non trovato & Ucase(SHORTCUTMENUFILE) _& vbCrLf & vbCrLf & Il file deve essere posizionato in _ & ThisWorkbook.Path & vbCrLf & vbCrLf & Pu essere _necessario reinstallare BudgetMan, vbCritical, APPNAME

    Notare il rientro delle tre linee dellespressione. una soluzione opzionale, ma aiutaa capire che queste quattro righe in realt sono una singola dichiarazione.

    Come Excel, VBE ha livelli multipli di Annulla e Ripeti. Perci sesi incontra unistruzione cancellata che invece non andavacancellata, si pu premere ripetutamente il tasto Annulla (oCtrl+Z) fino a che listruzione non ritorna. Dopo lannullamento, sipu premere il tasto Ripeti per cambiare quello che era statoannullato.

    Provare quanto segue: inserire un modulo VBA in un progetto, e poi entrare nellaseguente procedura nella finestra di codice del modulo:

    Sub TuoNome( )

    Msg = Il tuo nome & Application.UserName & ?Ans = MsgBox(Msg, vbYesNo)If Ans = vbNo Then

    MsgBox Oh, mi dispiace.Else

    MsgBox Devo essere telepatico!End If

    End SubLa figura seguente mostra come questo appare nel modulo VBA.

    Entra nel codice si nota che VBE fa alcuni aggiustamento sul testo.

    Esempio, se si omette lo spazio prima e dopo il segno uguale, VBE loinserisce. Inoltre, il colore di parte dei testi cambiato. Questo normale, e sar apprezzato pi avanti.

    Per eseguire la procedura TuoNome, accertarsi che il cursore sia posizionato in unqualunque posto allinterno del testo digitato. Poi procedere con una delle seguentiopzioni:

    Premere F5. Selezionare Eseguidal menu e scegliere il comando Esegui Sub/UserForm. Premere il pulsante Esegui Sub/UserForm ( ) sulla barra degli strumenti

    standard.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    27/57

    Uso avanzato di MS Excel 27

    La procedura viene eseguita e si pu rispondere a una semplice finestra di dialogo(vedi figura seguente) che mostra il nome dellutente. Notare che Excel viene attivatoquando la macro eseguita.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    28/57

    Uso avanzato di MS Excel 28

    Cosa significa scrivere una procedura Sub in VBA (anche detta macro)? Quando ilcomando per eseguire la macro viene inviato, VBE velocemente compila il codice elo esegue. In altre parole, ogni istruzione viene valutata ed Excel svolge ci che chiamato a fare.Per registrare questa semplice procedura:

    Dichiarare la procedura (prima linea) Assegnare un valore alle variabili (Msg e Ans) Concatenare le stringhe (usando loperatore &) Usare la funzione built-in di VBA (MsgBox) Usare una costruzione If-Then-Else Concludere la procedura (ultima linea)

    Usare il registratore di macro

    Unaltra modalit per ottenere codice nel modulo VBA di registrare le azioni usandoil registratore di macro Excel.Questo prossimo esempio mostra come registrare una macro che semplicementecambia la disposizione dellorientamento della pagina da verticale in orizzontale.

    1. Attivare un foglio di lavoro attraverso il libro di lavoro.2. Selezionare Strumenti/Macro/Registra Nuova Macro.

    Excel mostra la finestra di dialogo della macro da registrare.3. Premere OK per accettare i defaults.

    Excel automaticamente inserisce un nuovo modulo VBA nel progetto.Da questo punto in poi, Excel converte le azioni eseguite in codiceVBA. Mentre la macro viene registrata, Excel mostra una piccolafinestra fluttuante di barra strumenti che contiene due bottoni dellabarra degli strumenti (Interrompi registrazionee Riferimento relativo).

    4. Selezionare il comando File/Imposta pagina.5. Selezionare lopzione Orizzontale e premere OK per chiudere la finestradi dialogo.

    6. Premere il tasto Interrompi registrazione sulla finestra fluttuante dellabarra strumenti (o selezionare Strumenti/Macro/Interrompiregistrazione).Excel interrompe la registrazione delle azioni.

    Per dare uno sguardo alla macro, attivare il VBE (Alt+F11) e trovare il progettorelativo nella finestra Gestione progetti. Cliccare il Modulo1 per mostrare la finestra dicodice (se il progetto ha gi un Modulo1, la nuova macro sar Modulo2). Il codicegenerato da un singolo comando mostrato nella Lista 1. Per coloro che usano una

    versione di Excel che non Excel2002, il codice pu variare leggermente.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    29/57

    Uso avanzato di MS Excel 29

    Lista 1 - Macro per variare lorientamento della pagina in orizzontale

    Sub Macro1()'' Macro1 Macro' Macro registrata il 18/11/2002 da MAESTRINI

    '

    'With ActiveSheet.PageSetup

    .PrintTitleRows = ""

    .PrintTitleColumns = ""End With

    ActiveSheet.PageSetup.PrintArea = ""With ActiveSheet.PageSetup

    .LeftHeader = ""

    .CenterHeader = ""

    .RightHeader = ""

    .LeftFooter = ""

    .CenterFooter = ""

    .RightFooter = "".LeftMargin = Application.InchesToPoints(0.787401575)

    .RightMargin = Application.InchesToPoints(0.787401575)

    .TopMargin = Application.InchesToPoints(0.984251969)

    .BottomMargin = Application.InchesToPoints(0.984251969)

    .HeaderMargin = Application.InchesToPoints(0.5)

    .FooterMargin = Application.InchesToPoints(0.5)

    .PrintHeadings = False

    .PrintGridlines = False

    .PrintComments = xlPrintNoComments

    .PrintQuality = 300

    .CenterHorizontally = False

    .CenterVertically = False

    .Orientation = xlLandscape

    .Draft = False

    .PaperSize = xlPaperA4

    .FirstPageNumber = xlAutomatic

    .Order = xlDownThenOver

    .BlackAndWhite = False

    .Zoom = 100

    .PrintErrors = xlPrintErrorsDisplayedEnd With

    End Sub

    Sebbene cambi solo un semplice settaggio nella finestra di dialogo dellimpostazionedella pagina, Excel genera un codice che riproduce tutti i settaggi nella finestra didialogo. Questo porta ad un importante concetto. Spesso il codice prodotto quando siregistra una macro eccessivo. Si pu ottenere la modalit orizzontale

    semplificando considerevolmente la macro cancellando codice estraneo. La macrodiventa pi semplice da leggere e viene eseguita pi velocemente. La precedentemacro pu essere semplificata come segue:

    Sub Macro1()With ActiveSheet.PageSetup

    .Orientation = xlLandscapeEnd With

    End Sub stato cancellato tutto il codice in eccesso mediante listruzione che setta lapropriet Orientation. In realt, questa macro pu essere semplificata ancora di pi

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    30/57

    Uso avanzato di MS Excel 30

    perch la costruzione With-EndWith non necessaria quando si modifica una solapropriet:

    Sub Macro1( )ActiveSheet.PageSetup.Orientation = xlLandscapeEnd Sub

    In questo esempio, la macro cambia la propriet Orientation delloggetto Impostapagina nel foglio attivo. Listruzione xlLandscape una costante che provvede asemplificare le cose. La variabile xlLandscapeha valore 2, e xlPortraitha valore 1.La seguente macro lavora come la precedente Macro1.

    Sub Macro1( )ActiveSheet.PageSetup.Orientation = 2End Sub

    Si pu usare lhelp in linea per imparare le costanti relative ad un particolarecomando.Si pu entrare in questa procedura direttamente nel modulo VBA, ma occorre sapere

    quali oggetti, propriet e metodi usare. Ovviamente, molto pi veloce registraremacro da cui si impara inoltre che loggetto PageSetup ha una propriet Orientation.

    Registrare le azioni la modalit migliore per imparare VBA, sebbeneil risultato possa non essere esattamente ci si desidera. Si pu usarelhelp in linea per controllare gli oggetti, le propriet e i metodi cheappaiono nel codice registrato.

    Copiare il codice VBA

    Fino ad ora abbiamo esaminato come lavorare direttamente sul codice e registrare leazioni per generare codice VBA. Lultimo metodo quello di prendere il codice nelmodulo VBA e di copiarlo da un altro modulo. Per esempio, una procedura potrebbeessere gi scritta per un progetto e risultare utile anche nel progetto corrente.Piuttosto che rientrare nel codice, si pu pi semplicemente aprire il libro di lavoro,attivare il modulo e usare la normale prassi copia incolla per copiare il codice nelcorrente modulo. Dopo averlo incollato, si puoi modificare il codice come sipreferisce.

    Come gi detto in questo capitolo, si pu anche importare unmodulo intero che stato esportato su un file.

    Personalizzare lambiente VBE

    VBE offre numerose opzioni per la personalizzazione dellambiente.Quando VBE attivo, scegliere Strumenti/Opzioni. Si apre una finestra di dialogocon 4 schede: Editor, Formato Editor, Generale,Ancoraggio.

    La scheda Editor

    La figura seguente mostra le opzioni a cui si pu accedere cliccando il tab Editordalla finestra di dialogo Opzioni.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    31/57

    Uso avanzato di MS Excel 31

    Controllo automatico sintassi

    Lopzione Controllo automatico sintassi controlla automaticamente errori di sintassimentre si sta lavorando nel codice VBA. Una finestra di dialogo avverte sul tipo diproblema. Se non si sceglie questo settaggio, VBE mostra gli errori di sintassi in uncolore differente dal resto del codice e non appare nessuna finestra di dialogo sulmonitor.

    Dichiarazione di variabili obbligatoria

    Se lopzione Dichiarazione di variabili obbligatoria settata, VBE inserisce laseguente dichiarazione allinizio di ogni nuovo modulo VBA:

    Option Explicit

    Se ci appare, obbligatorio definire ogni variabile che viene usata. Questa unaeccellente abitudine da prendere, bench richieda alcuni sforzi in pi da partedellutente. Se le variabili non vengono dichiarate, tutti i dati sonodi di tipo Variant, eci non efficiente.

    Cambiare lopzione Dichiarazione di variabili

    obbligatoria riguarda solo moduli nuovi, non quelli giesistenti.

    Elenco membri automatico

    Se questa opzione settata, VBE offre qualche aiuto quando si entra nel codiceVBA, mostrando una lista di capitoli per oggetto.La figura seguente mostra un esempio di Elenco membri automatico. VBE mostrauna lista di componenti per loggetto Application. possibile selezionare un

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    32/57

    Uso avanzato di MS Excel 32

    elemento dalla lista ed evitare di scriverlo (questo assicura anche che vengacorrettamente digitato).

    Informazioni rapide automatiche

    Se questa opzione settata, VBE informa circa gli argomenti disponibili per funzioni,propriet e metodi appena vengono digitati. La figura che segue mostra questacaratteristica in azione per la propriet Range.

    Descrizione dati automatica

    Se lopzione settata, VBE mostra il valore della variabile sulla quale il cursore posto quando si sta lavorando nel codice.

    Rientro automatico

    Il settaggio Rientro automaticodetermina se VBE automaticamente deve far rientrareogni nuova linea di codice alla stessa maniera come la linea precedente. Si puanche specificare il numero di caratteri di rientro (di default sono 4).

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    33/57

    Uso avanzato di MS Excel 33

    Usare la chiave Tab per rientrare nel codice e non labarra spazio. Con Shift+Tab si rimuove il rientro dellelinee di codice. Queste chiavi lavorano anche suselezioni di pi linee.

    Trascinamento della selezione

    Lopzione Trascinamento della selezione permette di copiare e muovere testotrascinando e rilasciando.

    Visualizza modulo intero

    Questa opzione specifica come le procedure vengono mostrate. Se settata, laprocedura nella finestra di codice appare come una singola finestra scorribile. Selopzione disattivata, si pu visualizzare solo una procedura alla volta.

    Separa routine

    Quando lopzione Separa routine attivata, vengono mostrate linee di separazionealla fine di ogni procedura nella finestra di codice.

    La scheda Formato editor

    La figura seguente mostra lopzione della scheda Formato editor della finestra didialogo delle Opzioni.

    Colori codiceLopzione Colori codice permette di settare il colore del testo (primo piano e sfondo)e indicare il colore mostrato per vari elementi di codice di VBA.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    34/57

    Uso avanzato di MS Excel 34

    Tipo di carattere

    Lopzione Tipo di caratterepermette di impostare il carattere del testo che si usa neimoduli VBA.

    Dimensione

    La dimensione specifica la grandezza del carattere nei moduli VBA.

    Barra indicatori

    Questa opzione controlla la disposizione del margine verticale dellindicatore dellabarra nei moduli.

    La scheda Generale

    La figura seguente mostra le opzioni disponibili sotto lo schema Generale nellafinestra di dialogo delle opzioni. Quasi in ogni caso i settaggi di default sonoadeguati.

    La scheda Ancoraggio

    La figura seguente mostra la scheda Ancoraggio della finsetra di dialogo delleOpzioni. Queste opzioni determinano il comportamento delle diverse finestre in VBE.Quando una finestra ancorata, viene fissata lungo uno dei margini della finestra diVBE. Questo facilita lidentificazione e il posizionamento di una particolare finestra.Senza la modalit ancoraggio, si genera una disposizione disordinata delle finestre.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    35/57

    Uso avanzato di MS Excel 35

    Oggetti e Collezioni

    In questa sezione sono riportato maggiori dettagli rispetto ai precedenti capitolirelativamente agli oggetti e alle collezioni di oggetti.Gli oggetti vanno immaginati in termini di gerarchia. In cima alla gerarchia cloggetto Application nel nostro caso Excel stesso. Ma se si programma in VBAusando Microsoft Word, loggetto Application Word.

    Loggetto gerarchiaLoggetto Application (che Excel) contiene altri oggetti. Qui ci sono solo pochiesempi di oggetti contenuti nelloggetto Application:

    Workbooks (una collezione di tutti gli oggetti Workbook)Windows(una collezione di tutti gli oggetti Window)

    AddIns(una collezione di tutti gli oggetti AddIn)

    Alcuni oggetti contengono altri oggetti. Per esempio, la collezione Workbooksconsistedi tutti gli oggetti Workbook aperti, e loggetto Workbook contiene altri oggetti, alcunidei quali sono i seguenti:

    Worksheets

    (una collezione di oggettiWorksheet

    )Charts(una collezione di oggetti Chart)Names(una collezione di oggetti Name)

    Ognuno di questi oggetti, a sua volta, pu contenere altri oggetti. La collezioneWorksheets consiste di tutti gli oggetti Worksheet in un Workbook. Un oggettoWorksheetcontiene molti altri oggetti, i quali includono i seguenti:

    ChartObjects(una collezione di oggetto ChartObject)Range

    PageSetup

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    36/57

    Uso avanzato di MS Excel 36

    PivotTables(una collezione di oggetti PivotTable)

    Il completo modello oggetto Excel rappresentato schematicamente nel sistema dihelp in linea.

    Le collezioniUn altro concetto chiave nella programmazione di VBA rappresentato dallecollezioni. Una collezione un insieme di oggetti della stessa classe (e unacollezione anchessa un oggetto). Come scritto sopra, Workbooks una collezionedi tutti gli oggetti Workbook,correntemente aperti. Worksheets una collezione di tuttigli oggetti Worksheet contenuti in un particolare oggetto Workbook. Si pu lavorarecon una intera collezione di oggetti o con un oggetto individuale di una collezione.Per fare riferimento ad un singolo oggetto di una collezione, mettere il nomedelloggetto o il numero di indice fra parentesi dopo il nome della collezione, comesegue:

    Worsheets(Sheet1)

    Se Sheet1 il primo foglio di lavoro nella collezione, si pu alternativamente usare ilseguente riferimento:

    Worksheets(1)

    Si fa riferimento al secondo foglio di lavoro in un Workbookcon Worksheet(2), e cosvia.C unaltra collezione chiamata Sheets, che linsieme di tutti i fogli in un libro dilavoro, sia fogli di lavoro sia fogli grafici. Se Sheet1 il primo foglio nel tuo libro dilavoro, si pu scrivere come segue:

    Sheets(1)

    Riferimento alloggetto

    Quando ci si riferisce ad un oggetto usando VBA, spesso si deve qualificare loggettoconnettendo i nomi delloggetto con un periodo (anche conosciuto come operatorepunto). Per esempio, si hanno due libri di lavoro aperti ed in entrambi contenutoun foglio di lavoro chiamato Sheet1. Il singolo foglio si identifica facendo riferimentoal contenitore delloggetto, come segue:

    Workbooks(Book1).Worksheets(Sheet1)

    Senza il libro di lavoro qualificatore, VBA vedrebbe Sheet1nel libro di lavoro attivo.Per far riferimento ad uno specifico intervallo (come pu essere la cella A1) su unfoglio di lavoro chiamato Sheet1in un libro di lavoro chiamato Book1, si pu usare laseguente espressione:

    Workbooks(Book1).Worksheets(Sheet1).Range(A1)

    I riferimenti del precedente esempio includono anche loggetto Application, comesegue:

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    37/57

    Uso avanzato di MS Excel 37

    Application.Workbooks(Book1).Worksheets(Sheet1).Range(A1)

    Molte volte, comunque, il riferimento alloggetto Application pu essere omesso(esso gi assunto). Se loggetto Book1 il libro di lavoro attivo, si pu ancheomettere il riferimento di quelloggetto e usare:

    Worksheets(Sheet1).Range(A1)

    Ancora, se Sheet1 il foglio di lavoro attivo, si pu usare una espressione ancora pisemplificata:

    Range(A1)

    Excel non ha un oggetto che fa riferimento ad unasingola cella. Una cella un oggetto Range.

    I semplici riferimenti agli oggetti (come in questi esempi) non comportanoo alcuna

    esecuzione. Per permettere esecuzioni, occorre associare ad un oggetto le suepropriet, o specificare un metodo che deve essere usato con quelloggetto.

    Propriet e Metodi

    In questa sezione descriveremo come accedere alle propriet e ai metodi deglioggetti.

    Propriet degli oggetti

    Ogni oggetto ha delle propriet. Per esempio, un oggetto Range ha una proprietchiamata Value. Si pu scrivere il codice VBA per mostrare la propriet Value oscrivere un codice VBA per settare la propriet Valueper uno specifico valore. Quellache segue una procedura che usa la funzione VBA MsgBoxper fare apparire unafinestra che visualizza il valore nella cella A1del foglio 1 del libro di lavoro attivo:

    Sub ShowValue( )MsgBox Worksheets(Foglio1).Range(A1).Value

    End Sub

    MsgBox una funzione utile per mostrare risultati mentreil codice VBA in esecuzione.

    Il codice nel precedente esempio mostra il settaggio corrente della propriet Valuedi

    una cella specifica: cella A1nel foglio di lavoro chiamato Foglio1nel libro di lavoroattivo. Nota che se il libro di lavoro attivo non ha un foglio chiamato Foglio1, lamacro generer un errore.La seguente procedura cambia il valore mostrato nella cella A1 cambiando lapropriet Valuedella cella.

    Sub ChangeValue( )Worksheets(Foglio1).Range(A1).Value = 123

    End Sub

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    38/57

    Uso avanzato di MS Excel 38

    Dopo lesecuzione di questo processo, la cella A1sul foglio 1 assume il valore 123.

    Molti oggetti hanno propriet di default. Per loggetto Range, lapropriet di default la propriet Value. Perci si pu anche omette laparte .Valuedal codice ed ottenere lo stesso effetto. Comunque, daconsiderare buona pratica di programmazione quella di includere la

    propriet, anche se gi definita di default.

    Metodi degli oggetti

    Un metodo una azione che si esegue con un oggetto. Seguono semplici esempiche usano il metodo Clearsu un oggetto Range. Dopo aver eseguito la procedura, lecelle dellintervallo A1:C3 sul foglio 1 saranno vuote, e il contenuto delle celleformattate sar rimosso.

    Sub ZapRange()Worksheets("Foglio1").Range("A1:C3").Clear

    End Sub

    Se se preferisse cancellare i valori nellintervallo e mantenere la formattazione, usareil metodo ClearContentsdelloggetto Range.Molti metodi gestiscono argomenti per definire ulteriori azioni. Segue un esempio checopia la cella A1nella cella B1usando il metodo Copydelloggetto Range. In questoesempio, il metodo Copyha un argomento (la destinazione della copia):

    Sub CopyOne()Worksheets("Foglio1").Range("A1").Copy Worksheets("Foglio1").Range("B1")End Sub

    Gli oggetti Range

    Molto del lavoro che viene svolto in VBA coinvolge celle e intervalli in fogli di lavoro.

    Un oggetto Range contenuto in un oggetto Worksheet, e consiste di una singolacella o intervallo di celle su un singolo foglio di lavoro. Nella sezione che segue,trattiamo tre modalit per far riferimento agli oggetti Rangenel codice VBA:

    La propriet Rangedi un oggetto class Worksheeto Range La propriet Rangedi un oggetto Worksheet La propriet Rangedi un oggetto Range

    La propriet Range

    La propriet Rangerestituisce loggetto Range. Questa propriet ha due sintassi:

    object.Range(cell1)object.Range(cell1, cell2)

    La propriet Range si applica per due tipi di oggetti, loggetto Worksheet o loggettoRange. Qui cell1e cell2si riferiscono allo spazio che identifica lintervallo (una cellanel primo caso, pi celle nel secondo caso). Di seguito ci sono alcuni esempi sullusodel metodo Range.

    Listruzione che segue restituisce un valore in una cella specificata, in questo caso ilvalore 1 nella cella A1su Foglio1del libro di lavoro attivo:

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    39/57

    Uso avanzato di MS Excel 39

    Worksheets(Foglio1).Range(A1).Value = 1La propriet Rangericonosce anche i nomi definiti in un libro di lavoro. Perci se unacella chiamata Input, si pu usare la seguente espressione per entrare nel valoredella cella cos denominata:

    Worksheets(Foglio1).Range(Input).Value = 1

    Lesempio che segue restituisce un medesimo valore in un intervallo di 20 celle sulfoglio attivo. Se il foglio attivo non il foglio di lavoro, questo causa un messaggio dierrore:

    ActiveSheet.Range(A1:B10).Value = 2

    Il prossimo esempio produce esattamente lo stesso risultato come lesempioprecedente:

    Range(A1, B10) = 2Il foglio di riferimento tralasciato, cos viene preso il foglio attivo. Anche la proprietvalore tralasciata e lascia il posto alla propriet di default (nel caso di oggetto Range Value). Questo esempio usa anche la seconda sintassi per la propriet Range. Conquesta sintassi, il primo argomento la cella in alto a sinistra dell intervallo e ilsecondo argomento la cella in basso a destra dellintervallo.Lesempio seguente usa loperatore di intersezione di range di Excel (uno spazio) perrestituire lintersezione di due intervalli. In questo caso, lintersezione una singolacella, C6. Perci, lespressione pone 3 nella cella C6:

    Range(C1:C10 A6:E6) = 3

    Ed infine, il prossimo esempio, pone il valore 4 dentro 5 celle, in un intervallo non-contiguo. La virgola serve come operatore di unione.

    Range (A1, A3, A5, A7, A9) = 4Tutti gli esempi hanno usato la propriet Rangesu un oggetto Worksheet. Ti ricordoche puoi anche usare la propriet Rangesu un oggetto Range.Quel che segue un esempio di uso della propriet Range su oggetto Range (inquesto caso, loggetto Range la cella attiva). Questo esempio tratta loggetto Rangecome se fosse la cella superiore a sinistra nel foglio di lavoro, e poi pone il valore 5nella cella che sarebbe la cella B2. In altre parole, il riferimento restituito relativo

    allangolo superiore sinistro delloggetto Range. Perci, lespressione che seguepone il valore 5 nella cella direttamente alla destra e una riga sotto la cella attiva:

    ActiveCell.Range(B2) = 5

    Ci sono molte modalit per accedere a celle relative a intervalli, chiamate proprietOffset, di cui si parler pi avanti.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    40/57

    Uso avanzato di MS Excel 40

    La propriet celle

    Unaltra modalit che fa riferimento ad intervalli quella che fa uso della proprietCells. Come la propriet Range, si pu usare la propriet Cellssu oggetti Worksheete oggetti Range. La propriet Cellsha tre sintassi:

    object.Cells(rowIndex, columnIndex)

    object.Cells(rowIndex)object.Cells

    Mostreremo alcuni esempi sulluso della propriet Cells. Il primo esempio riceve ilvalore 9 nella cella 1 sul foglio 1. In questo caso, si usa la prima sintassi, che accettail numero di indice di riga (da 1 a 65536) e di colonna (da 1 a 256):

    Worksheets(Foglio1).Cells(1, 1) = 9

    Segue un esempio che riporta il valore 7 nella cella D3(che , riga 3, colonna 4) nelfoglio di lavoro attivo:

    ActiveSheet.Cells(3, 4) = 7Si pu anche usare la propriet Cellssu un oggetto Range. Cos facendo, loggettoRange restituito dalla propriet Cells relativo alla cella in alto a sinistra delriferimento Range. Per esempio, la seguente istruzione registra il valore 5 nella cellaattiva. In questo caso la cella attiva trattata come se fosse la cella A1nel foglio dilavoro:

    ActiveCell.Cells(1, 1) = 5

    Il reale vantaggio di questo tipo riferimento alle celle sarapprezzato nella discussione delle variabili e del looping (capitolo

    successivo).

    Per registrare il valore 5 nella cella direttamente sotto la cella attiva, si pu usarelistruzione:

    ActiveCell.Cells(2, 1) = 5

    Il precedente esempio recita: Inizia con la cella attiva e considera questa cella comecella A1. Registra la cella nella seconda riga e nella prima colonna.La seconda sintassi del metodo Cellsusa un singolo argomento con intervallo da 1a 16777216. Questo numero corrisponde al numero delle celle in un foglio di lavoro(65536 righe per 256 colonne). Le celle sono numerate partendo da A1 e

    continuando a destra e poi sotto nella riga successiva. La 256ma

    cella IV1 e la257ma A2.Il prossimo esempio registra il valore 2 nella cella H3 (la quale la 520macella nelfoglio di lavoro) del foglio di lavoro attivo:

    ActiveSheet.Cells(520) = 2

    Per mostrare il valore nellultima cella del foglio di lavoro (IV65536) usa questaespressione:

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    41/57

    Uso avanzato di MS Excel 41

    MsgBox ActiveSheet.Cells(16777216)

    La sintassi pu essere anche usata con un oggetto Range. In questo caso, la cellarestituita relativa alloggetto Range restituito. Per esempio, se loggetto Range A1:D10(40 celle), la propriet Cellspu avere un argomento da 1 a 40 e restituisceuna delle celle nelloggetto Range. Nel seguente esempio, viene registrato il valore

    2000 nella cella A2 perch A2 la quinta cella (contando dallalto e a destra, poiandando in basso) nellintervallo di riferimento:

    Range (A1:D10).Cells(5) = 2000

    Nel precedente esempio, largomento per la propriet Cellsnon ha limitidi valori fra 1 e 40. Se largomento eccede il numero delle cellenellintervallo, il calcolo continua come se lintervallo fosse pi largodellattuale. Perci, con una dichiarazione come la precedente sipotrebbe cambiare il valore in una cella esterna allintervallo A1:D10.

    La terza sintassi per la propriet Cellsrestituisce tutte le celle sul foglio di lavoro di

    riferimento. Al contrario delle altre due sintassi, in questa, i dati non sono restituiti inuna singola cella. Questo esempio usa il metodo ClearContents sullintervallorestituito usando la propriet Cells su un foglio di lavoro attivo. Il risultato che icontenuti di ogni cella sul foglio di lavoro vengono cancellati:

    ActiveSheet.Cells.ClearContents

    Cosa sapere degli oggetti

    Nelle sezioni precedenti sono stati introdotti sommariamente gli oggetti (incluse lecollezioni), le propriet e i metodi. In questa sezione vengono aggiunti altri concettiessenziali:

    Concetti essenziali da ricordare

    Gli oggetti hanno propriet e metodi unici.

    Ogni oggetto ha il suo insieme di propriet e metodi. Alcuni oggetti, comesempre, condividono alcune propriet (esempio Name) e alcuni metodi(esempio Delete).

    Si possono manipolare oggetti senza selezionarli.

    Di fatto molto pi efficiente eseguire azioni su oggetti senza selezionarliprima. Quando si registra una macro, generalmente Excel seleziona il primooggetto. Questo non necessario e potrebbe effettivamente far eseguire lamacro pi lentamente.

    importante capire il concetto di collezioni.

  • 7/24/2019 VBA_Excel_dispense_parziale_v004[1].pdf

    42/57

    Uso avanzato di MS Excel 42

    Molte volte lutente accede ad un oggetto indirettamente, riferendosi invecealla relativa collezione. Per esempio, per accedere alloggetto chiamato Myfiledi un Workbook, si fa riferimento alla collezione Workbookscome segue:

    Workbooks(Myfile.xls)

    Questa specifica si riferisce ad un oggetto, che nel libro di lavoro.

    Propriet possono restituire un riferimento ad un altro oggetto. Per esempio,nella seguente espressione, la propriet Font restituisce un oggetto Fontcontenuto in un oggetto Range:

    Range(A1).Font.Bold = True