Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle...

35
Indice riferimento: http://excelvba.altervista.org/Corso/Indice.html 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 all’Interfaccia 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 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.

Transcript of Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle...

Page 1: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

Indice riferimento: http://excelvba.altervista.org/Corso/Indice.html

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 all’Interfaccia 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

ObiettiviVisual 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.

Ambiente di sviluppo L’ambiente 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 per soddisfare le nostre esigenze, 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 dell’applicazione

Nei "Progetti di documento" tutti i componenti del progetto sono legati alla cartella di lavoro utilizzata al momento, e non andranno ad intaccare ne l’applicazione 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.

Page 2: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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 all’applicazione Excel. Nello specifico noi tratteremo solamente i "Progetti di documento".

La piattaforma di sviluppo

L’editor visual Basic offre numerosi strumenti avanzati di sviluppo e programmazione: 1. Finestra di progetto: mostra l’elenco 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.

o Microsoft Excel oggetti: contiene il codice legato ai fogli ed alla cartella di lavoro. o Form: contiene le interfaccia utente associate al progetto. o Moduli: contiene i moduli di codice generici. o 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 l’elenco, 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 tipi di moduli di codice: generici, di classe e di userform.

5. Casella degli strumenti: contiene una serie di controlli necessari per costruire l’interfaccia utente. Per spostare i controlli nella "UserForm" basta cliccare sull’oggetto 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 all’applicazione Excel.

Il generatore di MacroExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia 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 l’esatta 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 all’editor 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".

Page 3: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

2. Sulla finestra "Registra macro" assegniamo il nome "MacroScrivi" e clicchiamo "OK".

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 un’altra 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 nell’Editor 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".

Page 4: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

Clicchiamo 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 "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

La sintassi BasicAffinché 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 DatiI 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 TipovariabileConst 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 DescrizioneByte Accetta numeri da 0 a 255 Integer Accetta numeri da -32768 a 32767 Long Accetta numeri da -2147483648 a 2147483647

Single Accetta numeri da -3,402823E38 a -1,401298E-45 per valori negativi Da 1,401298E-45 a 3,402823E38 per valori positivi

Double Accetta numeri da -1,79769313486232E308 a -4,94065645841247E-324 per valori negativi Da 4,94065645841247E-324 a 1,79769313486232E308 per valori positivi

Boolean Accetta solo 2 valori "True" o "False" String Accetta da 0 a 65000 caratteri Date Date dal 1 gennaio 100 al 31 dicembre 9999 Variant 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.

Le RoutineCon 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.

Page 5: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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.

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 progettoPublic risultato1 As IntegerPublic risultato2 As IntegerPublic sottraendo As Integer' La seguente variabile è visibile a livello di moduloPrivate operatore As IntegerSub 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 SubSub 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 moduloPrivate 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 progettoPublic Function sottrazione(operando1 As Integer, _ operando2 As Integer) As Integer sottrazione = operando1 - operando2End Function

Page 6: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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 ifIf "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 condizionaleEnd Sub

Soffermiamo la nostra attenzione su due aspetti: Nella routine è usata l’istruzione: "IsNumeric" che definisce se il valore memorizzato nella

variabile "VariabileInput" è numerico o stringa. L’istruzione "InputBox" apre una finestra contenente una casella di testo, se immettiamo del testo

e clicchiamo "Ok" la funzione restituisce il valore digitato.

Con l’istruzione ElseIf è possibile valutare più espressioni all’interno 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 IfEnd 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 l’esempio precedente:

Sub valutaNumero() VariabileInput = InputBox("immettere un numero") Select Case VariabileInput Case Is <= 1 MsgBox "la variabile è minore o uguale a 1", vbInformation, _

"valutazione 1" Case 2 To 5 MsgBox "la variabile è maggiore di 1 e minore o uguale a 5", _

vbInformation, "valutazione 2" Case 6 To 10 MsgBox "la variabile è maggiore di 5 e minore o uguale a 10", _

vbInformation, "valutazione 3" Case Else MsgBox "la variabile è maggiore di 10", vbInformation, _

"valutazione 4" End SelectEnd Sub

Operatori Logici, Matematici e di Confronto

Operatore Funzione Utilizzo

Page 7: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

