Vous êtes sur la page 1sur 62

EXcel VBA X tutti - Obiettivi

Excel VBA Per Tutti


Indice

Introduzione - Obiettivi

Lezione 1 - Ambiente di sviluppo La piattaforma di sviluppo Il generatore di Macro

Lezione 2 - La sintassi Basic Le Routine La Visibilit Prendere delle decisioni Operatori Logici, Matematici e di Confronto Ripetizione di azioni con i cicli Funzioni di manipolazione delle stringhe Eliminazione degli errori: Il Debug

Lezione 3 - Creare l'Interfaccia Utente Oggetti e Propriet Il codice associato allInterfaccia utente I Metodi Esempio riepilogativo

Lezione 4 - Gli Oggetti di Excel Gli Oggetti Application e WorkBook Gli Oggetti WorkSheet e Range Le Propriet Cells, OffSet e Union Le Propriet Columns e Rows

Lezione 5 - Esempi Pratici Esempi di automazioni su oggetti Excel 1 Esempi di automazioni su oggetti Excel 2 Esempi sulle interfaccia utente 1 Esempi sulle interfaccia utente 2 Esempi sulle interfaccia utente 3

Cognolato Studio 2004


file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/indice.html[15/02/2010 00:56:49]

EXcel VBA X tutti - Obiettivi

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/indice.html[15/02/2010 00:56:49]

EXcel VBA x tutti - Obiettivi

Obiettivi

Visual Basic for Application (VBA) presente nelle applicazioni Office come: Word, Excel, Power Point ed Access. La sua funzione quella di rendere programmabili questi applicativi, allo scopo di personalizzarli a seconda delle esigenze specifiche dell'utente. La mia esperienza deriva dall'utilizzo quotidiano del PC e dalla scoperta di questa potenzialit giorno per giorno, aiutato anche dalla mia professione di programmatore. Molte persone utilizzano correntemente il pacchetto Office, normalmente in uso in molti personal computer, ma ignorano questo tipo di funzionalit. Il mio obiettivo quello di fornire le basi su questo tipo di programmazione anche a chi non un programmatore professionista. La trattazione riguarder solamente Microsoft Excel le cui prestazioni aumentano notevolmente grazie a VBA, tuttavia non va dimenticato che questo tipo di funzionalit pu essere usato anche in Word, Access e Power Point. Requisito fondamentale per coloro i quali intendessero seguirmi in questo percorso formativo, solamente una discreta conoscenza di Microsoft Excel. Non voglio tediare il lettore con concetti astrusi e complicati, ma solamente dare familiarit con l'ambiente di sviluppo e un'infarinatura sui concetti della programmazione VBA, quindi dare a chi apprende un minimo di indipendenza nell'iniziare a personalizzare i propri fogli di lavoro. Inizier col descrivere l'ambiente di lavoro in cui andremo ad operare. In seguito spiegher come creare un'interfaccia utente (finestra di comandi) e come inserire il codice per farla funzionare. Le ultime sezioni saranno dedicate ad esempi pratici. Affrontare un nuovo argomento sempre un passo difficile, ma quando comincerai a vedere i primi risultati concreti, il mondo di Excel VBA ti affasciner!

Buona lettura!

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/introduzione.html[15/02/2010 00:56:51]

EXcel VBA x tutti - Ambiente

Ambiente di sviluppo

Lambiente di sviluppo di Visual Basic For Application facilmente accessibile dal men "Strumenti"; "Macro"; "Visual Basic Editor". Qui avremo modo di progettare e sviluppare programmi in Visual Basic, in virt del fatto che gli strumenti sono perfettamente integrati con Microsoft Excel. I progetti realizzabili con VBA possono essere di tre tipi: Progetto di documento Progetto di modello Progetto di componente aggiuntivo dellapplicazione

Nei "Progetti di documento" tutti i componenti del progetto sono legati alla cartella di lavoro utilizzata al momento, e non andranno ad intaccare ne lapplicazione Excel, ne i suoi modelli generali; quindi il codice rimarr confinato nel file aperto. Nel momento in cui il file cambier posizione il nostro progetto si sposter con esso. Di conseguenza, quando chiuderemo la nostra cartella e ne apriremo una nuova non avremo a disposizione il progetto da noi creato. Nei "Progetti di modello" invece il codice generato associato al modello generale di Microsoft Excel, quindi aprendo una nuova cartella Excel o qualsiasi cartella esistente avremo sempre a disposizione il nostro progetto VBA. I componenti aggiuntivi sono strumenti per ampliare le funzionalit di Microsoft Excel, come, ad esempio, un comando personalizzato richiamadile dalla barra degli strumenti o da una voce di men. Anche questa tipologia di progetto non legata solamente al documento corrente ma direttamente allapplicazione Excel.

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Ambiente.html[15/02/2010 00:56:51]

EXcel VBA x tutti - Ambiente

La piattaforma di sviluppo

Leditor visual Basic programmazione:

offre

numerosi

strumenti

avanzati

di

sviluppo e

1. Finestra di progetto: mostra lelenco gerarchico dei progetti aperti e di tutti i moduli di codice e finestre di interfaccia appartenenti ad un determinato progetto. Ad ogni progetto sono associate quattro cartelle a seconda del tipo di modulo che viene sviluppato. Microsoft Excel oggetti: contiene il codice legato ai fogli ed alla cartella di lavoro. Form: contiene le interfaccia utente associate al progetto. Moduli: contiene i moduli di codice generici. Moduli di classe: contiene i moduli per la creazione di nuove classi di oggetti. 2. Finestra Userform (interfaccia utente): Questa finestra ci permette di creare finestre di interfaccia utente personalizzate da applicare ai programmi VBA, simili in tutto e per tutto a quelle proprie di Microsoft Excel. 3. Finestra delle propriet: mostra lelenco, alfabetico o per categorie, di tutte le propriet (altezza, larghezza, colori, font, descrizioni, ecc) appartenenti ad un controllo contenuto in uno "UserForm" o ad uno "UserForm" stesso. 4. Modulo di codice: Luogo dove viene scritto il codice Visual Basic. Esistono tre

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Ambiente1.html[15/02/2010 00:56:52]

EXcel VBA x tutti - Ambiente tipi di moduli di codice: generici, di classe e di userform. 5. Casella degli strumenti: contiene una serie di controlli necessari per costruire linterfaccia utente. Per spostare i controlli nella "UserForm" basta cliccare sulloggetto interessato e mantenendo premuto il tasto sinistro trascinarlo sulla finestra Userform. 6. Finestra immediata; Finestra Variabili locali; Finestra espressioni di controllo: Finestre usate per il Debug (eliminazione degli errori sintattici e logici) del codice. 7. Visualizzatore degli oggetti: elenco di tutti gli oggetti, metodi, propriet ed eventi appartenenti ad un controllo o allapplicazione Excel.

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Ambiente1.html[15/02/2010 00:56:52]

EXcel VBA x tutti - Ambiente

Il generatore di Macro
Excel permette la registrazione di macro, cio la registrazione delle azioni eseguite sullinterfaccia di Microsoft Excel, per poi essere ripetute quando ve ne fosse la necessit. Le applicazioni Office offrono un modo molto semplice per creare macro grazie al "Registratore di macro". Il processo molto simile alla registrazione di musica in una cassetta. Quando viene richiamata la registrazione, vengono ripetute le stesse azioni compiute durante la registrazione. In questo modo le istruzioni vengono tradotte in codice Visual Basic e salvate in un modulo di codice interno al progetto della cartella di lavoro Excel corrente. La registrazione di macro molto utile perch permette di vedere lesatta sintassi necessaria per la gestione degli oggetti Excel. Essa inoltre permette di scrivere codice Visual Basic con maggiore facilit, evitando continue ricerche nella guida in linea. Il codice registrato sottoforma di macro non sar perfettamente adeguato alle esigenze di progettazione, ma spesso sar una utile base di partenza per la scrittura dei programmi del nostro progetto, che in seguito verr spostato e/o modificato grazie alleditor di Visual Basic. Vediamo una semplice dimostrazione: 1. Apriamo un nuovo documento di Microsoft Excel. Dalla voce "Macro" del men "Strumenti" selezioniamo "Registra nuova macro".

2. Sulla finestra "Registra clicchiamo "OK".

macro"

assegniamo

il

nome

"MacroScrivi"

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Ambiente2.html[15/02/2010 00:56:52]

EXcel VBA x tutti - Ambiente

3. A questo punto apparir sul foglio un pulsante con un quadrattino nero il quale indica che iniziata la registrazione. Selezioniamo la casella "B2" dal foglio Excel e scriviamo "Ciao Mondo", quindi clicchiamo sul quadrattino per terminare la registrazione. 4. Creiamo unaltra macro che chiameremo "MacroCancella" usando lo stesso procedimento. 5. Durante la registrazione selezioniamo nuovamente la cella "B2" e cancelliamo la scritta "Ciao Mondo". A questo punto abbiamo creato due Macroistruzioni, visibili selezionando "Macro" dalla voce "Macro" del men "Strumenti". 6. Selezioniamo una delle due Macro e clicchiamo "Modifica". Entreremo nellEditor di Visual Basic dove potremo notare il nuovo modulo generico contenente il codice di funzionamento delle macro: "MacroScrivi" e "MacroCancella".

7. Torniamo al foglio Excel, ed associamo le macro appena create a due pulsanti di comando. Inseriamo la barra degli strumenti "Moduli" dal men "Visualizza", "barra degli strumenti".

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Ambiente2.html[15/02/2010 00:56:52]

EXcel VBA x tutti - Ambiente

Clicchiamo licona relativa al pulsante e tracciamo un pulsante sul foglio di lavoro. A questo punto si aprir la finestra di dialogo "Assegna Macro", selezioniamo "MacroScrivi" e digitiamo "OK". Creiamo un nuovo pulsante sul foglio e ripetiamo lo stesso procedimento per assegnare "MacroCancella".

Complimenti, avete creato la vostra prima macro in Excel!


Provate a crearne delle nuove usando lo stesso procedimento e leggete il codice Visual Basic associato.

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Ambiente2.html[15/02/2010 00:56:52]

EXcel VBA x tutti - La Sintassi Basic

La sintassi Basic

