Sei sulla pagina 1di 54

Excel & VBA

Excel e Visual Basic for Application


Automazione
• Excel con VBA incorpora la tecnologia
dell’automazione (OLE automation)
• Excel dialoga con VBA attraverso un
insieme di comandi detto libreria ad oggetti
di oggetti
Libreria
Excel VBA
Programmazione procedurale
• Linguaggi procedurali
nascondono la
complessità delle Programmazione ad oggetti
operazioni sui dati • Linguaggi orientati
• Si invocano delle agli oggetti
funzioni su blocchi di nascondono i dati e la
dati complessità del
programma
• Si inviano dei
messaggi agli oggetti
Astrazione dei dati
• É il meccanismo mediante il quale è
possibile combinare una struttura di dati e le
operazioni che possono essere su di essa in
un nuovo tipo di dato.
• Tale unità prende il nome di classe.
• Variabili o istanze di una classe sono
definiti oggetti.
Proprietà delle classi

• Se consideriamo un numero float esso è


composto da esponente e mantissa che non
possono essere manipolati direttamente.
• Per default i membri (variabili e funzioni) di
una classe sono privati e non sono
manipolabili direttamente.
Libreria di oggetti di Excel
• I metodi e le proprietà si suddividono in due
gruppi
– I gruppo: sono posizionati al termine
dell’istruzione ed eseguono una azione (ad es.
Copy, PasteSpecial)
– II gruppo: si riferiscono ad oggetti (ad es.
ActiveWindows, Range(“A1”))
Esempi di oggetti di libreria
Esempio I gruppo:
Selection.Copy
Range("B5").Select
ActiveSheet.Paste
Esempio II gruppo:
Range("C12:D14").Select
Application.CutCopyMode = False
Selection.Copy
Oggetti di Excel
Dichiarazione di variabili
Dim [WithEvents] nomevariabile[([indici])] [As [New] tipo] [,
[WithEvents] nomevariabile[([indici])] [As [New] tipo]] . . .

•WithEvents Facoltativa. Parola chiave che specifica che nomevariabile è una


