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 Excel Libreria di oggetti VBA
rogrammazione procedurale Linguaggi procedurali nascondono la complessità delle operazioni sui dati Si invocano delle funzioni su blocchi di dati Programmazione ad oggetti Linguaggi orientati agli oggetti nascondono i dati e la 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.
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 Esempio di Long
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ù strumentiopzioni-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
Esempio di If Sub Macro1() 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]
Esempio di For each Sub Macro1() 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. While condizione [istruzioni] Wend sintassi
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