+ Somma Risultato = X + Y - Sottrazione Risultato = X - Y* Moltiplicazione Risultato = X * Y / Divide e restituisce un numero a virgola mobile Risultato = X / Y \ Divide e restituisce un numero intero Risultato = X \ Y

Mod Divide e restituisce solo il resto Risultato = X Mod YIl resto è un intero

^ Eleva a potenza Risultato = X ^ Y

Gli operatori logici gestiscono i valori true e false. Di seguito sono riportati gli operatori logici più comuni:

Operatore Funzione

And If (condizione1) And (condizione2) then...Verificata se entrambe le condizioni sono vere.

Or If (condizione1) Or (condizione2) then...Verificata se almeno una condizione è vera.

Not If Not (condizione1) then...Verificata se “condizione1” è falsa.

Operatori di confronto:

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

Ripetizione di azioni con i cicliNei 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 d’interruzione, o se la condizione non è impostata in modo non corretto, il ciclo continua all’infinito.

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

Page 8: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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

Funzioni di manipolazione delle stringhe

La tabella seguente, riassume alcune delle funzioni predefinite di Visual Basic per manipolare le Stringhe.

Funzione Descrizione Esempio Risultato

Len() Determina la lunghezza di una stringa NomeVar = Len("Stringa") 7

LCase() Converte i caratteri da maiuscoli a minuscoli NomeVar = LCase("Stringa") stringa

UCase() Converte i caratteri da minuscoli a maiuscoli NomeVar = UCase("Stringa") STRINGA

StrReverse() Inverte le stringhe NomeVar = StrReverse("Stringa") agnirtS

Left() Estrae i primi caratteri di una stringa NomeVar = Left("Stringa", 3) Str

Right() Estrae gli ultimi caratteri di una stringa NomeVar = Right("Stringa", 3) nga

Mid() Estrae i caratteri di una stringa NomeVar = Mid("Stringa", 3,4) ring

InStr() Trova una parte di stringa su un’altra NomeVar = InStr("Stringa", "n") 5

LTrim() Elimina tutti gli spazi iniziali NomeVar = LTrim(" Stringa ") "Stringa "RTrim() Elimina tutti gli spazi finali NomeVar = RTrim(" Stringa ") " Stringa"

Trim() Elimina tutti gli spazi iniziali e finali NomeVar = Trim(" Stringa ") "Stringa"

CStr() Converte in una stringa NomeVar = CStr(10) "10"

*CInt() Converte in un numero intero NomeVar = CInt("10") 10

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

Eliminazione degli errori: Il DebugUna 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").

Page 9: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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).

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.

Page 10: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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.

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.

Creare l'Interfaccia UtenteL’Interfaccia 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 l’Editor di VBA ed inseriamo una nuova finestra scegliendo la voce "Userform" dal menù "Inserisci". Se non è già presente, inseriamo la casella degli strumenti, selezionando l’omonima voce dal menù "Visualizza". Notiamo che, appena inseriamo una nuova Userform, appare l’icona 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.

Page 11: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

Ora, se non fosse già presente, apriamo la finestra proprietà dal menù "Visualizza". Per ora vi basti sapere che le proprietà sono le caratteristiche 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 dell’oggetto. 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 l’aspetto dell’oggetto 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 dell’oggetto 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" all’oggetto Userform; "TxtCiao" all’oggetto 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:

Page 12: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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

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.

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à:

Page 13: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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.

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

Page 14: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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.

Il codice associato all’Interfaccia utentePer 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 all’esempio FrmCiao creato all’inizio del capitolo. Selezioniamo la voce "Codice" dal menù "Visualizza", oppure clicchiamo l’icona "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 l’esecuzione di una routine associata a quell'oggetto.

Ad esempio:selezioniamo dalla casella di sinistra l’oggetto "CmdCiao", verrà creata una routine privata identificata dal nome dell’oggetto selezionato e dall’evento "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 è l’unico 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.

Ecco illustrati alcuni eventi, associati agli oggetti che già conosciamo.

Userform

Eventi associati:

Activate; Deactivate: attivano o disattivano una procedura all’atto dell’apertura o della chiusura della Form. Initialize: imposta una procedura contenente particolari istruzioni da lanciare in via preliminare.

Page 15: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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 l’oggetto è selezionato. MoseUp: la routine si attiva quando il pulsante viene rilasciato. MouseMove: la routine si attiva quando il puntatore del mouse sfiora l’oggetto.