Affinch le nostre applicazioni funzionino necessario inserire il codice Basic, cio le istruzioni che indicano al computer quali comandi eseguire ed in che ordine. Il codice viene inserito nelle finestre "Modulo di codice" all'interno dell'Editor di "Visual Basic". Per creare un nuovo modulo di codice, aprire un nuovo documento Excel ed entrare nell'Editor VBA. Quindi scegliere la voce "Modulo" dal men "Inserisci".

Classificazione dei Dati


I dati utilizzati dai moduli di codice durante l'esecuzione dei programmi vengono memorizzati all'interno delle "Costanti" e delle "Variabili". Le variabili rappresentano dati il cui valore cambia durante l'esecuzione del programma, le costanti invece contengono sempre lo stesso valore predefinito durante tutta l'elaborazione. La sintassi di variabili e costanti la seguente: Dim NomeVariabile as Tipovariabile Const NomeVariabile as TipoCostante = ValoreCostante Il nome di una variabile non pu: Superare i 255 caratteri. Contenere punti o operatori matematici. Non deve essere una parola riservata di Visual Basic, cio quelle parole che servono per impartire le istruzioni al programma; come ad esempio: Loop, Function, Sub, End, Do, Integer, Case, If, For, Else, Then, Select.

Le variabili utilizzate non sono tutte uguali, possono essere numeri interi, numeri decimali, stringhe di caratteri, date ecc... Valori diversi hanno bisogno di un trattamento diverso. Per questo motivo in Visual Basic esistono tipi di dati differenti che possono essere dichiarati in modo esplicito. Tipo Byte Long Single Descrizione Accetta numeri da 0 a 255 Accetta numeri da -2147483648 a 2147483647 Accetta numeri da -3,402823E38 a -1,401298E-45 per valori negativi Da 1,401298E-45 a 3,402823E38 per valori positivi Accetta numeri da -1,79769313486232E308 a 4,94065645841247E-324 per valori negativi Da 4,94065645841247E-324 a 1,79769313486232E308 per valori positivi Accetta da 0 a 65000 caratteri

Integer Accetta numeri da -32768 a 32767

Double

Boolean Accetta solo 2 valori "True" o "False" String

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi.html[15/02/2010 00:56:53]

EXcel VBA x tutti - La Sintassi Basic Date Variant Date dal 1 gennaio 100 al 31 dicembre 9999 Se contiene solo numeri: come Double. Se contiene anche caratteri: come String.

Per indicare con chiarezza che tipo di dato stiamo usando dobbiamo dichiarare le variabili. Visual Basic assegna le variabili non dichiarate, o dichiarate senza specificare il tipo di dato, al tipo Variant. Anche se non necessario, buona norma dichiarare sempre variabili e costanti all'interno del codice, questo aiuta a ridurre gli errori di scrittura del codice. Quando viene inserita la parola chiave "Option Explicit" in cima al modulo di codice, Visual basic, in caso di mancata dichiarazione di una variabile, dar una segnalazione di errore.

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi.html[15/02/2010 00:56:53]

EXcel VBA x tutti - La Sintassi Basic

Le Routine
Con la creazione di routine possibile dividere il codice in blocchi separati. Questo permette di rendere il programma pi leggibile ed individuare facilmente gli errori. Utilizzare i moduli permette anche di rendere comune parti di codice a pi programmi. In Visual Basic esistono due tipi di routine. Routine Sub: svolgono azioni ma non restituiscono un valore. Routine Function: svolgono azioni e restituiscono un valore.
NB: un modulo di codice non coincide necessariamente con una routine, in quanto un modulo pu contenere pi routine contemporaneamente.

Apriamo un modulo di codice dall'editor di Visual Basic e creiamo la nostra prima routine digitando il codice seguente. Sub PrimaRoutine() ' La riga successiva visualizza un messaggio MsgBox "Ciao Mondo", vbInformation, "Ciao" End Sub Posizioniamo il cursore all'interno della routine e clicchiamo il tasto avvia: Soffermiamo la nostra attenzione su due cose: La riga contrassegnata dall'apice iniziale indica una riga di commento e quindi verr ignorata durante l'esecuzione del programma. E' importante scrivere commenti nel listato perch aiuta a rendere pi comprensibili i nostri programmi. La riga successiva definisce una finestra di messaggio col comando MsgBox. La sintassi : MsgBox "Testo all'interno della finestra", vbInformation, _ "Testo che appare sulla barra del titolo" "vbInformation" fa apparire l'icona col punto di domanda all'interno della finestra. Esistono altre opzioni che vengono fornite dall'elenco automatico durante la stesura del codice.

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi1.html[15/02/2010 00:56:54]

EXcel VBA x tutti - La Sintassi Basic

La Visibilit
La visibilit di una variabile, o di una costante, definisce la sua disponibilit all'interno del progetto. Puoi dichiarare variabili e costanti a tre livelli: Livello locale: vanno dichiarate all'interno della routine e sono disponibili solo all'interno di essa. Livello di modulo: Vanno dichiarate in testa alla finestra di modulo di codice e sono viste da tutte le routine contenute all'interno del modulo di codice. Livello pubblico: Vanno dichiarate in testa alla finestra di modulo di codice e sono viste da tutte le routine e da tutti i moduli di codice appartenenti al progetto. Vediamo un esempio: ' Le seguenti variabili sono visibili in tutto il progetto Public risultato1 As Integer Public risultato2 As Integer Public sottraendo As Integer ' La seguente variabile visibile a livello di modulo Private operatore As Integer Sub somma() ' La seguente variabile visibile ' solo all'interno della routine Dim Addendo As Integer operatore = 5 Addendo = 5 risultato1 = Addendo + operatore MsgBox "Il risultato della somma : " & risultato1, _ vbInformation, "Somma" End Sub Sub sottrazione() ' La seguente variabile visibile ' solo all'interno della routine Dim sottraento As Integer sottraento = 2 risultato2 = operatore - sottraento MsgBox "Il risultato della sottrazione : " & risultato2, _ vbInformation, "Sottrazione" End Sub Posizionandosi all'interno di una delle routine e premendo il tasto azione noteremo il risultato: Soffermiamo la nostra attenzione su alcuni aspetti: Il carattere "_" alla fine di una riga indica che si desidera continuare l'istruzione alla riga successiva. Il carattere "&" serve per concatenare due stringhe di caratteri. L'assegnazione del valore alla variabile avviene seguendo la sintassi: NomeVariabileStringa = "Stringa di caratteri" ' una stringa di caratteri va immessa tra doppi apici. NomeVariabileNumerica = numero ' il numero non immesso tra doppio apice. L'attributo di visibilit pu essere assegnato anche alle Function e alle Sub. Esempio: ' La procedura seguente vista solamente a livello di modulo Private Sub visualizza() Dim numero1 As Integer Dim numero2 As Integer Dim numero3 As Integer numero1 = 15 numero2 = 5 numero3 = sottrazione(numero1, numero2) MsgBox "Il risultato della differenza : " & numero3, _ vbInformation, "differenza" End Sub ' La funzione seguente vista a livello di progetto Public Function sottrazione(operando1 As Integer, _

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi2.html[15/02/2010 00:56:54]

EXcel VBA x tutti - La Sintassi Basic operando2 As Integer) As Integer sottrazione = operando1 - operando2 End Function

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi2.html[15/02/2010 00:56:54]

EXcel VBA x tutti - La Sintassi Basic

Prendere delle decisioni


Una istruzione condizionale uno speciale comando che permette di valutare una o pi condizioni per eseguire un particolare blocco di istruzioni. Il concetto : se si verifica la condizione allora esegui questa istruzione. In Visual Basic le istruzioni condizionali pi semplici sono: If "condizione" then "istruzione" End if If "condizione" then "istruzione" else "istruzione" End if Vediamo un esempio: Sub valuta() VariabileInput = _ InputBox("immettere un numero o una stringa di caratteri") 'inizio dell istruzione condizionale If IsNumeric(VariabileInput) Then MsgBox "la variabile un numero", vbInformation, "valutazione 1" Else MsgBox "la variabile un carattere o una stringa di caratteri", _ vbInformation, "valutazione 2" End If 'fine dell istruzione condizionale End Sub Soffermiamo la nostra attenzione su due aspetti: Nella routine usata listruzione: "IsNumeric" che definisce se il valore memorizzato nella variabile "VariabileInput" numerico o stringa. Listruzione "InputBox" apre una finestra contenente una casella di testo, se immettiamo del testo e clicchiamo "Ok" la funzione restituisce il valore digitato. Con listruzione ElseIf possibile valutare pi espressioni allinterno dello stesso blocco. Esempio: Sub ValutaNumero() VariabileInput = InputBox("immettere un numero") If VariabileInput <= 1 Then MsgBox "la variabile minore o uguale a 1", vbInformation, _ "valutazione 1" ElseIf (VariabileInput > 1) And (VariabileInput <= 5) Then MsgBox "la variabile maggiore di 1 e minore o uguale a 5", _ vbInformation, "valutazione 2" ElseIf (VariabileInput > 5) And (VariabileInput <= 10) Then MsgBox "la variabile maggiore di 5 e minore o uguale a 10", _ vbInformation, "valutazione 3" Else MsgBox "la variabile maggiore di 10", vbInformation, _ "valutazione 4" End If End Sub Soffermiamo la nostra attenzione su un aspetto: Nella routine sono usati degli operatori logici e matematici come: "And", ">", "<=". Essi verranno trattati nel prossimo paragrafo. Una istruzione molto simile a "If ... ElseIf ..." "Select Case ..." Proviamo a modificare lesempio precedente: Sub valutaNumero() VariabileInput = InputBox("immettere un numero")

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi3.html[15/02/2010 00:56:55]

EXcel VBA x tutti - La Sintassi Basic Select Case VariabileInput Case Is <= 1 MsgBox "la variabile minore o vbInformation, _ "valutazione 1" Case 2 To 5 MsgBox "la variabile maggiore a 5", _ vbInformation, "valutazione 2" Case 6 To 10 MsgBox "la variabile maggiore a 10", _ vbInformation, "valutazione 3" Case Else MsgBox "la variabile maggiore _ "valutazione 4" End Select End Sub

uguale a 1",

di 1 e minore o uguale

di 5 e minore o uguale

di 10", vbInformation,

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi3.html[15/02/2010 00:56:55]

EXcel VBA x tutti - La Sintassi Basic

Operatori Logici, Matematici e di Confronto


