Introduction to Pore3D

Visual Basic for Applications (VBA)
Francesco Brun
Fondamenti di Informatica – a.a. 2014/2015
Visual Basic for Applications (VBA)
Scopo di questo approfondimento
• Lo scopo di questo approfondimento è rispondere alla domanda:
… e se nella vita mi troverò a dover utilizzare un
linguaggio di programmazione che non è il C?
• Cerchiamo di rispondere a questa domanda usando VBA come esempio
• VBA sta per Visual Basic for Applications
• Usiamo VBA per estendere le funzionalità di Microsoft Excel
• Se avete Excel potete tranquillamente replicare i contenuti di questa lezione
Fondamenti di Informatica Anno accademico 2014/2015
Visual Basic for Applications (VBA)
Utilità di VBA: le macro di Excel
• Il VBA può tornare utile perché:
 Estendete le funzionalità del foglio elettronico Excel
 Avete la GUI (Graphical User Interface) di Excel
• La possibilità di estendere le funzionalità di un software spesso si chiama macro
• (La parola macro in questo caso non ha nulla a che fare con le macro in C)
• Le macro (non per forza VBA) si trovano anche in altri software commerciali
• Se volete provare con Excel state attenti alle opzioni di sicurezza
• Opzioni -> Centro protezione -> Opzioni Macro -> …
• Tirate fuori la barra degli strumenti ″Sviluppo″ dalle opzioni di Excel
Fondamenti di Informatica Anno accademico 2014/2015
Visual Basic for Applications (VBA)
Tipi in VBA
• Ogni linguaggio di programmazione opera su tipi di dati
• I tipi del VBA si chiamano così:
Integer
Long
Single
Double
Currency
String
Byte
Boolean
Date
2 byte integer
4 byte integer
4 byte floating point
8 byte floating point
8 byte ″fixed point″
up to 64K characters
1 byte
2 byte true or false
8 bytes
int del C si chiama Long
in VBA
il “char” del C
…servono due byte per
un true/false?
• La tipizzazione può essere anche dinamica (esiste uno strano ″tipo di tutti i tipi″)
• Si può imporre la tipizzazione forte (come in C) ed è di norma una cosa da fare
Fondamenti di Informatica Anno accademico 2014/2015
Visual Basic for Applications (VBA)
Dichiarazione di variabili in VBA
• Per imporre la tipizzazione forte il codice VBA inizia con:
Option Explicit
che di default (ovvero in maniera predefinita) non compare
• Per dichiarare una variabile, la sintassi generale è:
Dim variable As type
quindi per dichiarare una variabile i di tipo simile a int del C, si ha ad esempio:
Dim i as Long
• Si noti che le istruzioni non vanno terminate con ; ma con ″a capo″
Fondamenti di Informatica Anno accademico 2014/2015
Visual Basic for Applications (VBA)
Selezione in VBA
• Un if… then… else in VBA si fa, ad esempio, così:
If a > 10 Then
…
End If
If a > 10 Then
…
Else
…
End If
If a > 10 Then
…
ElseIf a < 0 Then
…
Else
…
End If
Fondamenti di Informatica Anno accademico 2014/2015
Visual Basic for Applications (VBA)
Iterazione in VBA
• Il while in VBA:
Do While expr
…
Loop
Do
…
Loop While expr
• Il for in VBA:
For i=1 To 10
…
Next i
For i=1 To 10 Step 2
…
Next i
di default il contatore è
incrementato di 1
con step si può variare
l’incremento del contatore
Fondamenti di Informatica Anno accademico 2014/2015
Visual Basic for Applications (VBA)
Sottoprogrammi in VBA
• La sintassi VBA distingue tra Sub e Function
Sub Name()
…
End Sub
Function Name() As Double
…
Name = 0.0
End Sub
tipo restituito dal
sottoprogramma
per la return si usa
un assegnamento con il
nome della Function
• Per il passaggio dei parametri ci sono le parole ByVal e ByRef)
Sub Name(ByVal param1 As Long)
…
End Sub
Sub Name(ByRef param1 As Long)
…
End Sub
se non si specifica il
VBA assume il default
ByRef
Fondamenti di Informatica Anno accademico 2014/2015
Visual Basic for Applications (VBA)
Tipi specifici del VBA Excel
• Per sfruttare l’interfaccia grafica di Excel (le celle) ci sono istruzioni apposite
• Interessanti sono le istruzioni che sfruttano i tipi (o oggetti):
 Cells
 Range
• Le istruzioni, ad esempio, per scambiare i valori Long delle celle A1 e B1
Sub Swap()
Dim temp As Long
temp = Range("A1").Value
Range("A1").Value = Range("B1").Value
Range("B1").Value = temp
End Sub
Fondamenti di Informatica Anno accademico 2014/2015
Visual Basic for Applications (VBA)
Tipi specifici del VBA Excel
• Può essere utile inserire un command button nel foglio elettronico
• Si collega poi il bottone alla macro per poterla richiamare
Fondamenti di Informatica Anno accademico 2014/2015
Visual Basic for Applications (VBA)
Esempio un po’ più ricco…
• Scambiamo le prime 10 righe della colonna A di Excel con la colonna B
Sub SwapRows()
Dim i As Long
Dim temp As Long
For i = 1 To 10
'Cells vuole come parametri prima l'indice
'di riga e poi quello di colonna. Gli indici
'partono da uno e non da zero...
temp = Cells(i, 1)
Cells(i, 1) = Cells(i, 2)
Cells(i, 2) = temp
Next i
End Sub
Fondamenti di Informatica Anno accademico 2014/2015
Visual Basic for Applications (VBA)
Una funzione personalizzata
• Supponiamo di voler fare una funzione personalizzata di Excel
• In questo esempio ci creiamo una somma dei soli numeri pari nell’intervallo
(non sarà una funzione molto utile ma è solo un esempio…)
• Vogliamo creare SUMEVENNUMBERS e usarla come le altre funzioni di Excel
Fondamenti di Informatica Anno accademico 2014/2015
Visual Basic for Applications (VBA)
Una funzione personalizzata
• Una possibile implementazione:
Function SUMEVENNUMBERS(rng As Range)
Dim cell As Range
Dim s As Long
notare questa cosa
atroce del VBA:
l’operatore di
assegnamento coincide
con quello di confronto
s = 0
For Each cell In rng
If cell.Value Mod 2 = 0 Then
s = s + cell.Value
End If
Next cell
SUMEVENNUMBERS = s
End Function
Esiste il comodo For Each
molto utile per gli oggetti
Cell e Range
Fondamenti di Informatica Anno accademico 2014/2015