Casella di testo

Eventi associati:

Change: l’evento consiste nel cambiamento del testo contenuto nella casella. KeyPress: evento connesso all’attivazione 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". All’interno 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 dell’oggetto "TxtCiao". In Visual Basic le proprietà sono separate dall’oggetto 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 dell’oggetto ed il punto di separazione.

Unload Me è uno speciale comando che chiude la finestra in uso.

I metodiOltre 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.

Page 16: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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.

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.

Esempio riepilogativoL'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 Captino TabIndex

FrmOggetti Prova Oggetti  CboUno   0LstUno   1LstDue   2

CmdAggiungi Aggiungi >> 3

Page 17: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

CmdRimuovi <<Rimuovi 4CmdCancella Cancella Tutto 5

CmdEsci Esci 6ChkDisabilita Disabilita spostamenti 7

*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

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 NextEnd 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 NextEnd 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.ClearEnd 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 IfEnd Sub

Con un Click del mouse sul pulsante "CmdEsci", viene scarica la finestra.

Private Sub CmdEsci_Click() Unload MeEnd Sub

Page 18: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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.

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 l’ambiente 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 un’istruzione, 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 l’apertura della guida in linea direttamente sull’elemento cercato.

L'oggetto ApplicationRappresenta 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 WorkbooksWorkbook 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.

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 l’oggetto Workbook, mentre la casella eventi contiene tutti gli eventi associati a Workbook.

Page 19: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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.showEnd Sub

La routine attiva la UserForm "FrmCiao" quando viene aperto il documento Excel.

L'insieme SheetsSheets è l’insieme 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à di utilizzo è 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)

L'insieme WorksheetsL’insieme 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.

Page 20: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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

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").ActivateActiveSheet.PageSetup.Orientation = xlLandscapeActiveSheet.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 all’oggetto "Worksheet".

L'insieme RangeRappresenta 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").ActivateRange("A1:H8").Formula = "=Rand()"

La proprietà CellsLa 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.

Page 21: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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").ActivateFor TheYear = 1 To 5 Cells(1, TheYear + 1).Value = 1990 + TheYearNext TheYearFor TheQuarter = 1 To 4 Cells(TheQuarter + 1, 1).Value = "Q" & TheQuarterNext TheQuarterEnd 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 = xlThickEnd 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 l’oggetto 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 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 IfEnd 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).ClearContentsQuesto esempio imposta ad Arial 8 punti il carattere di tutte le celle di Foglio1.

With Worksheets("Foglio1").Cells.Font .Name = "Arial" .Size = 8End 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 colIndexNext rwIndex

Questo esempio imposta a corsivo lo stile del carattere delle celle comprese tra A1 e C5.

Worksheets("Foglio1").ActivateRange(Cells(1, 1), Cells(5, 3)).Font.Italic = True

La proprietà OffsetPer 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").ActivateSelection.Offset(3, 1).Range("A1").Select

Page 22: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

Il metodo UnionPer 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 RangeWorksheets("Foglio1").ActivateSet r1 = Range("A1:B2")Set r2 = Range("C3:D4")Set myMultiAreaRange = Union(r1, r2)myMultiAreaRange.Select

La proprietà ColumnsRestituisce 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").ActivateareaCount = Selection.Areas.CountIf areaCount <= 1 Then MsgBox "La selezione contiene " & _ Selection.Columns.Count & " colonne."Else For i = 1 To areaCount MsgBox "L’Area " & i & " di selezione contiene " & _ Selection.Areas(i).Columns.Count & " colonne." Next iEnd If

La proprietà RowsPer 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

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 = thisNext

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").ActivateareaCount = Selection.Areas.CountIf areaCount <= 1 Then MsgBox "La selezione contiene " & _ Selection.Rows.Count & " righe."Else i = 1 For Each a In Selection.Areas MsgBox "L’Area " & i & " di selezione contiene " & _ a.Rows.Count & " righe." i = i + 1 Next aEnd If

Page 23: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

EsempiEsempi di automazioni su oggetti ExcelCreiamo 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 = "*" NextEnd 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").SelectEnd 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.PasteEnd Sub

Esempio 4

L'esempio blocca la prima riga del foglio attivo.