Operatori matematici: Operatore + * / \ Mod ^ Somma Sottrazione Moltiplicazione Divide e restituisce un numero intero Divide e restituisce solo il resto Eleva a potenza Funzione Utilizzo Risultato = X + Y Risultato = X - Y Risultato = X * Y Risultato = X \ Y Risultato = X Mod Y Il resto un intero Risultato = X ^ Y

Divide e restituisce un numero a virgola mobile Risultato = X / Y

Gli operatori logici gestiscono i valori true e false. Di seguito sono riportati gli operatori logici pi comuni: Operatore And Or Not Funzione If (condizione1) And (condizione2) then... Verificata se entrambe le condizioni sono vere. If (condizione1) Or (condizione2) then... Verificata se almeno una condizione vera. If Not (condizione1) then... Verificata se condizione1 falsa.

Operatori di confronto: Operatore < <= > >= <> Minore Minore o Uguale Maggiore Maggiore o Uguale Diverso (utilizzabile anche con le stringhe) Funzione

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi4.html[15/02/2010 00:56:55]

EXcel VBA x tutti - La Sintassi Basic

Ripetizione di azioni con i cicli


Nei programmi spesso necessario svolgere molte volte una determinata azione, variando solamente alcuni parametri. I comandi descritti in questa sezione eseguono ripetutamente le stesse istruzioni, finch non si verifica una determinata condizione. Il ciclo "For.. Next" esegue ripetutamente un blocco di codice incrementando (o decrementando) una variabile specifica, finche l'indice non raggiunge il valore indicato dall'attributo "To". Esempio: Sub CicloFor() For i = 1 To 10 MsgBox "Il valore incremento " & i, _ vbInformation, "Ciclo For" Next End Sub Ora prova a sostituire la riga "For i = 1 To 10" con "For i = 10 To 1 step -1" Il ciclo "Do loop" continua ad eseguire il codice fino a quando non soddisfatta una condizione. Se non viene specificata una condizione dinterruzione, o se la condizione non impostata in modo non corretto, il ciclo continua allinfinito. Esistono tre tipologie di ciclo "Do": Ripeti finch la condizione non risulta falsa (cicla per falso). Sub CicloDo() i = 1 Do MsgBox "Il valore incremento " & i, _ vbInformation, "Ciclo For" i = i + 1 Loop Until i > 10 End Sub Ripeti finch la condizione non risulta vera (cicla per vero). Sub CicloDo() i = 1 Do While i < 10 MsgBox "Il valore incremento " & i, _ vbInformation, "Ciclo For" i = i + 1 Loop End Sub Uscita anticipata dal ciclo: Sub CicloDo() i = 1 Do MsgBox "Il valore incremento " & i, _ vbInformation, "Ciclo For" i = i + 1 If i > 10 Then Exit Do Loop End Sub

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi5.html[15/02/2010 00:56:56]

EXcel VBA x tutti - La Sintassi Basic

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi5.html[15/02/2010 00:56:56]

EXcel VBA x tutti - La Sintassi Basic

Funzioni di manipolazione delle stringhe


La tabella seguente, riassume alcune delle funzioni predefinite di Visual Basic per manipolare le Stringhe. Funzione Len() LCase() UCase() Descrizione Esempio Risultato 7 stringa STRINGA = agnirtS Str nga ring 5 "Stringa " " Stringa" "Stringa" "10" 10

Determina la lunghezza NomeVar = Len("Stringa") di una stringa Converte i caratteri da NomeVar = LCase("Stringa") maiuscoli a minuscoli Converte i caratteri da NomeVar = UCase("Stringa") minuscoli a maiuscoli NomeVar StrReverse("Stringa")

StrReverse() Inverte le stringhe Left() Right() Mid() InStr() LTrim() RTrim() Trim() CStr() *CInt()

