Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

Appunti di VBA per EXCEL 2000 - Codice VBA EXCEL commentato

informatica



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 !!!")

celle = Selection.Cells.Count

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(riga + i, colonna + j) = Cells(riga + i, colonna + j + 1) Then

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 10 in un'area selezionata dall'utente prima dell'attivazione della macro stessa, determini la frequenza relativa di uno numero specificato dall'utente all'interno della selezione. Il numero di cui calcolare la frequenza relativa deve essere letto tramite finestra di dialogo e l'output deve essere una finestra di messaggio.


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


'Inizializzo il foglio di presentazione

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]
[corpo del ciclo]
[Exit For]
[corpo del ciclo]

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]
[corpo del ciclo]
[Exit Do]
[corpo del ciclo]

Loop



Nel caso post-condizionato abbiamo la seguente sintassi :



Do
[corpo del ciclo]
[Exit Do]
[corpo del ciclo]

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
[istruzioni_relative_al_ramo_If]

[Else
istruzioni_relative_al_ramo_else]

End If




Selezione multipla

Viene implementata tramite il costrutto Select Case.

La sintassi del comando è la seguente



Select Case espressione_test
Case valore_i-esimo

[istruzioni_relative_a_valore_i-esimo] ...
[Case Else
istruzioni_relative_al_caso_Else]

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 0 a 255

Boolean

2 byte

True o False

Integer

Intero a 2 byte

Da -32,768 a 32,767

Long

Intero a 4 byte

Da -2,147,483,648 a 2,147,483,647

Single

Virgola mobile a 4 byte

Da -3,402,823E38 a

-1,401,298E-45 per valori negativi e da 1,401,298E-45 a 3,402,823E38 per valori positivi

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-324 a 179,769,313,486,232E308 per valori positivi

Date

8 byte

Da 1/1/100 a 12/31/9999

String

Stringa di caratteri

Da 0 a 65,535

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 LA GESTIONE DEL FOGLIO ELETTRONICO CON VBA


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


Hits: 4175
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024