variabile oggetto utilizzata per rispondere agli eventi generati.
• nomevariabile Obbligatoria. Nome della variabile, espresso in base alle
convenzioni di denominazione standard delle variabili.
•indici Facoltativa. Dimensioni di una variabile matrice.
•New Facoltativa. Parola chiave che consente di creare un oggetto in modo
implicito.
•tipo Facoltativa. Tipo di dati della variabile; può essere Byte, Boolean, Integer,
Long, Currency, Single, Double, Date, String (per stringhe di lunghezza
variabile), String * lunghezza (per stringhe di lunghezza fissa), Object, Variant,
un tipo definito dall'utente oppure un tipo di oggetto.
tipo di dati Byte
Tipo di dati utilizzato per contenere numeri
interi positivi compresi nell'intervallo tra 0 e
255. Le variabili di tipo Byte vengono
memorizzate come numeri singoli, senza
segno a 8 bit (1 byte).
Esempio di variabile Byte
Sub Macro1()
Dim prima As Byte
prima = 1
Range("a1").Select
ActiveCell.Value = prima
End Sub
tipo di dati Boolean
Tipo di dati con solo due valori possibili,
ovvero True (-1) o False (0). Le variabili di
tipo Boolean vengono memorizzate come
numeri a 16 bit (2 byte).
Esempio di Boolean
Sub Macro1()
Dim prima As Boolean
prima = True
If prima Then
Range("a1").Select
ActiveCell.Value = "La variabile prima è vera"
End If
End Sub
tipo di dati Integer
Tipo di dati contenente variabili
memorizzate come numeri interi a 2 byte
nell’intervallo da -32.768 a 32.767.
Esempio di Integer
Sub Macro1()
Dim prima, seconda As Integer
prima = 32
seconda = 44
Range("a1").Select
ActiveCell.Value = prima * seconda
End Sub
tipo di dati Long
Intero di quattro byte, ovvero un numero
intero compreso tra -2.147.483.648 e
2.147.483.647.
Esempio di Long
Sub Macro1()
Dim lunga(3) As Long
lunga(0) = 2 ^ 10
lunga(1) = 2 ^ 11
lunga(2) = 2 ^ 12
Range("a10").Select
ActiveCell.Value = lunga(0)
Range("b10").Select
ActiveCell.Value = lunga(1)
Range("c10").Select
ActiveCell.Value = lunga(2)
End Sub
tipo di dati Currency
Tipo di dati compreso nell’intervallo da
-922.337.203.685.477,5808 a
922.337.203.685.477,5807. Utilizzato
per calcoli monetari o a virgola fissa
in cui la precisione è fondamentale.
tipo di dati Single
Tipo di dati che contiene variabili a virgola
mobile a precisione singola a 32-bit (4
byte), compresi tra -3,402823E38 e -
1,401298E-45 per valori negativi e tra
1,401298E-45 e 3,402823E38 per valori
positivi.
tipo di dati Double
Tipo di dati che contiene numeri a virgola
mobile a doppia precisione a 64 bit (8 byte)
compresi tra -1.79769313486231E308 e
-4,94065645841247E-324 per i valori negativi,
tra 4,94065645841247E-324 e
1,797693134862325E308 per i valori positivi.
Esempio di Double
Sub Macro1()
Dim grosso As Double
grosso = 32 ^ 12
Range("a1").Select
ActiveCell.Value = grosso
End Sub
tipo di dati Date
Tipo di dati utilizzato per memorizzare date e
orari come numeri reali. Le variabili di tipo
Date vengono memorizzate come numeri a
64 bit (8 byte). Il valore a sinistra del
separatore decimale rappresenta una data e
il valore a destra rappresenta un orario.
Esempio di Date
Sub Macro1()
Dim data As Date
data = 37956.4407283565
Range("a1").Select
ActiveCell.Value = data
End Sub
tipo di dati String
Tipo di dati i cui dati sono composti da una sequenza
di caratteri contigui che rappresentano i caratteri
effettivi stessi anziché un valore numerico. Può
includere lettere, numeri, spazi e segni di
punteggiatura. Il tipo di dati String può contenere
stringhe di lunghezza fissa con lunghezza
compresa tra 0 e circa 63 KB di caratteri, e
stringhe dinamiche di lunghezza compresa tra 0 e
circa 2 miliardi di caratteri.
Esempio di String
Sub Macro1()
Dim stringa As String
stringa = "Il mio nome è Paolo"
Range("a1").Select
ActiveCell.Value = stringa
End Sub
tipo di dati Object
Tipo di dati che rappresenta qualsiasi
riferimento a un oggetto. Le variabili
Object vengono memorizzate come
indirizzi a 32 bit (4 byte) che fanno
riferimento a oggetti.
Memorizzazione di oggetti in
variabili
• Quando si assegna il valore ad una variabile
si utilizza il segno =
• Quando si assegna il riferimento di oggetto
ad una variabile si utilizzano Set ed =
– Sub RegistraOggetto()
• myObject = Range(“A1”)
• Set myObject = Range(“A1”)
– End Sub
Esempio di variabile Object
Sub Macro1()
Dim stringa As Object
Set stringa = Range("a1")
Range("a10").Select
ActiveCell.Value = stringa
End Sub
Gli oggetti RANGE
• Le macro devono poter operare su intervalli
di dati
• Si può far riferimento ad intervalli di dati
tramite la proprietà RANGE
Visualizzatore oggetti
Nell’editor di Visual Basic fare clic sul
pulsante Visualizzatore oggetti
La lista a sinistra
contiene le classi di
oggetti
La lista a destra
riporta i membri
(metodi e proprietà)
Esempio di macro su Range
Sub ProvaIntervallo()
Dim mioRange As Range
Set mioRange = Range("b2")
mioRange.Select
End Sub
Esempio di selezione di riga al
termine di un intervallo
Sub ProvaIntervallo()
Dim mioRange As Range
Set mioRange = Range("b2").CurrentRegion
mioRange.Rows(mioRange.Rows.Count+1).Select
End Sub
Immissione di valori e formule in
intervalli di celle
• differenti notazioni
– notazione A3 (colonna alfanumerica, riga
numerica)
– notazione $A$3 (riferimento assoluto a riga e
colonna)
– notazione R1C1 (si setta nel menù strumenti-
opzioni-generale, si fa riferimento alle righe ed
alle colonne con numeri preceduti
rispettivamente da R e C)
Immissione di valori e formule
Strutture di controllo in VB
• Condizioni: If … Else … End If
• Iterazioni:
– For Each … Next
– For … To … Next …
– Do Until … Loop
– While ... Wend
Istruzione If...Then...Else
Consente l’esecuzione condizionale di un gruppo di
istruzioni in base al valore di un’espressione.
Sintassi
If condizione Then [istruzioni] [Else istruzioni]
oppure
If condizione Then
[istruzioni]
[ElseIf condizione Then
[istruzioni] ...
[Else
[istruzioni]]
End If
Sub Macro1()
Esempio di If
Dim data As Date
data = Now
If data > 37980 Then
Range("a10").Select
ActiveCell.Value = "Natale è passato da giorni = "
Range("a11").Select
ActiveCell.Value = data - 37980
Else
Range("a10").Select
ActiveCell.Value = "A Natale mancano giorni = "
Range("a11").Select
ActiveCell.Value = 37980 - data
End If
Range("A11").Select
Selection.NumberFormat = "0.00"
End Sub
InputBox
• Metodo
• Funzione
Metodo InputBox
Visualizza una finestra di dialogo per l'input
dell'utente. Restituisce le informazioni
immesse nella finestra di dialogo.
Sintassi
espressione.InputBox(Prompt, Title, Default,
Left, Top, HelpFile, HelpContextID, Type)
Esempio di metodo InputBox
Sub prova()
Dim num As Integer
num = Application.InputBox(Prompt:="Digita un numero", Type:=1)
MsgBox ("Il numero digitato è " & num)
End Sub
Funzione InputBox
Visualizza un messaggio in una finestra di
dialogo, attendendo che l'utente immetta del
testo o scelga un pulsante, quindi restituisce
un valore String che include il contenuto della
casella di testo.
Sintassi
InputBox(prompt[, title] [, default] [, xpos] [,
ypos] [, helpfile, context])
Esempio di funzione InputBox
Sub prova()
Dim nome As String
nome = InputBox("Come ti chiami?")
MsgBox ("Ciao " & nome)
End Sub
MsgBox e pulsanti bistabili
Visualizza un messaggio in una finestra di
dialogo e attende che l'utente scelga un
pulsante, quindi restituisce un valore Integer
che indica quale pulsante l'utente ha scelto.

Sintassi
MsgBox(prompt[, buttons] [, title] [, helpfile,
context])
Esempio di MsgBox
Sub prova1()
Msg = "Continuare ?"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "Dimostrazione MsgBox"
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
MyString = "Sì"
Else
MyString = "No"
End If
End Sub
Istruzione For Each...Next
Ripete un gruppo di istruzioni per ogni elemento
di una matrice o di un insieme.
Sintassi
For Each elemento In gruppo
[istruzioni]
[Exit For]
[istruzioni]
Next [elemento]
Sub Macro1()
Esempio di For each
Dim Found As Boolean
Dim OggettoMio, Collezione As Object
Found = False
Set Collezione = Range("a1:a4")
For Each OggettoMio In Collezione
If OggettoMio.Text = "Paolo" Then
Found = True
Exit For
End If
Next
If Found Then
Range("a10").Select
ActiveCell.Value = "Trovato"
Else
Range("a10").Select
ActiveCell.Value = "Non trovato"
End If
End Sub
Istruzione For...Next
Ripete un gruppo di istruzioni per il numero di volte
specificato.
Sintassi
For contatore = inizio To fine [Step incremento]
[istruzioni]
[Exit For]
[istruzioni]
Next [contatore]
Esempio di For ... Next
Sub Macro1()
Dim Parole, Caratteri, Stringa As String
For Parole = 10 To 1 Step -1
For Caratteri = 0 To 9
Stringa = Stringa & Caratteri
Next Caratteri
Stringa = Stringa & " "
Next Parole
Range("a1").Select
ActiveCell.Value = Stringa
End Sub
Istruzione Do…Loop (do while)
Ripete un blocco di istruzioni finché la valutazione
di una condizione dà come risultato True.
sintassi
Do [{While | Until} condizione]
[istruzioni]
[Exit Do]
[istruzioni]
Loop
Esempio di Do while
Sub prova1()
Dim Counter As Integer
Range("a1").Select
Counter = ActiveCell.Value
Do While Counter < 20
Counter = Counter + 1
Range(Selection, Selection.End(xlDown)).Select
ActiveCell.Offset(1, 1).Activate
ActiveCell.Value = Counter
Loop
End Sub
Istruzione Do…Loop (repeat until)
Ripete un blocco di istruzioni fino a quando
non dà come risultato True.
sintassi
Do
[istruzioni]
[Exit Do]
[istruzioni]
Loop [{While | Until} condizione]
Esempio di Repeat until
Sub prova()
Dim Check As Boolean, Counter As Integer
Check = True: Counter = 0
Do
Do While Counter < 20
Counter = Counter + 1
If Counter = 10 Then
Check = False
Exit Do
End If
Loop
Loop Until Check = False
End Sub
Istruzione While ... Wend
Ripete un blocco di istruzioni fin quando la
condizione è vera.
sintassi
While condizione
[istruzioni]
Wend
Esempio di While
Sub giorni()
oggi = Now()
Cells(1, 1) = oggi
Cells(1, 1).NumberFormat = "dd/mm/yy"
fine_anno = 38352
data = oggi + 7
i=1
While data < fine_anno
i=i+1
Cells(i, 1) = data
Cells(i, 1).NumberFormat = "dd/mm/yy"
data = data + 7
Wend
End Sub