Estrae i primi caratteri NomeVar = Left("Stringa", 3) di una stringa Estrae gli ultimi NomeVar = Right("Stringa", 3) caratteri di una stringa Estrae i caratteri di una NomeVar = Mid("Stringa", 3,4) stringa Trova una parte stringa su unaltra Elimina iniziali Elimina finali tutti tutti di NomeVar "n") = InStr("Stringa",

gli spazi gli spazi

NomeVar = LTrim(" Stringa ") NomeVar = RTrim(" Stringa ")

Elimina tutti gli spazi NomeVar = Trim(" Stringa ") iniziali e finali Converte in una stringa NomeVar = CStr(10) Converte in un numero NomeVar = CInt("10") intero

*Ogni tipologia di dato possiede la propria funzione di conversione: CDbl(); CSng(); CLng(); Cbool(); CByt(); Cdate().

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi6.html[15/02/2010 00:56:56]

EXcel VBA x tutti - La Sintassi Basic

Eliminazione degli errori: Il Debug


Una volta sviluppato il codice possibile usare gli strumenti di Debug di Visual Basic per vedere l'esecuzione del codice passo-passo, ed eliminare eventuali errori. Eseguendo un programma possibile interrompere l'esecuzione ad una determinata riga e valutare lo stato delle variabili. Questo possibile impostando dei punti di interruzione. Per determinare i punti di interruzione posizionare il cursore nella riga interessata e selezionare la voce "imposta/rimuovi punto di interruzione" dal men "Debug" (oppure premere il tasto "F9").

Quando lanciamo il programma, premendo il comando "Esegui" (o il tasto "F5"), l'esecuzione verr bloccata all'altezza del primo punto di interruzione incontrato. A questo punto rimangono tre alternative: interrompere l'esecuzione, completare l'esecuzione o eseguire il codice riga per riga (premendo il tasto F8).

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi7.html[15/02/2010 00:56:57]

EXcel VBA x tutti - La Sintassi Basic

Visual Basic mette a disposizione alcuni strumenti, per visualizzare i valori che assumono le variabili nel corso dell'elaborazione. Il pi immediato la casella di descrizione che appare posizionando il cursore sulla riga in esecuzione, essa simile alla casella di descrizione dei comandi che appare quando mantieni il cursore per qualche istante su un comando. Visual Basic offre tre finestre nelle quali possibile monitorare il valore delle variabili nel corso dell'elaborazione. La finestra "Variabili Locali" La finestra "Espressioni di controllo" La finestra "Immediata" Tutte e tre sono disponibili dal men "Visualizza". La finestra "Variabili Locali" mostra semplicemente i valori di tutte le variabili contenute nella routine corrente mentre in esecuzione.

La finestra "Espressioni di controllo" molto simile alla precedente, ma mostra solamente le variabili selezionate con doppio Click del mouse e trascinate all'interno della finestra. Inoltre tratta tutte le variabili disponibili nel modulo, e non solo quelle locali.

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi7.html[15/02/2010 00:56:57]

EXcel VBA x tutti - La Sintassi Basic

Per visualizzare le variabili nella "Finestra Immediata" necessario aggiungere nel listato del programma la riga seguente: Debug.Print NomeVariabile Nella finestra verr visualizzato il valore assunto dalla variabile "NomeVariabile", nel punto in cui stata inserita l'istruzione.

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Sintassi7.html[15/02/2010 00:56:57]

EXcel VBA x tutti - Creare interfacce utente

Creare l'Interfaccia Utente

LInterfaccia utente rende la nostra applicazione semplice ed intuitiva a chi la utilizza. Le interfacce utente sono formate dalle finestre (Userform) e dagli oggetti in esse contenute, come i pulsanti di comando e le caselle di testo. Vediamo insieme come creare una semplice "Userform". Apriamo lEditor di VBA ed inseriamo una nuova finestra scegliendo la voce "Userform" dal men "Inserisci". Se non gi presente, inseriamo la casella degli strumenti, selezionando lomonima voce dal men "Visualizza". Notiamo che, appena inseriamo una nuova Userform, appare licona di riferimento della finestra creata nella cartella "Form" della finestra di progetto. Trasciniamo dalla casella degli strumenti una casella di testo e due pulsanti di comando nella Userform appena creata, in modo da ottenere il seguente risultato.

Ora, se non fosse gi presente, apriamo la finestra propriet dal men "Visualizza". Per ora vi basti sapere che le propriet sono le caratteristiche

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Finestre.html[15/02/2010 00:56:58]

EXcel VBA x tutti - Creare interfacce utente inerenti alle finestre ed agli oggetti in essa contenute. Quando un oggetto viene selezionato, nella finestra propriet compariranno tutte le caratteristiche appartenenti a quel determinato oggetto. La propriet pi importante sicuramente "Name", che identifica il nome delloggetto. Visual Basic definisce un nome di default agli oggetti, come "CommandButton1", tuttavia utile sostituirlo con un nome che sia facile da ricordare, ed il pi possibile inerente alla funzione per cui il comando stato progettato. Altre propriet definiscono laspetto delloggetto come: colori, dimensioni, descrizioni e font delle descrizioni. Proviamo ad abbellire la Userform appena creata. E possibile modificare direttamente le dimensioni degli oggetti trascinando le maniglie poste sui contorni delloggetto stesso. Assegniamo i nomi ai nostri oggetti, selezionandoli uno per uno, e modificando la propriet "Name", dalla Finestra delle propriet, nel modo seguente. Assegniamo: "FrmCiao" alloggetto Userform; "TxtCiao" alloggetto testo; "CmdCiao" al primo pulsante di comando; "CmdEsci" al secondo pulsante.

Modifichiamo le etichette attribuendo alle propriet "Caption": "Ciao Mondo" a "FrmCiao"; "Invio" a "CmdCiao"; "Esci" a "CmdEsci".

Selezioniamo "Esegui" dal men "Esegui", il risultato sar il seguente:

Salviamo come Ciao.xls il documento Excel contenente la Finestra appena creata, questo esempio ci torner utile nelle sezioni successive.

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Finestre.html[15/02/2010 00:56:58]

EXcel VBA x tutti - Creare interfacce utente

Oggetti e Propriet
Ci soffermeremo sulla descrizione sintetica degli oggetti che appartengono alla casella degli strumenti, e di alcune delle loro caratteristiche principali. Alcune propriet sono comuni a molti, o a tutti, gli oggetti della casella degli strumenti, per comodit saranno descritte una sola volta.

Pulsante di comando Costituisce un fondamentale oggetto di attivazione degli eventi. Alcune delle principali propriet: Name: nome di riferimento dell'oggetto. Caption: etichetta con cui l'oggetto viene visualizzato sulle form. Font: caratteristiche del carattere dell'etichetta: tipo, grandezza, corsivo grassetto, colori. Height; Width; Top; Left: dimensioni e posizione dell'oggetto. Visibile: indica se l'oggetto visibile o nascosto (valore booleano: "True" o "False"). Enabled: indica se l'oggetto attivo o non attivo (valore booleano: "True" o "False"). Casella di testo Fondamentale oggetto di visualizzazione ed inserimento dei dati. Propriet: BackColor: colore di fondo. BorderStyle: indica se la casella avr un contorno semplice o a rilievo. ForeColor: colore per i caratteri del testo. MultiLine: consente la scrittura del testo su pi righe. Etichetta Oggetto di descrizione dei dati.

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Finestre1.html[15/02/2010 00:56:58]

EXcel VBA x tutti - Creare interfacce utente Propriet: AutoSize: adegua le sue dimensioni a quelle della stringa introdotta. Cornice Cornice di contenimento dei comandi, che vengono raggruppati secondo una struttura logica. Casella di Controllo Oggetto di scelta tra due alternative ("True" o "False"). Propriet: Value: determina il valore ("True" o "False"). Alignment: consente di disporre la descrizione a sinistra o a destra del controllo. Pulsante di Opzione Oggetto di scelta tra due alternative ("True" o "False"). Le Caselle di controllo ed i Pulsanti di Opzione sembrano avere la stessa funzione. Tuttavia se inseriamo i pulsanti di opzione in una cornice, sar possibile selezionarne uno solo alla volta, mentre le caselle di controllo posso essere selezionate pi di una alla volta.

Casella di riepilogo Finestra in cui possibile rappresentare una lista di dati. Propriet: Multiselect pu assumere tre valori: 1. Single: evidenzia un termine della lista alla volta. 2. Multi: consente pi selezioni. 3. Extended: consente pi selezioni ma i membri devono essere contigui. ListIndex: restituisce il numero di indice della voce selezionata. Casella combinata Costituisce una finestra di dati a discesa molto simile alla casella di riepilogo, infatti molte propriet sono le stesse. Propriet: Style pu assumere due valori: 1. fmStyleDropDownCombo: permette all'utente di scrivere al suo interno. 2. fmStyleDropDownList: non permette all'utente di scrivere al suo interno.

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Finestre1.html[15/02/2010 00:56:58]

EXcel VBA x tutti - Creare interfacce utente Barra di scorrimento Costituito da una barra di scorrimento in grado di attivare eventi in funzione dell'avanzamento raggiunto dal suo cursore. Propriet: Orientation: a seconda se definita fmOrientationHorizontal oppure fmOrientationVertical determina la posizione Verticale o Orizzontale della Barra. Value: restituisce un indice in funzione della posizione del cursore. Max: definisce il valore limite superiore. Min: definisce il valore limite inferiore. Pulsante di selezione costituito da una coppia di pulsanti in grado di incrementere o diminuire il valore del suo indice interno. Interruttore Simile al Pulsante di comando ma alterna due stadi "On" e "Off" (True o False). Pagine Finestra formata da schede ognuna delle quali pu contenere pi oggetti. Immagine Oggetto in grado di visualizzare delle immagini sulla Userform. Userform Anche Userform costituisce un oggetto dotato di propriet. Molte di queste sono gi state illustrate precedentemente. In aggiunta stata preposta la seguente propriet: BorderStyle: Modificano l'aspetto dello UserForm. Selezionando il tipo "0" non viene mostrato alcun contorno, mentre scegliendo "1" viene aggiunto un bordo nero di contorno.

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Finestre1.html[15/02/2010 00:56:58]

EXcel VBA x tutti - Creare interfacce utente

Il codice associato allInterfaccia utente


Per permettere alle nostre Userform di svolgere le funzioni, per le quali sono state create, necessario associare alle finestre ed agli oggetti in essa contenute il codice Visual Basic. Ogni finestra Userform associata ad una finestra di codice. Torniamo allesempio FrmCiao creato allinizio del capitolo. Selezioniamo la voce "Codice" dal men "Visualizza", oppure clicchiamo licona "Visualizza Codice" dalla "Finestra di Progetto", verr visualizzata la finestra modulo di codice associata a "FrmCiao". Nella parte superiore del modulo di codice si trovano due caselle combinate; quella a sinistra contiene tutti gli oggetti disegnati nella Form, mentre quella a destra contiene gli "Eventi" associati agli oggetti.

Gli "Eventi" sono le azioni, effettuate su un determinato oggetto, in grado di innescare lesecuzione di una routine associata a quell'oggetto. Ad esempio: selezioniamo dalla casella di sinistra loggetto "CmdCiao", verr creata una routine privata identificata dal nome delloggetto selezionato e dallevento "Click()" suddivisi dal simbolo "_" (Underscore). Questo indica che, nel momento in cui premeremo il pulsante "CmdCiao", verranno eseguite le istruzioni di codice interne alla routine di evento associata. Click non lunico evento associato al comando "Pulsante di comando". Ogni oggetto obbedisce ad una serie di eventi, tutti selezionabili dalla "Casella Eventi" posta in alto a destra del modulo di codice.

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Finestre2.html[15/02/2010 00:56:59]

EXcel VBA x tutti - Creare interfacce utente

Ecco illustrati alcuni eventi, associati agli oggetti che gi conosciamo. Userform Eventi associati: Activate; Deactivate: attivano o disattivano una procedura allatto dellapertura o della chiusura della Form. Initialize: imposta una procedura contenente particolari istruzioni da lanciare in via preliminare.

Pulsante di Comando Eventi associati: Click: la procedura si attiva col Click sul pulsante. DoubleClick: la routine si attiva col doppio Click. GetFocus: la routine si attiva quando loggetto selezionato. MoseUp: la routine si attiva quando il pulsante viene rilasciato. MouseMove: la routine si attiva quando il puntatore del mouse sfiora loggetto.

Casella di testo Eventi associati: Change: levento consiste nel cambiamento del testo contenuto nella casella. KeyPress: evento connesso allattivazione di qualsiasi tasto. KeyUp: evento connesso al rilascio di qualsiasi tasto.

Barra di scorrimento Eventi associati: Scroll: attiva una procedura quando viene modificata la posizione del cursore.

Torniamo al nostro esempio, nel modulo di codice associato a "FrmCiao". Allinterno della routine "CmdCiao_Click()" inseriamo: TxtCiao.Text = "Ciao Mondo" Creiamo una routine di evento su Click anche per il pulsante "CmdEsci" ed inseriamo il codice: Unload Me Salviamo "FrmCiao" e proviamo ad eseguirla. Soffermiamo la nostra attenzione su due aspetti: Le propriet possono essere modificate non solo attraverso la finestra delle propriet, ma anche attraverso il codice Basic, mentre il programma in esecuzione. Notiamo che nel nostro esempio stata assegnata la stringa "Ciao Mondo" alla propriet Text delloggetto "TxtCiao". In Visual Basic le propriet sono separate dalloggetto a cui appartengono tramite un punto. Tutte le caratteristiche legate a un oggetto specifico sono disponibili al momento della stesura del codice, grazie alla casella di descrizione, che appare dopo avere digitato il nome delloggetto ed il punto di separazione. Unload Me uno speciale comando che chiude la finestra in uso.

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Finestre2.html[15/02/2010 00:56:59]

EXcel VBA x tutti - Creare interfacce utente

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Finestre2.html[15/02/2010 00:56:59]

EXcel VBA x tutti - Creare interfacce utente

I metodi
Oltre alle propriet ogni oggetto possiede delle funzionalit dette "Metodi", che compiono delle specifiche azioni sull'oggetto stesso. Ad esempio il metodo "Show" dell'oggetto UserForm ha la funzione di visualizzare e rendere attiva una finestra. Proviamo ad associare la finestra "FrmCiao" ad un pulsante posto direttamente sul foglio Excel, come abbiamo gi visto nel capitolo riguardate il generatore di Macro. Utilizzando il Metodo "Show" potremo visualizzare la nostra finestra con un semplice Click sul pulsante appena creato.

Passiamo dall'Editor VBA al documento di Microsoft Excel attivo. Inseriamo la barra degli strumenti "Moduli" dal men "Visualizza", "Barra degli strumenti". Selezioniamo l'icona relativa al pulsante e tracciamo un pulsante sul foglio di lavoro. A questo punto si aprir la finestra di dialogo "Assegna Macro", selezioniamo il pulsante "Nuovo", cos facendo abbiamo creato una nuova macro. All'interno della routine digitiamo: FrmCiao.Show Chiudiamo l'Editor VBA e proviamo il pulsante. Ci soffermeremo ora sulla descrizione sintetica di alcuni dei Metodi pi usati per gli oggetti visti finora. Userform Show: visualizza ed attiva una Userform. Hide: Nasconde e disattiva una Userform.

Pulsante di Comando Move: cambia la posizione di un oggetto SetFocus: seleziona un oggetto e lo rende attivo.

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Finestre3.html[15/02/2010 00:57:00]

EXcel VBA x tutti - Creare interfacce utente Casella di testo Copy: copia il contenuto della casella di testo. Cut: taglia il contenuto della casella di testo. Paste: incolla il contenuto della casella di testo.

Casella combinata e Casella di riepilogo AddItem: consente l'aggiunta di un membro in coda alla lista. RemoveItem(n): consente la cancellazione del membro dislocato in posizione "n". Clear: cancella tutti i membri della lista. List: consente la selezione di un membro della lista specifico.

Nota tecnica: Nel corso del capitolo abbiamo sempre parlato di Oggetti in generale, tuttavia doveroso fare una distinzione. Classe di oggetti: una classe una costruzione logica, ossia il modello teorico dell'oggetto. Esempio: UserForm, TxtBox, CommandButton. Istanza di un oggetto: ossia la realizzazione fisica di un oggetto. Esempio: FrmCiao, CmdCiao, CmdEsci.

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Finestre3.html[15/02/2010 00:57:00]

EXcel VBA x tutti - Creare interfacce utente

Esempio riepilogativo
L'esempio seguente, utilizza alcuni dei controlli descritti nelle sessioni precedenti. Creiamo una nuova UserForm come illustrato in figura e definiamo le propriet degli oggetti appena creati come riportato in tabella.

Name FrmOggetti CboUno LstUno LstDue CmdAggiungi CmdRimuovi CmdCancella CmdEsci

Caption Prova Oggetti

TabIndex 0 1 2

Aggiungi >> <<Rimuovi Cancella Tutto Esci

3 4 5 6 7

ChkDisabilita Disabilita spostamenti

*La propriet TabIndex utile per spostare velocemente il cursore da un oggetto ad un altro usando il tasto Tabulatore (Tab). Il numero indica l'ordine di spostamento.

Di seguito sono riportate le routine da inserire nel modulo di codice associato alla UserForm "FrmOggetti". La Routine associata alla casella combinata "CboUno". Quando la casella perde la selezione, la stringa di caratteri appena digitati viene inserita nel men a discesa della casella combinata e nella casella di riepilogo "LstUno". Private Sub CboUno_Exit(ByVal Cancel As MSForms.ReturnBoolean) CboUno.AddItem CboUno.Text LstUno.AddItem CboUno.Text CboUno.Text = "" End Sub

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Finestre4.html[15/02/2010 00:57:00]

EXcel VBA x tutti - Creare interfacce utente Con un Click del mouse sul pulsante "CmdAggiungi", ogni elemento della casella di riepilogo "LstUno" viene valutato. Se la voce selezionata, l'elemento passa da "LstUno" a "LstDue". Private Sub CmdAggiungi_Click() Dim i As Integer For i = 0 To CboUno.ListCount - 1 If LstUno.Selected(i) = True Then LstDue.AddItem LstUno.List(i) LstUno.RemoveItem i LstUno.Selected(i) = False End If Next End Sub Con un Click del mouse sul pulsante "CmdRimuovi", ogni elemento della casella di riepilogo "LstDue" viene valutato. Se la voce selezionata, l'elemento passa da "LstDue" a "LstUno". Private Sub CmdRimuovi_Click() Dim i As Integer For i = 0 To LstDue.ListCount - 1 If LstDue.Selected(i) = True Then LstUno.AddItem LstDue.List(i) LstDue.RemoveItem i LstDue.Selected(i) = False End If Next End Sub Con un Click del mouse sul pulsante "CmdCancella", vengono cancellate tutte le voci presenti in "CboUno", "LstUno" e "LstDue". Private Sub CmdCancella_Click() CboUno.Clear LstUno.Clear LstDue.Clear End Sub Quando viene selezionata la casella di controllo "ChkDisabilita", vengono disabilitati i pulsanti "CmdAggiungi" e "CmdRimuovi". Private Sub ChkDisabilita_Change() If ChkDisabilita.Value = True Then CmdAggiungi.Enabled = False CmdRimuovi.Enabled = False Else CmdAggiungi.Enabled = True CmdRimuovi.Enabled = True End If End Sub Con un Click del mouse sul pulsante "CmdEsci", viene scarica la finestra. Private Sub CmdEsci_Click() Unload Me End Sub Utilizzare la Form molto semplice; inserisci una stringa di caratteri nella casella combinata "CboUno" e prova ad usare i comandi che hai appena creato, quindi valuta attentamente il codice Basic associato.

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Finestre4.html[15/02/2010 00:57:00]

EXcel VBA x tutti - Gli Oggetti Excel

Gli Oggetti Excel

Come le Userform, viste nel capitolo precedente, anche Microsoft Excel formato da oggetti che sono contraddistinti da propriet, metodi ed eventi. Il capitolo seguente introduce agli oggetti pi comuni e utilizzati di Excel VBA. I concetti da illustrare sarebbero innumerevoli, tuttavia la trattazione volutamente stringata, in quanto tutto ampiamente descritto nella guida in linea di Excel VBA. Suggerimento: Come gia stato spiegato nel secondo paragrafo del capitolo riguardante lambiente di sviluppo; un metodo molto efficace per comprendere la logica di utilizzo degli oggetti appartenenti ad Excel VBA creare delle macro e studiarne il codice Visual Basic associato. Nel caso si incontrasse unistruzione, un oggetto o una propriet di cui si vuole conoscere le caratteristiche, posizionarsi col cursore sulla parola interessata e premere il tasto "F1". Questo provoca lapertura della guida in linea direttamente sullelemento cercato.

L'oggetto Application
Rappresenta l'intera applicazione Microsoft Excel. L'oggetto Application contiene: Impostazioni e opzioni per l'intera applicazione, ad esempio molte delle opzioni della finestra di dialogo Opzioni del menu Strumenti. Metodi che restituiscono oggetti, quali Workbook (Cartella di lavoro), Worksheet (Foglio di lavoro), ActiveCell (Cella attiva), ActiveSheet (Foglio attivo) e cos via.

Molte delle propriet e dei metodi che restituiscono gli oggetti pi comuni dell'interfaccia utente, quale la cella attiva (propriet ActiveCell), le cartelle di lavoro (Workbooks), e i fogli di lavoro (Worksheets), possono essere utilizzati senza il qualificatore di oggetto Application. Invece di scrivere "Application.ActiveCell.Font.Bold = True" sar ad esempio possibile scrivere "ActiveCell.Font.Bold = True".

L'insieme Workbooks
Workbook rappresenta una cartella di lavoro di Microsoft Excel, ed un elemento dell'insieme Workbooks. L'insieme Workbooks contiene tutti gli oggetti Workbook aperti di Microsoft Excel. Vediamo alcuni esempi di metodi e propriet per la restituzione di un oggetto Workbook. Questo esempio chiude tutte le cartelle di lavoro aperte. Workbooks.Close Questo esempio aggiunge una nuova cartella di lavoro vuota col metodo Add.

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/OggettiExc.html[15/02/2010 00:57:01]

EXcel VBA x tutti - Gli Oggetti Excel Workbooks.Add Questo esempio apre il file Array.xls come cartella di lavoro di sola lettura. Workbooks.Open FileName:="Array.xls", ReadOnly:=True Questo esempio attiva la prima cartella di lavoro aperta Workbooks(1).Activate Il numero di indice determina l'ordine nel quale le cartelle di lavoro sono state aperte o create. Workbooks(1) la cartella di lavoro creata per prima, mentre Workbooks(Workbooks.Count) quella creata per ultima. L'attivazione di una cartella di lavoro non ne modifica il numero di indice. Nel calcolo del numero di indice sono comprese tutte le cartelle di lavoro, anche quelle nascoste. La propriet Name restituisce il nome della cartella di lavoro. Non possibile impostare il nome della cartella di lavoro utilizzando questa propriet. Per salvare la cartella di lavoro con un nome diverso, utilizzare il metodo SaveAs. Questo esempio attiva il foglio di lavoro Foglio1 della cartella di lavoro Cogn.xls, che deve essere gi aperta. Workbooks("Cogn.xls").Worksheets("Foglio1").Activate La propriet ActiveWorkbook restituisce la cartella di lavoro attiva. Questo esempio imposta il nome dell'autore della cartella di lavoro attiva. ActiveWorkbook.Author = "Mauro Cognolato" Per definire le routine di evento riguardanti la cartella Excel attiva esiste un modulo di codice predefinito denominato "ThisWorkbook", visibile in finestra di progetto. La casella degli oggetti contiene loggetto Workbook, mentre la casella eventi contiene tutti gli eventi associati a Workbook.

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/OggettiExc.html[15/02/2010 00:57:01]

EXcel VBA x tutti - Gli Oggetti Excel

Esempio, proviamo ad inserire la routine seguente nel modulo di codice "ThisWorkBook" della cartella di lavoro Ciao.xls, utilizzata nel capitolo precedente. Private Sub Workbook_Open() FrmCiao.show End Sub La routine attiva la UserForm "FrmCiao" quando viene aperto il documento Excel.

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/OggettiExc.html[15/02/2010 00:57:01]

EXcel VBA x tutti - Gli Oggetti Excel

L'insieme Sheets
Sheets linsieme di tutti i fogli della cartella di lavoro specificata o attiva, pu contenere l'oggetto Chart (grafico) o Worksheet (foglio di lavoro). L'insieme Sheets risulta utile quando si desidera restituire fogli di un qualsiasi tipo. Questo esempio stampa tutti i fogli della cartella di lavoro attiva. Sheets.PrintOut Questo esempio aggiunge due fogli grafico alla cartella di lavoro attiva, inserendoli dopo il foglio 2 della cartella di lavoro. Sheets.Add type:=xlChart, count:=2, after:=Sheets(2) Per restituire un singolo oggetto Chart o Worksheet la modalit Sheets(index), dove index il nome o il numero di indice del foglio. Questo esempio attiva Foglio1. Sheets("Foglio1").Activate Per specificare pi di un foglio, utilizzare Sheets(array). Questo esempio sposta i fogli Sheet4 e Sheet5 all'inizio della cartella di lavoro. Sheets(Array("Sheet4", "Sheet5")).Move before:=Sheets(1) di utilizzo

L'insieme Worksheets
Linsieme Worksheets un insieme di tutti gli oggetti Worksheet nella cartella di lavoro specificata o attiva. Ciascun oggetto Worksheet rappresenta un foglio di lavoro. Questo esempio sposta tutti i fogli di lavoro alla fine della cartella di lavoro. Worksheets.Move After:=Sheets(Sheets.Count) Questo esempio aggiunge due nuovi fogli di lavoro prima del foglio di lavoro 1 della cartella di lavoro attiva. Worksheets.Add Count:=2, Before:=Sheets(1) Per restituire un singolo oggetto Worksheet, utilizzare Worksheets(index), dove index il nome o il numero di indice del foglio di lavoro. Il numero di indice determina la posizione del foglio di lavoro sulla barra delle schede della cartella di lavoro. Worksheets(1) il primo foglio di lavoro da sinistra della cartella di lavoro, mentre Worksheets(Worksheets.Count) l'ultimo. Nel calcolo del numero di indice sono compresi tutti i fogli di lavoro, anche quelli nascosti. Questo esempio nasconde il foglio di lavoro 1 della cartella di lavoro attiva. Worksheets(1).Visible = False

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/OggettiExc1.html[15/02/2010 00:57:02]

EXcel VBA x tutti - Gli Oggetti Excel Il nome del foglio di lavoro visualizzato sulla scheda del foglio di lavoro. Questo esempio protegge con una password gli scenari di Foglio1. Worksheets(1).Visible = False Questo esempio nasconde il foglio di lavoro 1 della cartella di lavoro attiva. Worksheets("Foglio1").Protect password:="secret", scenarios:=True Quando il foglio attivo un foglio di lavoro, per farvi riferimento possibile utilizzare la propriet "ActiveSheet". Questo esempio attiva Foglio1 utilizzando il metodo Activate e imposta su orizzontale l'orientamento della pagina. Quindi stampa il foglio di lavoro. Worksheets("Foglio1").Activate ActiveSheet.PageSetup.Orientation = xlLandscape ActiveSheet.PrintOut Ogni oggetto Worksheet possiede in VBA un modulo di codice che contiene le routine di evento associate. Se inseriamo un nuovo foglio di lavoro, automaticamente verr creato il modulo di codice associato, mentre verr rimosso se eliminiamo il foglio di lavoro associato. La casella degli oggetti contiene l'oggetto "Worksheet" mentre la casella eventi contiene tutti gli eventi associati alloggetto "Worksheet".

L'insieme Range
Rappresenta una cella, una riga, una colonna, una selezione di celle contenente uno o pi blocchi contigui di celle. Per restituire un oggetto Range che rappresenta una singola cella o un intervallo di celle, la modalit di utilizzo Range(arg), dove arg determina l'intervallo. Questo esempio inserisce il valore della cella A1 nella cella A5. Worksheets("Foglio1").Range("A5").Value = _ Worksheets("Foglio1").Range("A1").Value Quando viene utilizzata senza qualificatore di oggetto (vale a dire un oggetto alla sinistra del punto), la propriet Range restituisce un intervallo del foglio attivo, purch il foglio attivo sia un foglio di lavoro. In caso contrario il metodo non produrr alcun risultato. Utilizzare il metodo Activate per attivare un foglio di lavoro prima di utilizzare la propriet Range senza un esplicito qualificatore di oggetto. Questo esempio riempie l'intervallo A1:H8 di numeri casuali impostando la formula in ogni cella dell'intervallo. Worksheets("Foglio1").Activate Range("A1:H8").Formula = "=Rand()"

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/OggettiExc1.html[15/02/2010 00:57:02]

EXcel VBA x tutti - Gli Oggetti Excel

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/OggettiExc1.html[15/02/2010 00:57:02]

EXcel VBA x tutti - Gli Oggetti Excel

La propriet Cells
La propriet Cells restituisce un oggetto che rappresenta tutte le celle del foglio di lavoro attivo. Se il documento attivo non un foglio di lavoro, questa propriet generer un errore. Propriet di sola lettura. La modalit di utilizzo Cells(row, column) dove row l'indice di riga e column l'indice di colonna, per restituire una singola cella. Questo esempio imposta il valore della cella A1 a 24. Worksheets(1).Cells(1, 1).Value = 24 Questo esempio imposta la formula della cella A2. ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)" Bench sia possibile utilizzare anche Range("A1") per restituire la cella A1, in alcuni casi la propriet Cells risulta pi conveniente, grazie al fatto di poter utilizzare delle variabili per la riga o la colonna. Questo esempio crea le intestazioni di riga e di colonna di Foglio1. Quando il foglio di lavoro stato attivato, la propriet Cells pu essere utilizzata senza dichiarare esplicitamente il foglio. La propriet restituisce infatti una cella del foglio attivo. Sub SetUpTable() Worksheets("Foglio1").Activate For TheYear = 1 To 5 Cells(1, TheYear + 1).Value = 1990 + TheYear Next TheYear For TheQuarter = 1 To 4 Cells(TheQuarter + 1, 1).Value = "Q" & TheQuarter Next TheQuarter End Sub Per restituire parte di un intervallo, utilizzare espressione.Cells(row, column), dove espressione restituisce un oggetto Range e row e column sono relative all'angolo superiore sinistro dell'intervallo. Questo esempio imposta la formula della cella C5. Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()" E anche possibile utilizzare Range(cell1, cell2), dove cell1 e cell2 sono oggetti Range restituiti dalla propriet Cells(row, column) che specificano la cella iniziale e la cella finale dell'intervallo. Questo esempio imposta lo stile della linea del bordo delle celle dell'intervallo A1:J10. With Worksheets(1) .Range(.Cells(1, 1), _ .Cells(10, 10)).Borders.LineStyle = xlThick End With L'istruzione With consente di eseguire una serie di istruzioni su un oggetto specificato senza riqualificare il nome dell'oggetto. Affinch alla propriet venga applicato loggetto dell'istruzione With, necessario che ogni occorrenza della propriet sia preceduta da un punto. In questo caso il punto indica che le celle si trovano sul foglio di lavoro 1. Senza il punto, la propriet Cells avrebbe restituito le celle del foglio attivo. Quando si utilizzano selezioni multiple, la propriet Areas si rivela particolarmente utile. Essa consente di dividere una selezione multipla in singoli oggetti Range, i quali vengono quindi restituiti sotto forma di insieme. possibile applicare la

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/OggettiExc2.html[15/02/2010 00:57:02]

