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