Ambiente di sviluppo vba
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, 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.
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.
Vba Esempi
Esempi di automazioni su oggetti Excel
Creiamo 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 = "*"
Next
End 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").Select
End 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.Paste
End Sub
Esempio 4
L'esempio blocca la prima riga del foglio attivo.
Sub Blocca_riga()
Rows("2:2").Select
ActiveWindow.FreezePanes = True
End 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
Next
End 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
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
Next
End 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).Activate
End 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()
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").Delete
End 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 = False
End Sub
Esempio 12
Apriamo 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
Next
End Sub
Esempio 13
L'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
End With
C = InputBox("Quanto lunga vuoi la serie?")
For i = 1 To C - 1
Fibonacci Selection
Selection.Offset(1).Select
Next
End Sub
Sub Fibonacci(Zonafib As Object)
Zonafib.FormulaR1C1 = "=R[-2]C+R[-1]C"
End Sub
Esempio 14
La 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:=xlRicopiaMesi
End Sub
Esempio 15
Partendo 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 Zonaformule
End Sub
Esempio 16
Riferendosi 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
Next
End Sub
Esempio 17
Variante dell’esempio sopra.
Sub EliminaFormule()
ActiveSheet.Range("Inizon").CurrentRegion.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End Sub
Esempi di sviluppo automazioni con interfaccia utente
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:
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_Click
End Sub
Private Sub CmdChiudi_Click()
FrmCerca.Hide
End 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
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
Next
End 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
Next
End Sub
Private Sub CmdRipristina_Click()
ActiveSheet.UsedRange.Select
Selection.EntireRow.Hidden = False
End 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:
Di seguito sono riportate le routine da inserire nel modulo di codice associato alla UserForm "FrmScaduti".
Private Sub CmdEsci_Click()
Unload Me
End 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:
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.Count
End 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 Sub
10: MsgBox "Record non trovato"
End Sub
Private Sub CmdEsci_Click()
Unload Me
End 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 = ValScr
End 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 = ValScr
End Sub
Private Sub SpnNum_SpinDown()
ScrNum.Value = 2
ScrNum_Change
End Sub
Private Sub SpnNum_SpinUp()
ValScr = ActiveSheet.UsedRange.Rows.Count
ScrNum.Max = ValScr
ScrNum.Value = ValScr
ScrNum_Change
End Sub
Private Sub UserForm_Activate()
ScrNum.Max = ActiveSheet.UsedRange.Rows.Count
ScrNum.Min = 2
End Sub
Nel foglio di lavoro inseriamo un pulsante che attivi la Userform "FrmLista" (vedi paragrafo "Generatore di Macro").
Il generatore di Macro vba
Excel 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".

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".
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".
Creare Interfaccia Utente in vba
L’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.

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:

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à:
* 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
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 utente
Per 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.
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 metodi
Oltre 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.

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.
Esempio riepilogativo
L'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.

*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
Next
End 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
Next
End 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.Clear
End 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 If
End Sub
Con un Click del mouse sul pulsante "CmdEsci", viene scarica la finestra.
Private Sub CmdEsci_Click()
Unload Me
End Sub
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.
Vba Obiettivi
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.
Affrontare un nuovo argomento è sempre un passo difficile, ma quando comincerai a vedere i primi risultati concreti, il mondo di Excel VBA ti affascinerà!
Gli Oggetti Excel in vba
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 Application
Rappresenta 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 Workbooks
Workbook 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
v
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.


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.show
End Sub
La routine attiva la UserForm "FrmCiao" quando viene aperto il documento Excel.
L'insieme Sheets
Sheets è 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 Worksheets
L’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.
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").Activate
ActiveSheet.PageSetup.Orientation = xlLandscape
ActiveSheet.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 Range
Rappresenta 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").Activate
Range("A1:H8").Formula = "=Rand()"
La proprietà Cells
La 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.
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").Activate
For TheYear = 1 To 5
Cells(1, TheYear + 1).Value = 1990 + TheYear
Next TheYear
For TheQuarter = 1 To 4
Cells(TheQuarter + 1, 1).Value = "Q" & TheQuarter
Next TheQuarter
End 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 = xlThick
End 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 If
End 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).ClearContents
Questo esempio imposta ad Arial 8 punti il carattere di tutte le celle di Foglio1.
With Worksheets("Foglio1").Cells.Font
.Name = "Arial"
.Size = 8
End 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 colIndex
Next rwIndex
Questo esempio imposta a corsivo lo stile del carattere delle celle comprese tra A1 e C5.
Worksheets("Foglio1").Activate
Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True
La proprietà Offset
Per 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").Activate
Selection.Offset(3, 1).Range("A1").Select
Il metodo Union
Per 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 Range
Worksheets("Foglio1").Activate
Set r1 = Range("A1:B2")
Set r2 = Range("C3:D4")
Set myMultiAreaRange = Union(r1, r2)
myMultiAreaRange.Select
La proprietà Columns
Restituisce 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").Activate
areaCount = Selection.Areas.Count
If 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 i
End If
La proprietà Rows
Per 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 = this
Next
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").Activate
areaCount = Selection.Areas.Count
If 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 a
End If





