EXcel VBA x tutti - Gli Oggetti Excel propriet Count all'insieme restituito per verificare la presenza di una selezione multipla, come illustrato nel seguente esempio. Sub NoMultiArea () NumberOfSelectedAreas = Selection.Areas.Count If NumberOfSelectedAreas > 1 Then MsgBox "Non puoi eseguire questo comando " & _ "su selezioni multiarea" End If End Sub Questo esempio imposta a 14 punti le dimensioni del carattere della cella C5 di Foglio1. Worksheets("Foglio1").Cells(5, 3).Font.Size = 14 Questo esempio cancella la formula nella cella 1 di Foglio1. Worksheets("Foglio1").Cells(1).ClearContents Questo esempio imposta ad Arial 8 punti il carattere di tutte le celle di Foglio1. With Worksheets("Foglio1").Cells.Font .Name = "Arial" .Size = 8 End With Questo esempio esegue un ciclo sulle celle comprese tra A1 e J4. Il valore delle celle contenenti un valore inferiore a 0,001 viene sostituito con zero (0). For rwIndex = 1 to 4 For colIndex = 1 to 10 With Worksheets("Foglio1").Cells(rwIndex, colIndex) If .Value < .001 Then .Value = 0 End With Next colIndex Next rwIndex Questo esempio imposta a corsivo lo stile del carattere delle celle comprese tra A1 e C5. Worksheets("Foglio1").Activate Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True

