|
|
Appunti di VBA per EXCEL 2000
Codice VBA EXCEL commentato
Gli esempi che seguono, vista la loro semplicità, hanno l'unico scopo di mostrare in modo sintetico come usare le funzioni fondamentali messe a disposizione dal VBA di EXCEL 2000.
Si raccomanda di tentare di risolvere l'esercizio autonomamente prima di ricorrere alla soluzione per evitare che i presenti appunti diventino uno sterile eserciziario.
ESERCIZIO 1
Realizzare una macro che scriva una stringa, scelta dal programmatore a tempo di sviluppo del codice, nelle prime 10 celle in diagonale dalla A1 del foglio elettronico attivo.
Soluzione:
Sub M_Macro1()
Dim cont As Integer
For cont = 1 To 10
Worksheets("Foglio1").Cells(cont, cont) = "Stefano !!!"
Next cont
End Sub
ESERCIZIO 2
Realizzare una macro che scriva una stringa, scelta dal programmatore a tempo di sviluppo del codice, nel range di celle dalla B1 alla K10 del foglio elettronico attivo.
Soluzione:
Sub M_Macro2()
Range("B1:K10") = "Stefano !!!"
End Sub
ESERCIZIO 3
Realizzare una macro che scriva una stringa, scelta dal programmatore a tempo di sviluppo del codice, nella cella attualmente attiva del foglio elettronico attivo.
Soluzione:
Sub M_Macro3()
ActiveCell.Value = "Stefano !!!"
End Sub
ESERCIZIO 4
Realizzare una macro che visualizzi una finestra di messaggio nella quale viene specificato il numero di righe e colonne dell'area selezionata dall'utente prima dell'attivazione della macro.
Soluzione:
Sub M_Macro4()
Dim c, r As Integer
c = Selection.Columns.Count
r = Selection.Rows.Count
MsgBox "Il numero delle colonne selezionate è " & c & ". Quello delle righe è " & r
End Sub
ESERCIZIO 5
Realizzare una macro che letto una valore numerico da una finestra di dialogo, lo scriva nelle celle selezionate dall'utente prima della attivazione della macro. Prima della visualizzazione sullo schermo del risultato della macro visualizzare una finestra di dialogo che presenti una richiesta di conferma della azione richiesta alla macro.
Soluzione:
Sub M_Macro5()
Dim stringa As String
Dim celle, var As Integer
stringa = InputBox("Inseriscri il valore da copiare", "M_Macro5", "Stefano !!!")
If stringa <> "" Then
var = MsgBox("Verrà 747b15h scritto " & stringa & " in " & celle & " celle", vbExclamation + vbYesNo)
If var = vbYes Then
Selection.Value = stringa
End If
End Sub
ESERCIZIO 6
Realizzare una macro che scriva una stringa scelta dal programmatore a tempo di sviluppo dell'applicazione in un'area compresa fra due estremi letti in input tramite finestra di dialogo.
Soluzione:
Sub M_Macro6()
Dim cella1, cella2 As String
Worksheets("Foglio1").Activate
cella1 = InputBox("Inserisci cella di inizio")
If cella1 <> "" Then
cella2 = InputBox("Inserisci cella di fine")
If cella2 <> "" Then
Range(cella1, cella2) = "Stefano !!!"
End If
End If
End Sub
ESERCIZIO 7
Realizzare una macro che scriva numeri naturali consecutivamente, a partire da 1, nella area selezionata dall'utente a tempo di esecuzione.
Soluzione:
Sub M_Macro7()
Dim cella1, cella2, attiva As String
Dim c, r, i, j As Integer
c = Selection.Columns.Count
r = Selection.Rows.Count
For i = 1 To r
For j = 1 To c
Selection.Cells(i,j) = j + ((i-1) * r)
Next j
Next i
End Sub
ESERCIZIO 8
Realizzare una macro che visualizzi numeri casuali all'interno dell'area selezionata dall'utente prima dell'attivazione della macro. Gli estremi di generazione dei numeri devono essere letti run-time tramite una finestra di dialogo.
Soluzione
Sub M_Macro8()
Dim cella1, cella2, attiva As String
Dim c, r, i, j As Integer
Dim inf, sup As Integer
Randomize
If Selection.Cells.Count = 0 Then
MsgBox "Spiacente, è necessario selezionare l'area prima"
Else
inf = InputBox("Inserire inf per generazione numeri casuali")
sup = InputBox("Inserire sup per generazione numeri casuali")
c = Selection.Columns.Count - 1
r = Selection.Rows.Count - 1
For i = 1 To r
For j = 1 To c
'Genero numeri casuali compresi fra inf e sup
Selection.Cells(i, j) = Int(Rnd() * (sup-inf+1)+inf)
Next j
Next i
End If
End Sub
ESERCIZIO 9
Realizzare una macro che permetta ala pressione di un pulsante collocato sul foglio elettronico attivo di eseguire le seguenti operazioni:
generare numeri casuali nell'area selezionata dall'utente tramite mouse sul foglio elettronico attivo; i numeri devono essere compresi fra 5 e 10
contare il numero di volte che una cella dell'area selezionata contiene un valore uguale alla cella adiacente a destra
Un esempio di output potrebbe è il seguente:
|
|
|
|
|
|
|
|
|
Il risultato che deve essere comunicato all'utente deve essere 4.
Soluzione
Private Sub CommandButton1_Click()
riga = 3 'riga di inizio visualizzazione numeri casuali
colonna = 3 'colonna di inizio visualizzazione numeri casuali
N = Cells(1, 4) 'numero di numeri casuali da generare
cont = 0
inf = Cells(1, 10)
intervallo = Cells(1, 7) - inf + 1
For i = 0 To (N - 1)
For j = 0 To (N - 1)
Cells(riga + i, colonna + j) = Int(Rnd() * intervallo) + inf
Next j
Next i
For i = 0 To (N - 1)
For j = 0 To (N - 2)
If Cells(
cont = cont + 1
End If
Next j
Next i
Cells(1, 12) = cont
End Sub
ESERCIZIO 10
Realizzare una macro che generati dei
numeri casuali fra 1 e
Soluzione:
Sub M_Macro9()
' Dichiarazione variabili
Dim i, j, As Integer 'Contatori di riga e colonna rispettivamente
Dim c, r, n As Integer 'Numero di colonne, righe e celle della area selezionata
Dim val, cont As Integer 'Numero di cui calcolo la f relativa e sua frequenza assoluta
Randomize
' Inizializzazioni
c = Selection.Columns.Count 'Determino il numero delle colonne della selezione
r = Selection.Rows.Count 'Determino il numero delle righe della selezione
n = Selection.Cells.Count 'Determino il numero totale di elementi della popolazione
Worksheets("Foglio2").Cells(1, 1) = "Numero"
Worksheets("Foglio2").Cells(1, 3) = "f relativa"
'Assegno numeri casuali all'interno dell'area selezionata dall'utente
For i = 1 To r
For j = 1 To c
'Assegna un numero casuale alla cella di riga 'i' e colonna 'j' all'interno dell'area selezionata
Selection.Cells(i, j) = Int(Rnd() * 11)
Next j
Next i
'Calcolo la frequenza con cui ogni elemento che è stato generato compare nella selezione
For val = 0 To 10 'Eseguo il ciclo per cercare i numeri all'interno della serie generata
cont = 0 'Inizializzo a 0 il valore della frequenza assoluta del numero "val"
For i = 1 To r
For j = 1 To c
If Selection.Cells(i, j) = val Then 'Controllo se la cella di coordinate (i,j)
'contiene il valore per il quale stò facendo il conteggio della frequenza relativa
cont = cont + 1 'Incremento la frequenza assoluta
End If
Next j
Next i
Output dei risultati
Worksheets("Foglio2").Cells(2 + val, 1) = val 'Comunico il valore al quale si
'riferisce il dato calcolato di seguito
Worksheets("Foglio2").Cells(2 + val, 3) = cont / n 'Calcolo della frequenza relativa
Next val
End Sub
Guida rapida
Il contenuto di questa appendice serve solo come riferimento rapido per la sintassi di VB 6 e EXCEL 2000.
ISTRUZIONI DI ITERAZIONE
Ciclo For
Viene di solito utilizzato quando è noto a priori il numero di volte che il corpo del ciclo dovrà essere ripetuto.
La sintassi è la seguente :
For counter
= start To end [Step passo] Next [counter] |
Counter = contatore del ciclo
Start valore iniziale per Counter
End valore finale per Counter
Passo = passo del conteggio. Attribuendo a Passo valori negativi il
conteggio avverrà all'indietro
Ciclo Do
Di solito viene utilizzato quando non è noto a priori il numero delle volte che dovrà essere ripetuto il corpo del ciclo.
Può essere usato per realizzare cicli pre-condizionati (il controllo viene eseguito prima del corpo del ciclo) o post-condizionati (il controllo viene eseguito dopo il corpo del ciclo).
Nel caso pre-condizionato abbiamo la seguente sintassi :
Do [ condizione] Loop |
Nel caso post-condizionato abbiamo la seguente sintassi :
Do Loop [ condizione] |
Condizione espressione che fornisce un risultato logico (Boolean).
Possono essere usati >, <, =, <>, <=, >=.
Quando viene usato While, il ciclo viene rieseguito fino a quando condizione risulta vera. Condizione rappresenta pertanto la condizione percui il ciclo deve essere rieseguito.
Quando viene usato Until, il ciclo viene rieseguito fino a quando condizione risulta falsa. Condizione rappresenta pertanto la condizione di uscita dal ciclo.
CONTROLLO DI FLUSSO
Fanno parte di questo tipo di istruzioni i comandi di selezione singola e selezione multipla.
Selezione singola
Viene implementata tramite il costrutto If.
La sintassi del comando è la seguente
If condizioneThen [Else End If |
Selezione multipla
Viene implementata tramite il costrutto Select Case.
La sintassi del comando è la seguente
Select Case espressione_test [istruzioni_relative_a_valore_i-esimo]
... End Select |
VARIABILI, COSTANTI E TIPI DI DATO
All'interno di un qualsiasi progetto VB (quindi anche VBA), abbiamo tre livelli di visibilità delle variabili e delle costanti :
routine (visibilità locale)
modulo
globale
Una variabile locale (visibile soltanto a livello di routine) deve essere dichiarata subito dopo l'intestazione della routine, seguendo la seguente sintassi :
Dim varname (dimensione)] As type [,varname[(dimensione)] As type] ... |
varname = identificatore della variabile
dimensione = dimensione della variabile (presente solo nel caso di vettori)
type = tipo della variabile
Una variabile visibile a livello di modulo deve essere dichiarata nell'area dati riservata alle dichiarazioni di quel modulo, cioè prima di qualsiasi routine definita nel modulo al quale si vuole limitare la visibilità della variabile.
E' necessario seguire la seguente sintassi :
Private varname[(dimensione)] As type [,varname[(dimensione)] As type] ... |
Una variabile visibile a livello globale deve essere dichiarata nell'area dati riservata alle dichiarazioni cioè, in qualunque modulo del progetto ma prima di qualsiasi routine, seguendo la seguente sintassi :
Public varname[(dimensione)] As type] [,varname[(dimensione)] As type] ... |
Le costanti devono essere definite in modo del tutto analogo alle variabili.
Anche per le costanti valgono le medesime regole di visibilità.
Non è possibile dichiarare delle costanti "locali", cioè il cui livello di visibilità sia ristretto alla sola routine dove compare.
Qualora due routine Sub1 e Sub2 definissero al loro interno la medesima costante, quella definita all'interno della Sub2 sovrascriverebbe quella definita in Sub1 (purchè la codifica di Sub1 preceda quella di Sub2).
Possiamo pertanto concludere che non esistono costanti locali.
Una costante visibile a livello di modulo deve essere dichiarata nell'area dati riservata alle dichiarazioni cioè, in qualunque modulo del progetto ma prima di qualsiasi routine, seguendo la seguente sintassi :
Private Const constname [As type] = valore_costante |
Questa è la modalità di default per le costanti, cioè omettendo la parola chiave Private otterrei lo stesso risultato.
Una costante visibile a livello globale deve essere dichiarata nell'area dati riservata alle dichiarazioni cioè, in qualunque modulo del progetto ma prima di qualsiasi routine, seguendo la seguente sintassi :
Public Const constname [As type] = valore_costante |
I tipi di dato predefiniti in VB 6 più comunemente usati sono :
Tabella A2-1 : alcuni tipi di dato primitivi di VB 6
Tipo |
Descrizione |
Intervallo |
Byte |
1 byte |
Da |
Boolean |
2 byte |
True o False |
Integer |
Intero a 2 byte |
Da -32,768 a 32,767 |
Long |
Intero a 4 byte |
Da |
Single |
Virgola mobile a 4 byte |
Da -3,402,823E38 a -1,401,298E-45
per valori negativi e da 1,401,298E- |
Double |
Virgola mobile a 8 byte |
Da
179,769,313,486,231E308 a 494,065,645,841,247E-324 per valori negativi e da
494,065,645,841,247E- |
Date |
8 byte |
Da 1/1/100 a 12/31/9999 |
String |
Stringa di caratteri |
Da |
Nota sull'operatore "="
Questo operatore funziona sia come assegnazione che come confronto.
Nel caso di funzionamento come assegnazione viene applicato un cast implicito da VB, mentre ciò non avviene nel caso del confronto.
Di conseguenza, è possibile assegnare una stringa a un intero, ma non ha senso confrontare una stringa con un intero.
FINESTRE DI INTERAZIONE CON L'UTENTE
Vengono usate le funzioni MsgBox e InputBox, le quali si appoggiano direttamente alle API Win32 di Windows.
MsgBox
Serve per creare una finestra di output verso l'utente.
La sintassi è la seguente :
[Ritorno =] MsgBox(strPrompt[,intStyle][,strTitle]) |
La funzione ritornerà un valore solo nel caso venga introdotto qualche pulsante oltre a quello di "OK" (che è di default).
Ritorno = contiene il codice corrispondente al tasto selezionato
dall'utente all'interno della finestra di dialogo.
strPrompt = è la stringa che verrà visualizzata all'interno della finestra.
Potrà essere una variabile di tipo String oppure una stringa costante. In questo secondo caso, la stringa dovrà essere messa fra "". Le stringhe possono essere concatenate tramite il carattere &.
intStyle = serve per definire quali pulsanti e quali icone debbano
comparire all'interno della finestra utente. E' possibile inoltre specificare tramite questo parametro quale pulsante debba essere selezionato di default.
strTitle = è il titolo che assegniamo alla finestra di dialogo
Le parentesi () presentate nella sintassi del comando MsgBox devono essere inserite nella linea di codice solo se si desidera che MsgBox restituisca un valore. Questo valore sarà ovviamente l'indicazione di quale pulsante l'utente a premuto per chiudere la finestra di messaggio.
Vengono di seguito presentate due tabelle che riportano i valori predefiniti da VB che devono essere specificati per scegliere i pulsanti e le icone all'interno della finestra (Tabelle A2-1 e A2-2), una tabella dove vengono specificati valori predefiniti per attivare di default un pulsante oppure un altro (Tabella A2-3) ed infine una tabella una tabella nella quale vengono i riportati valori che la funzione MsgBox ritorna in seguito alla pressione di un pulsante o un altro all'interno della finestra.
Le opzioni vanno separate dal segno "+".
Tabella A2-2 : scelta pulsanti
Valore predefinito VB |
Pulsante visualizzato sulla finestra di dialogo |
vbOKOnly |
OK |
vbOKCancel |
OK e Annulla |
vbAbortRetryIgnore |
Termina, Riprova, Ignora |
vbYesNoCancel |
Si, No, Annulla |
vbYesNo |
Si, No |
vbRetryCancel |
Riprova, Annulla |
Tabella A2-3 : scelta icone
Valore predefinito VB |
Icona attiva sulla finestra di dialogo |
VbCritical |
Messaggio critico |
VbQuestion |
Punto interrogativo |
VbExclamation |
Punto esclamativo |
vbInformation |
Icona di informazione |
Tabella A2-4 : scelta del pulsante attivo di default
Valore predefinito VB |
Pulsante attivo sulla finestra di dialogo |
vbDefaultButton1 |
Primo pulsante |
vbDefaultButton2 |
Secondo pulsante |
vbDefaultButton3 |
Terzo pulsante |
vbDefaultButton4 |
Quarto pulsante |
Tabella A2-5 : valori di ritorno di MsgBox
Valore predefinito VB |
Tasto selezionato sulla finestra di dialogo |
VbOK |
OK |
VbCancel |
Annulla |
VbAbort |
Termina |
VbRetry |
Riprova |
VbIgnore |
Ignora |
VbYes |
Si |
vbNo |
No |
InputBox
Serve per permettere all'utente di introdurre una stringa tramite una finestra.
La sintassi è la seguente :
[strRitorno =] InputBox(strPrompt[,strTitle][,strDefault][,intXpos][,intYpos]) |
StrRitorno = contiene la stringa digitata dall'utente nell'apposito spazio messo
a disposizione dalla finestra di dialogo. Se non compare nessun nome nella casella apposita, il valore ritornato è "". Se nella casella scrivo un numero, il valore restituito dalla funzione è un numero a tutti gli effetti.
strPrompt = è la stringa che verrà visualizzata all'interno della finestra.
Potrà essere una variabile di tipo String oppure una stringa costante. In questo secondo caso, la stringa dovrà essere scritta
fra ""
strTitle = è il titolo che assegniamo alla finestra di dialogo
strDefault = è la stringa che di default viene scritta nella casella riservata al
testo all'interno della casella di dialogo. Evidentemente questa
stringa potrà essere modificata dall'utente
intXpos = coordinata X della finestra di dialogo all'interno della schermata
video
intYpos = coordinata Y della finestra di dialogo all'interno della schermata
video
OGGETTI PER
Worksheets
Questo oggetto permette di accedere direttamente al foglio elettronico numero X della applicazione EXCEL corrente.
Alcune delle sue proprietà e dei suoi metodi sono particolarmente interessanti.
Sono importanti le seguenti proprietà:
Activate
Serve per attivare il foglio specificato in Worksheets.
Cells(riga, colonna)
Questo metodo serve per accedere alla cella identificata da riga e da colonna all'interno del foglio elettronico specificato da Worksheets.
Selection
Serve per accedere a proprietà e funzionalità del foglio elettronico selezionato.
La selezione del foglio elettronico può essere fatta ad esempio con il metodo Activate dell'oggetto Worksheets.
Sono importanti le seguenti proprietà:
Columns
E' la proprietà che fa riferimento a tutte le colonne selezionate nel foglio elettronico corrente.
La sottoproprietà Count serve per contare il numero di colonne selezionate.
Rows
E' la proprietà che fa riferimento a tutte le righe selezionate nel foglio elettronico corrente.
La sottoproprietà Count serve per contare il numero di righe selezionate.
Cells
E' la proprietà che fa riferimento a tutte le celle selezionate nel foglio elettronico corrente.
La sottoproprietà Count serve per contare il numero di righe selezionate.
Offset
Questa proprietà serve per fare riferimento a una cella dell'area selezionata secondo un certo piazzamento (offset appunto) rispetto alla prima cella selezionata dall'utente.
Range
Serve per selezionare dal codice una area sul foglio elettronico
ActiveCell
Serve a fare riferimento alla cella attualmente attiva sul foglio elettronico
Sono importanti le seguenti proprietà:
Offset
Questa proprietà serve per fare riferimento a una cella secondo un certo piazzamento (offset appunto) rispetto alla cella correntemente selezionata dall'utente.
Privacy |
Articolo informazione
Commentare questo articolo:Non sei registratoDevi essere registrato per commentare ISCRIVITI |
Copiare il codice nella pagina web del tuo sito. |
Copyright InfTub.com 2025