Sub Blocca_riga() Rows("2:2").Select ActiveWindow.FreezePanes = TrueEnd Sub

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 NextEnd 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

Page 24: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

Dim NumFines as integer NumFines = Windows.count 'conta le finestre totali NumCart = Workbooks.count 'conta le cartelle 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 NextEnd Sub

Esempio 9

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).ActivateEnd 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()

Page 25: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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").DeleteEnd Sub

Esempio 11

Variante del’esempio 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 Application.CutCopyMode = FalseEnd Sub

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

I valori di riga e colonna delimitano un’area di foglio (CurrentRegion). La routine riempie le celle interne all’area 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 NextEnd Sub

Esempio 13L'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

Page 26: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

End With C = InputBox("Quanto lunga vuoi la serie?") For i = 1 To C - 1 Fibonacci Selection Selection.Offset(1).Select NextEnd SubSub Fibonacci(Zonafib As Object) Zonafib.FormulaR1C1 = "=R[-2]C+R[-1]C"End Sub

Esempio 14La routine genera la serie dei mesi, partendo dalla cella attiva.

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:=xlRicopiaMesiEnd Sub

Esempio 15Partendo dalla Cella "B4" generiamo un’area 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 ZonaformuleEnd Sub

Esempio 16Riferendosi all’esempio precedente sostituisce le formule coi valori delle celle.

Sub EliminaFormule() ActiveSheet.Range("Inizon").CurrentRegion.Select For Each MiaC In Selection MiaC.Value = MiaC NextEnd Sub

Esempio 17Variante dell’esempio sopra.

Sub EliminaFormule() ActiveSheet.Range("Inizon").CurrentRegion.Select Selection.Copy Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = FalseEnd Sub

Esempi di sviluppo automazioni con interfaccia utente

Page 27: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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.

L’esempio 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 CaptionFrmCerca Ricerca Articoli

CmdEditore EditoreCmdCategoria CategoriaCmdQuantita Quantità

TxtEditore  TxtCategoria  TxtQuantita  CmdCerca Cerca

CmdRipristina RipristinaCmdChiudi 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_ClickEnd Sub

Private Sub CmdChiudi_Click() FrmCerca.HideEnd 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

Page 28: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

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 NextEnd 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 NextEnd Sub

Private Sub CmdRipristina_Click() ActiveSheet.UsedRange.Select Selection.EntireRow.Hidden = FalseEnd Sub

Nel foglio di lavoro inseriamo un pulsante che attivi la Userform "FrmCerca" (vedi paragrafo "Generatore di Macro").

Esempio 19

La stessa biblioteca dell’esempio precedente vuole monitorare i libri in prestito ed evidenziare i casi in cui sia stata superata la data di riconsegna del libro. L’applicazione 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 Caption ColumnCountFrmScaduti Visualizza prestiti scaduti  LstScaduti   5

Page 29: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

CmdChiudi Chiudi  

Di seguito sono riportate le routine da inserire nel modulo di codice associato alla UserForm "FrmScaduti".

Private Sub CmdEsci_Click() Unload MeEnd Sub

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"). 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 CaptionFrmLista Gestione Libri

CmdInserisci InserisciCmdCancella Cancella

Page 30: Indice Basic... · Web viewExcel permette la registrazione di macro, cioè la registrazione delle azioni eseguite sull’interfaccia di Microsoft Excel, per poi essere ripetute quando

CmdCerca Cerca X Titolo

CmdChiudi ChiudiTxtTitolo  TxtAutore  TxtEditore  SpnNum  ScrNum  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.CountEnd 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 Sub10: MsgBox "Record non trovato"End Sub

Private Sub CmdEsci_Click() Unload MeEnd 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 = ValScrEnd 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 = ValScrEnd Sub

Private Sub SpnNum_SpinDown() ScrNum.Value = 2 ScrNum_ChangeEnd Sub

Private Sub SpnNum_SpinUp() ValScr = ActiveSheet.UsedRange.Rows.Count ScrNum.Max = ValScr ScrNum.Value = ValScr ScrNum_ChangeEnd Sub

Private Sub UserForm_Activate() ScrNum.Max = ActiveSheet.UsedRange.Rows.Count ScrNum.Min = 2End Sub

Nel foglio di lavoro inseriamo un pulsante che attivi la Userform "FrmLista" (vedi paragrafo "Generatore di Macro").