La propriet Offset
Per restituire un intervallo a una distanza specificata da un altro intervallo, utilizzare Offset(row, column), dove row e column rappresentano gli scarti di riga e di colonna. Questo esempio seleziona la cella che si trova tre righe pi in basso e una colonna pi a destra rispetto alla cella posizionata all'angolo superiore sinistro della selezione corrente. Dal momento che possibile selezionare solo le celle che si trovano sul foglio attivo, sar necessario prima attivare il foglio di lavoro. Worksheets("Foglio1").Activate Selection.Offset(3, 1).Range("A1").Select

Il metodo Union
Per restituire intervalli multipli, vale a dire composti da due o pi blocchi contigui di celle, utilizzare Union(range1, range2, ...). Questo esempio crea un oggetto definito come l'unione degli intervalli A1:B2 e C3:D4 e lo seleziona. Dim r1 As Range, r2 As Range, myMultiAreaRange As Range Worksheets("Foglio1").Activate Set r1 = Range("A1:B2") Set r2 = Range("C3:D4")

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/OggettiExc2.html[15/02/2010 00:57:02]

EXcel VBA x tutti - Gli Oggetti Excel Set myMultiAreaRange = Union(r1, r2) myMultiAreaRange.Select

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/OggettiExc2.html[15/02/2010 00:57:02]

EXcel VBA x tutti - Gli Oggetti Excel

La propriet Columns
Restituisce un oggetto che rappresenta tutte le colonne del foglio di lavoro attivo. Se il documento attivo non un foglio di lavoro, la propriet Columns restituisce un errore. Propriet di sola lettura. L'utilizzo di questa propriet senza un qualificatore di oggetto equivale ad ActiveSheet.Columns. Se applicata ad un oggetto Range corrispondente ad una selezione multipla, questa propriet restituir solo le colonne della prima area dell'intervallo. Se l'oggetto Range corrisponde ad esempio a una selezione multipla con due aree, A1:B2 e C3:D4, Selection.Columns.Count restituir 2, non 4. Per utilizzare questa propriet su un intervallo che pu contenere una selezione multipla, verificare con Areas.Count se l'intervallo una selezione multipla. In caso affermativo, eseguire un ciclo su ciascuna area dell'intervallo. Questo esempio imposta a grassetto il tipo di carattere della colonna 1, ovvero della colonna A, di Foglio1. Worksheets("Foglio1").Columns(1).Font.Bold = True Questo esempio imposta a zero (0) il valore di tutte le celle della colonna 1. Columns(1).Value = 0 Questo esempio visualizza il numero di colonne nella selezione di Foglio1. Se selezionata pi di un'area, sar eseguito un ciclo per ciascuna di esse. Worksheets("Foglio1").Activate areaCount = Selection.Areas.Count If areaCount <= 1 Then MsgBox "La selezione contiene " & _ Selection.Columns.Count & " colonne." Else For i = 1 To areaCount MsgBox "LArea " & i & " di selezione contiene " & _ Selection.Areas(i).Columns.Count & " colonne." Next i End If

La propriet Rows
Per un oggetto Application, restituisce un oggetto che rappresenta tutte le righe del foglio di lavoro attivo. Se il documento attivo non un foglio di lavoro la propriet Rows restituir un errore. Per un oggetto Range, restituisce le righe contenute nell'intervallo specificato. Per un oggetto Worksheet, restituisce tutte le righe del foglio di lavoro specificato. Propriet di sola lettura. L'utilizzo di questa propriet senza un qualificatore di oggetto equivale a ActiveSheet.Rows. Se si applica ad una selezione multipla, questa propriet restituir righe soltanto dalla prima area d'intervallo. Se un oggetto Range ha ad esempio due aree, A1:B2 e C3:D4, Selection.Rows.Count restituir 2, non 4. Per utilizzare questa propriet su un intervallo che include una selezione multipla, provare Areas.Count per determinare se l'intervallo una selezione multipla. In caso affermativo, eseguire un ciclo su ciascuna area dell'intervallo. Questo esempio elimina la riga 3 di Foglio1. Worksheets("Foglio1").Rows(3).Delete

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/OggettiExc3.html[15/02/2010 00:57:03]

EXcel VBA x tutti - Gli Oggetti Excel Questo esempio elimina le righe contenute nell'area corrente del foglio di lavoro 1 in cui il valore della prima cella della riga lo stesso di quello della prima cella della riga precedente. For Each rw In Worksheets(1).Cells(1, 1).CurrentRegion.Rows this = rw.Cells(1, 1).Value If this = last Then rw.Delete last = this Next Questo esempio visualizza il numero di righe nella selezione di Foglio1. Se selezionata pi di un'area, l'esempio eseguir un ciclo su ciascuna di esse. Worksheets("Foglio1").Activate areaCount = Selection.Areas.Count If areaCount <= 1 Then MsgBox "La selezione contiene " & _ Selection.Rows.Count & " righe." Else i = 1 For Each a In Selection.Areas MsgBox "LArea " & i & " di selezione contiene " & _ a.Rows.Count & " righe." i = i + 1 Next a End If

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/OggettiExc3.html[15/02/2010 00:57:03]

EXcel VBA x tutti - Esempi

Esempi

Esempi di automazioni su oggetti Excel


Creiamo un nuovo modulo di codice in VBA e proviamo ad eseguire le routine seguendo i suggerimenti. Esempio 1 L'esempio crea una riga diagonale di asterischi dalla cella A1 a J10 sul foglio di lavoro attivo. Sub Diagonale_Asterischi() Set Z = Range("A1:J10") Nr = Z.Rows.Count For i = 1 To Nr Z(i, i).Value = "*" Next End Sub Esempio 2 Inseriamo la funzione "=CASUALE()" in cella "D2" ed eseguiamo la routine seguente che copia la formula in basso. Sub Copia_in_Basso() Range("D2").Select Selection.AutoFill Destination:=Range("D2:D8"), _ Type:=xlFillDefault Range("D2:D8").Select End Sub Esempio 3 Inseriamo dei valori nella prima riga di foglio1. La routine copia la prima riga da foglio1 sulla seconda di foglio2. Sub Sposta_riga() Worksheets("Foglio1").Select Rows("1:1").Select Selection.Copy Worksheets("Foglio2").Select Rows("2:2").Select ActiveSheet.Paste End Sub Esempio 4 L'esempio blocca la prima riga del foglio attivo. Sub Blocca_riga() Rows("2:2").Select ActiveWindow.FreezePanes = True End Sub

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi.html[15/02/2010 00:57:03]

EXcel VBA x tutti - Esempi Esempio 5 L'esempio crea un nuovo foglio di lavoro lo nomina e lo imposta come ultimo foglio. Sub CreaFoglio() Sheets.Add ActiveSheet.Select ActiveSheet.Name = "FoglioProva" & Worksheets.Count Sheets("FoglioProva" & Worksheets.Count).Select Sheets("FoglioProva" & Worksheets.Count).Move _ After:=Sheets(Worksheets.Count) End Sub Esempio 6 L'esempio mostra i nomi delle finestre Excel attive e delle cartelle attive. Sub MostraFin() For each finest in application.Windows Msgbox finest.caption & " " & finest.parent.name Next End Sub

Esempio 7 La routine conta le cartelle e le finestre di applicazione Excel attive, inoltre per ogni cartella conta le finestre attive. Sub ScorreFin() Const Messiniz = "La cartella n. " Dim i as integer Dim j as integer Dim Mess as string Dim NumCart as integer Dim NumFines as integer NumFines = Windows.count 'conta le finestre totali NumCart = Workbooks.count totali Msgbox " Finestre Totali: " & NumFines Msgbox "Cartelle Totali: " & NumCart For i=1 to NumCart 'scorre le cartelle With WorkBooks(i) Mess = MessIniz & i 'finestre della cartella in esame NumFines = .Windows.count If NumFines=1 then Msgbox Mess & " ha una sola finestra" Else Msgbox Mess & " ha le seguenti finestre" For j=1 to NumFines Msgbox .Windows(j).caption Next End if End with Next End Sub Esempio 8 La routine mostra tutti i fogli della cartella attiva. Sub ScorreFin1() For i = 1 To Worksheets.Count With Worksheets(i) .Activate MsgBox .Name End With Next End Sub Esempio 9 'conta le cartelle

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi.html[15/02/2010 00:57:03]

EXcel VBA x tutti - Esempi L'esempio parte dal foglio attivo e mostra il nome dei fogli fino all'ultimo, poi riparte dal primo fino al foglio attivo. Sub ScorreFogli() indatt = ActiveSheet.Index nflav = Sheets.Count For i = indatt To nflav With Sheets(i) .Activate MsgBox .Name End With Next For i = 1 To indatt - 1 With Sheets(i) .Activate MsgBox .Name End With Next Sheets(i).Activate End Sub Esempio 10 In colonna "B" riportata una serie di valori. Del primo valore sono calcolati gli elevamenti alla seconda, alla terza alla quarta e disposti a destra della prima cella. La routine copia in basso le formule disposte sulla prima riga per quanti sono i valori della colonna di destra.

UsedRange: Restituisce un oggetto Range, che rappresenta l'intervallo utilizzato dal foglio di lavoro attivo. Propriet di sola lettura. Sub CopiaFormule() ActiveWorkbook.Names.Add "Rigaform", RefersToR1C1:= _ ActiveSheet.UsedRange.Range(Cells(1, 2), _ Cells(1, 4)) Application.Goto reference:="Rigaform" ActiveCell.Offset(0, -1).Select Selection.End(xlDown).Select ActiveCell.Offset(0, 3).Select ActiveWorkbook.Names.Add "ultimacella", _ RefersToR1C1:=ActiveCell Range("Rigaform").Select Selection.Copy Range("Rigaform:ultimacella").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Names("ultimacella").Delete End Sub Esempio 11 Variante delesempio sopra. Sub CopiaFormule1() ActiveWorkbook.Names.Add "Rigaform", RefersToR1C1:= _ ActiveSheet.UsedRange.Range(Cells(1, 2), Cells(1, 4)) Application.Goto Reference:="Rigaform" NumRiga = Selection.Offset(0, -1).End(xlDown).Row NumCol = Selection.End(xlToRight).Column Set Primacella = Range("Rigaform").Cells(1, 1) Set Ultimacella = Cells(NumRiga, NumCol) Selection.Copy Range(Primacella, Ultimacella).Select ActiveSheet.Paste

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi.html[15/02/2010 00:57:03]

EXcel VBA x tutti - Esempi Application.CutCopyMode = False End Sub

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi.html[15/02/2010 00:57:03]

EXcel VBA x tutti - Esempi

Esempio 12 Apriamo una nuova cartella di lavoro Excel e per ogni foglio ricreiamo la situazione in figura.

I valori di riga e colonna delimitano unarea di foglio (CurrentRegion). La routine riempie le celle interne allarea con dei numeri casuali da 1 a 90. CurrentRegion: Restituisce un oggetto Range, che rappresenta l'area corrente, che costituita da un intervallo delimitato da una qualsiasi combinazione di righe e colonne vuote. Sub RiempiArea() For Each f In Worksheets Set Zc = f.Range("B2").CurrentRegion Nr = Zc.Rows.Count Nc = Zc.Columns.Count Set Zc = Zc.Offset(1, 1).Resize(Nr - 1, Nc - 1) For Each C In Zc C.Value = Int(Rnd * 90 + 1) Next Next End Sub Esempio 13 L'esempio crea la "Serie di Fibonacci" in base al numero di occorrenze specificato dalla finestra di input (esempio di creazione formule). FormulaR1C1: Restituisce o imposta la formula per l'oggetto utilizzando un riferimento di tipo R1C1. Propriet di tipo Variant di lettura-scrittura per gli oggetti Range e di tipo String di lettura-scrittura per gli oggetti Series. Sub LanciaFib() With Selection .Offset(-1).Value = 1 .Offset(-2).Value = 0 End With C = InputBox("Quanto lunga vuoi la serie?") For i = 1 To C - 1 Fibonacci Selection Selection.Offset(1).Select Next End Sub Sub Fibonacci(Zonafib As Object) Zonafib.FormulaR1C1 = "=R[-2]C+R[-1]C" End Sub Esempio 14 La routine genera la serie dei mesi, partendo dalla cella attiva.

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi1.html[15/02/2010 00:57:04]

EXcel VBA x tutti - Esempi Gennaio Febbraio Marzo Aprile Maggio Giugno Luglio Agosto Settembre Ottobre Novembre Dicembre Sub CopiaMese() Worksheets("foglio1").Select Set C = ActiveCell C.Value = InputBox("Dammi un mese") Set Intervdest = Range(C, C.Offset("11")) mess = "In Basso (Si) o verso destra(No)" Dimmitu = MsgBox(mess, vbYesNo, ricopia) If Dimmitu = vbNo Then Set Intervdest = Range(C, C.Offset(0, 11)) End If C.AutoFill Destination:=Intervdest, Type:=xlRicopiaMesi End Sub Esempio 15 Partendo dalla Cella "B4" generiamo unarea di valori e formule. Non importante quali formule l'importante che l'area sia continua. La routine copia la regione appena creata da foglio1 a foglio3. Sub SpostaRegione() ActiveWorkbook.Names.Add Name:="Inizon",_ RefersToR1C1:=Worksheets("foglio3").Range("B4") Set Zonaformule = Worksheets("foglio3").Range("Inizon").CurrentRegion ActiveWorkbook.Names.Add Name:="formulina", _ RefersToR1C1:=Range("B4").CurrentRegion Range("formulina").Copy Zonaformule End Sub Esempio 16 Riferendosi allesempio precedente sostituisce le formule coi valori delle celle. Sub EliminaFormule() ActiveSheet.Range("Inizon").CurrentRegion.Select For Each MiaC In Selection MiaC.Value = MiaC Next End Sub Esempio 17 Variante dellesempio sopra. Sub EliminaFormule() ActiveSheet.Range("Inizon").CurrentRegion.Select Selection.Copy Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False End Sub

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi1.html[15/02/2010 00:57:04]

EXcel VBA x tutti - Esempi

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi1.html[15/02/2010 00:57:04]

EXcel VBA x tutti - Esempi

Esempi di sviluppo automazioni con interfaccia utente


Esempio 18 Una Biblioteca vuole catalogare tutti i libri in esposizione ed eseguire alcune statistiche sui libri con lo stesso editore, categoria e numero copie possedute. Lesempio filtra i record del foglio per casa editrice, categoria , copie possedute o tutti e tre i campi contemporaneamente. Al termine della ricerca visualizza solo le righe che soddisfano la condizione. Realizziamo un foglio Excel come rappresentato in figura. Inoltre creiamo una UserForm con sei pulsanti e tre caselle di testo.

Definiamo le propriet degli oggetti appena creati come riportato in tabella: Name FrmCerca CmdEditore CmdCategoria CmdQuantita TxtEditore Caption Ricerca Articoli Editore Categoria Quantit

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi2.html[15/02/2010 00:57:05]

EXcel VBA x tutti - Esempi TxtCategoria TxtQuantita CmdCerca CmdRipristina CmdChiudi Cerca Ripristina Chiudi

Di seguito sono riportate le routine da inserire nel modulo di codice associato alla UserForm "FrmCerca". Private Sub CmdCerca_Click() CmdEditore_Click CmdCategoria_Click CmdQuantita_Click End Sub Private Sub CmdChiudi_Click() FrmCerca.Hide End Sub Private Sub CmdEditore_Click() If TxtEditore.Text = "" Then MsgBox "Inserire dati per la ricerca!" Exit Sub End If ActiveSheet.UsedRange.Select riga = Worksheets(1).UsedRange.Rows.Count For indi = 2 To riga If Range("B" & indi) <> TxtEditore.Text Then Range("B" & indi).Select Selection.EntireRow.Hidden = True End If Next End Sub Private Sub CmdCategoria_Click() If TxtCategoria.Text = "" Then MsgBox "Inserire dati per la ricerca!" Exit Sub End If ActiveSheet.UsedRange.Select riga = Worksheets(1).UsedRange.Rows.Count For indi = 2 To riga If Range("C" & indi) <> TxtCategoria.Text Then Range("C" & indi).Select Selection.EntireRow.Hidden = True End If Next End Sub Private Sub CmdQuantita_Click() If TxtQuantita.Text = "" Then MsgBox "Inserire dati per la ricerca!" Exit Sub End If ActiveSheet.UsedRange.Select riga = Worksheets(1).UsedRange.Rows.Count For indi = 2 To riga If Range("D" & indi) <> TxtQuantita.Text Then Range("D" & indi).Select Selection.EntireRow.Hidden = True End If Next End Sub Private Sub CmdRipristina_Click() ActiveSheet.UsedRange.Select Selection.EntireRow.Hidden = False End Sub Nel foglio di lavoro inseriamo un pulsante che attivi la Userform "FrmCerca" (vedi paragrafo "Generatore di Macro").

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi2.html[15/02/2010 00:57:05]

EXcel VBA x tutti - Esempi

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi2.html[15/02/2010 00:57:05]

EXcel VBA x tutti - Esempi

Esempio 19 La stessa biblioteca dellesempio precedente vuole monitorare i libri in prestito ed evidenziare i casi in cui sia stata superata la data di riconsegna del libro. Lapplicazione verifica se la data di scadenza superiore della data odierna, in tal caso riporta il record nella casella di riepilogo. Impostiamo un foglio di lavoro e creiamo una nuova UserForm con un pulsante ed una casella di riepilogo, come illustrato in figura.

Definiamo le propriet degli oggetti appena creati come riportato in tabella: Name LstScaduti CmdChiudi Chiudi Caption ColumnCount 5

FrmScaduti Visualizza prestiti scaduti

Di seguito sono riportate le routine da inserire nel modulo di codice associato alla UserForm "FrmScaduti". Private Sub CmdEsci_Click() Unload Me End Sub

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi3.html[15/02/2010 00:57:05]

EXcel VBA x tutti - Esempi Private Sub UserForm_Activate() 'calcolo la data di sistema e la salvo su una variabile MyDate = Date 'creo la riga descrizioni della ListBox FrmScaduti.LstScaduti.AddItem "Titolo" FrmScaduti.LstScaduti.List(RigaLista, 1) = "Editore" FrmScaduti.LstScaduti.List(RigaLista, 2) = "Cognome Nome" FrmScaduti.LstScaduti.List(RigaLista, 3) = "Telefono" FrmScaduti.LstScaduti.List(RigaLista, 4) = "Data scadenza" RigaLista = 0 ActiveSheet.UsedRange.Select riga = Worksheets(1).UsedRange.Rows.Count For Indi = 2 To riga If Range("E" & Indi) <= MyDate Then RigaLista = RigaLista + 1 FrmScaduti.LstScaduti.AddItem Range("A" & Indi) FrmScaduti.LstScaduti.List(RigaLista, 1) = _ Range("B" & Indi) FrmScaduti.LstScaduti.List(RigaLista, 2) = _ Range("C" & Indi) FrmScaduti.LstScaduti.List(RigaLista, 3) = _ Range("D" & Indi) FrmScaduti.LstScaduti.List(RigaLista, 4) = _ Range("E" & Indi) End If Next End Sub Nel foglio di lavoro inseriamo un pulsante che attivi la Userform "FrmScaduti" (vedi paragrafo "Generatore di Macro").

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi3.html[15/02/2010 00:57:05]

EXcel VBA x tutti - Esempi

Esempio 20 La biblioteca desidera possedere un archivio che memorizzi le informazioni relative a Titolo, Autore e Casa Editrice di tutti i libri posseduti. Inoltre si vuole gestire l'inserimento, la cancellazione e la ricerca dei dati tramite un' interfaccia utente personalizzata. Realizziamo un foglio Excel come descritto in figura. Inoltre creiamo una nuova UserForm con quattro pulsanti, quattro caselle di testo, una barra di scorrimento(ScrollBar) ed un pulsante di selezione(SpinButton).

Definiamo le propriet degli oggetti appena creati come riportato in tabella: Name FrmLista CmdInserisci CmdCancella CmdCerca CmdChiudi TxtTitolo TxtAutore TxtEditore SpnNum ScrNum Caption Gestione Libri Inserisci Cancella Cerca X Titolo Chiudi

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi4.html[15/02/2010 00:57:06]

EXcel VBA x tutti - Esempi TxtNum Di seguito sono riportate le routine da inserire nel modulo di codice associato alla UserForm "FrmLista". Private Sub CmdCancella_Click() Numriga = ActiveCell.Row Rows(Numriga & ":" & Numriga).Select Selection.Delete Shift:=xlUp ScrNum.Max = ActiveSheet.UsedRange.Rows.Count End Sub Private Sub CmdCerca_Click() On Error GoTo 10 Cells.Find(what:=TxtTitolo.Text, After:=ActiveCell, _ LookAt:=xlPart, SearchOrder:=xlByRows, _ searchdirection:=xlNext).Activate x = ActiveCell.Column TxtTitolo.Text = ActiveCell.Text TxtEditore.Text = ActiveCell.Offset(columnoffset:=x).Text TxtAutore.Text = ActiveCell.Offset(columnoffset:=x + 1).Text ValScr = ActiveCell.Row ScrNum.Value = ValScr TxtNum.Text = ValScr Exit Sub 10: MsgBox "Record non trovato" End Sub Private Sub CmdEsci_Click() Unload Me End Sub Private Sub CmdInserisci_Click() ValScr = ActiveSheet.UsedRange.Rows.Count + 1 TmpTitolo = TxtTitolo.Text TmpEditore = TxtEditore.Text TmpAutore = TxtAutore.Text ScrNum.Max = ValScr ScrNum.Value = ValScr Range("A" & ValScr) = TmpTitolo Range("B" & ValScr) = TmpEditore Range("C" & ValScr) = TmpAutore TxtNum.Text = ValScr End Sub Private Sub ScrNum_Change() ValScr = ScrNum.Value Range("A" & ValScr & ":" & "C" & ValScr).Select TxtTitolo.Text = Range("A" & ValScr) TxtEditore.Text = Range("B" & ValScr) TxtAutore.Text = Range("C" & ValScr) TxtNum.Text = ValScr End Sub Private Sub SpnNum_SpinDown() ScrNum.Value = 2 ScrNum_Change End Sub Private Sub SpnNum_SpinUp() ValScr = ActiveSheet.UsedRange.Rows.Count ScrNum.Max = ValScr ScrNum.Value = ValScr ScrNum_Change End Sub Private Sub UserForm_Activate() ScrNum.Max = ActiveSheet.UsedRange.Rows.Count ScrNum.Min = 2 End Sub Nel foglio di lavoro inseriamo un pulsante che attivi la Userform "FrmLista" (vedi paragrafo "Generatore di Macro").

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi4.html[15/02/2010 00:57:06]

EXcel VBA x tutti - Esempi

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Esempi4.html[15/02/2010 00:57:06]

EXcel VBA x tutti - Obiettivi

Obiettivi

Visual Basic for Application (VBA) presente nelle applicazioni Office come: Word, Excel, Power Point ed Access. La sua funzione quella di rendere programmabili questi applicativi, allo scopo di personalizzarli a seconda delle esigenze specifiche dell'utente. La mia esperienza deriva dall'utilizzo quotidiano del PC e dalla scoperta di questa potenzialit giorno per giorno, aiutato anche dalla mia professione di programmatore. Molte persone utilizzano correntemente il pacchetto Office, normalmente in uso in molti personal computer, ma ignorano questo tipo di funzionalit. Il mio obiettivo quello di fornire le basi su questo tipo di programmazione anche a chi non un programmatore professionista. La trattazione riguarder solamente Microsoft Excel le cui prestazioni aumentano notevolmente grazie a VBA, tuttavia non va dimenticato che questo tipo di funzionalit pu essere usato anche in Word, Access e Power Point. Requisito fondamentale per coloro i quali intendessero seguirmi in questo percorso formativo, solamente una discreta conoscenza di Microsoft Excel. Non voglio tediare il lettore con concetti astrusi e complicati, ma solamente dare familiarit con l'ambiente di sviluppo e un'infarinatura sui concetti della programmazione VBA, quindi dare a chi apprende un minimo di indipendenza nell'iniziare a personalizzare i propri fogli di lavoro. Inizier col descrivere l'ambiente di lavoro in cui andremo ad operare. In seguito spiegher come creare un'interfaccia utente (finestra di comandi) e come inserire il codice per farla funzionare. Le ultime sezioni saranno dedicate ad esempi pratici. Affrontare un nuovo argomento sempre un passo difficile, ma quando comincerai a vedere i primi risultati concreti, il mondo di Excel VBA ti affasciner!

Buona lettura!

Cognolato Studio 2004

file:///C:/Users/Butter/AppData/Local/Temp/Rar$EX00.901/Corso/Corso/Introduzione.html[15/02/2010 00:57:07]

Vous aimerez peut-être aussi