(pubblicato il 12 gennaio 2003)
Visual Basic for Application
(tratto dal sito:
http://ennius.interfree.it/indice.htm
)
http://www.softwareplanet.net/php/mostraLezione.php?idl=17&parte=5
Fin dalla versione 5.0 di Excel la Microsoft ha introdotto il Visual Basic for Application – in sigla, VBA - inaugurando una strategia unificante, all'insegna del linguaggio di programmazione Visual Basic. Il Visual Basic peculiare di Excel ha soppiantato il precedente sistema di macrofunzioni (rimaste tuttora in vita, per compatibilità) e, successivamente è stato esteso agli altri membri della famiglia MS Office (Word, Access ecc.).
Ma che cos'è un Visual Basic per applicazioni? Esiste una certa confusione al riguardo, persino fra i programmatori di professione, per cui vanno subito fatte due puntualizzioni:
a) non si tratta di un'estensione del linguaggio "padre", il Visual Basic standard, bensì di un'evoluzione del sistema di macro tradizionalmente associata ai fogli elettronici;
b) di conseguenza, pur aderendo da vicino alla sintassi Visual Basic stadard, una routine VBA si esegue soprattutto, anche se non esclusivamente, nell'ambiente del package Excel (dalla versione 5.0 in avanti);
c) grazie ad un avanzato "protocollo" Microsoft, l'OLE Automation, si danno però interessanti possibilità di cooperazione, in una logica Client/Server fra i vari membri del mondo Visual Basic.
Le opzioni avanzate offerte dall'OLE Automation implicano la possibilità di richiamare funzionalità di un pacchetto da parte di un programma scritto sia in Visual Basic standard sia in uno qualunque degli altri "dialetti" VBA. Per fare due esempi concreti, con OLE automation è possibile:
· in un programma Visual Basic 5.0 o 6.0 sfruttare la libreria di funzioni finanziarie di Excel sia direttamente che tramite fogli elettronici (creati anche estemporaneamente);
· da una macro Excel gestire documenti Word (o presentazioni PowerPoint).
In queste note introduttive al vasto mondo VBA non arriveremo a parlare di tali prospettive avanzate, tuttavia l'averne accennato è importante, se non altro per mettere in evidenza l'importanza del VBA:
Cosa è una MACRO
La MACRO è un' istruzione scritta in linguaggio Visual Basic che Excel usa per compiere determinate azioni descritte nell'istruzione stessa. L'insieme delle istruzioni si definisce CODICE. Il Codice è compilabile, cioè possiamo scriverlo, aggiungerlo, modificarlo come si farebbe con qualunque testo, solo che è necessario usare una forma di scrittura che Excel sia in grado di comprendere : il suo linguaggio, il Visual basic for Application. Excel stesso è in grado di compilare una Macro, cioè del codice : basta usare il "Registratore di Macro". (vedi sezione "Cosa è il VBA"). Quello che segue è un piccolo esempio di codice( o macro. Da notare: ogni macro ha bisogno di un nome che la identifichi. NON si può usare lo stesso nome 2 volte):
Macro di esempio (o codice) |
Significato delle istruzioni |
Sub Prova() |
Nome della macro(Prova) (e inizio istruzioni)
Pulisci la cella A3 dal contenuto Nella cella A3 genera un numero casuale Fine istruzioni (esce dalla macro) |
La stessa istruzione poteva essere svolta da una funzione : CASUALE() da scriversi nella cella A3. Es.: =CASUALE()*10 (avrebbe generato un numero casuale compreso tra 0 e 10), però:
Considerazioni
Excel possiede quindi DUE possibilità di eseguire istruzioni:
la prima, e più immediata, è l'immissione di comandi attraverso le FORMULE o le FUNZIONI, che devono essere inserite sul foglio di lavoro, scritte nelle celle interessate, e che quindi possiamo definire "RESIDENTI", agiscono cioè sempre e comunque (errori a parte). NON possono essere attivate su comando, e molto spesso, ci costringono ad usare altre celle per scambi di istruzioni e non basta, pena il famoso messaggio "Impossibile calcolare la formula, riferimento circolare", o si verificano solo ad apertura Foglio.
la seconda, è la creazione di codice che esegua, su COMANDO, un'istruzione di qualunque genere, compreso ovviamente formule o funzioni, ma attivabili nel momento in cui eseguiamo il comando. In questo caso avremo un'istruzione NON RESIDENTE, che ci consente una migliore gestibilità del nostro lavoro, e la ripetitività agendo di nuovo sul comando. Resta inoltre la versatilità di un linguaggio (codice) capace di impostare istruzioni che con le formule o le funzioni non è possibile eseguire (per esempio i cicli For ...Next, o altre amenità del genere).
Il consiglio che vivamente suggerisco, è quello, per colui che voglia avventurarsi nel mondo del "CODICE", di munirsi di libri specifici sull'argomento, oltre a quello di dare sempre un "occhiata" alla guida in linea, raggiungibile dalla pagina dell'editor di visual basic, premendo il tasto F1. (la guida è diversa se si preme F1 in visualizzazione Foglio di lavoro)
Editor di Visual Basic
Raggiungere l'Editor di Visual Basic o Visual basic Editor (secondo le versioni di Excel) è semplice, dal Menù Strumenti/macro/visual basic editor (vedi immagine sotto), oppure premendo i tasti ALT + F11.
![]() |
Con l'editor aperto dovreste avere una pagina come l'immagine sottostante
![]() |
In questa pagina, oltre al menù, troviamo tre finestre :
la prima in alto a sinistra è la finestra degli OGGETTI che compongono la cartella di lavoro (ThisWorkbook) e sono i Fogli che compongono la cartella di default (3). Nella stessa finestra compariranno i MODULI, se inseriti.
Nella finestra a sinistra, immediatamente sotto, c'è la finestra delle Proprietà degli oggetti presenti nella finestra soprastante.
Nella terza finestra, quella grande sulla destra, è la zona dove si può scrivere il codice. Nella parte superiore di questa finestra, ci sono due "menù a tendina". Ogni foglio ha una propria pagina dove poter scrivere il codice che riguarda istruzioni da eseguire all'interno della pagina stessa, il primo sottomenù sulla sinistra ci offre due possibilità di scelta (vedi immagine sottostante)
|
Generale : verranno inserite istruzioni che avranno validità su tutto il foglio, come dimensionamento di variabili, di funzioni personalizzate, ecc.
Worksheet : verranno inserite istruzioni "locali" che non si influenzeranno le une con le altre, cioè se dichiareremo una variabile, la stessa sarà attiva solo all'interno della propria routine (Sub Pippo() ....End Sub). Nel sottomenù sulla destra, appare la scelta della selezione degli "EVENTI", cioè delle cause che attiveranno l'esecuzione di una o delle macro (vedi immagine sottostante).
![]() |
Private Sub Worksheet_Change(ByVal Target As Range) '(Nome e inizio della Macro o Routine )
in questo spazio va inserito il codice
End Sub (Fine della macro e uscita)
Quando non vogliamo usare un EVENTO abbinato ad un foglio per attivare una macro, perchè vogliamo decidere noi quando attivarlo, potremo usare un MODULO e scrivere il codice nel modulo, dando un nome alla routine (macro) per poi associarla ad un pulsante usando il nome assegnato in precedenza (vedi: Associazione Macro). L'inserimento di un Modulo è semplicissima: dal menù scegliamo Inserisci/Modulo (vedi immagine sottostante).
|
Nella finestra degli oggetti, apparirà il simbolo di una cartella con il nome "Moduli". DoppioClick sulla cartella e si aprirà mostrando il contenuto: "Modulo1", "Modulo2", e così via. Va precisato che in un modulo, si possono inserire più macro, non occorre quindi creare un modulo per ogni macro; queste infatti saranno riconosciute dal nome assegnato, non dalla residenza in un modulo piuttosto che un altro. Attenzione a non affollare comunque troppo il modulo (quando il modulo viene letto per cercare la macro richiesta, vengono lette comunque tutte le macro presenti nel modulo stesso). La finestra che si aprirà sulla destra conterrà, nei sotto menù in alto, solo "GENERALE" e "DICHIARAZIONI", zona che servirà ad assegnare variabili utilizzabili in tutte le macro presenti nel Modulo. L'inserimento della macro è semplice, basta scrivere il nome che vogliamo, preceduto da Sub e seguito da () parentesi aperta e chiusa, e alla fine del codice, scrivere "End Sub". Esempio.
Sub Ciccio()
in questa zona scrivere le istruzioni
End Sub
Un altro modo di inserire il codice lo vedremo nella sezione "Casella degli strumenti" ora detta "Strumenti di controllo", anche se è simile al precedente.
Associazione Macro
Una volta creata una macro inserita in un Modulo, dobbiamo poterla attivare alla bisogna. Potremo usare uno dei seguenti metodi:
Dal menù Strumenti/Macro cliccare su Macro, si aprirà una finestra dove vengono elencate le macro presenti nella cartella di lavoro, indi selezionata la macro desiderata, premere il pulsante "Esegui", oppure premere il pulsante"Opzioni", e nella finestra che si apre, assegnare una lettera come "tasto di scelta rapida" : CTRL + lettera da voi scelta e dare OK. In questo modo con la combinazione CTRL + lettera attiverete la macro.
Dal menù Visualizza/Barre degli strumenti e mettere un segno di spunta alla voce "Visual Basic", apparirà sul foglio di lavoro una piccola finestra come quella indicata dalla freccia rossa nella foto sottostante. In questa finestra ci sono alcuni comandi: il primo da sinistra (un triangolo), se cliccato farà apparire la finestra delle macro, basterà seguire la modalità del punto precedente. (in questa finestrina appaiono altri comandi utili per le macro: il registratore, l'editor, ecc.
![]() |
L'inconveniente legato a questi metodi è palese: bisogna ripetere l'operazione tutte le volte che vogliamo attivare una macro nel primo caso, mentre con l'assegnazione di "tasti di scelta rapida" bisognerà ricordarsi, in caso di più macro presenti, quale è la lettera giusta per una determinata macro. La soluzione che consiglio è quella di crearsi un pulsante (ottenibile comunque dall'inserimento sul foglio degli "strumenti di controllo" (vedi foto sopra), usando invece la modalità "disegno". Se Clicchiamo sulla barra degli strumenti, sull'icona "Disegno" (vedi foto sottostante) indicata con la freccia del mouse (parte alta a destra), apparirà sul piede del foglio (freccia rossa) gli oggetti utilizzabili con questa modalità: le Word Art.
![]() |
Selezionando la forma "rettangolo" (vedi foto sotto), o la "casella di testo" (2 icone a destra)
![]() |
e spostando il cursore del mouse in un punto qualsiasi del foglio, e tenendo premuto il pulsante del mouse, disegnare un rettangolo di cui potremo variare le dimensioni a piacere. Cliccando sul bordo del rettangolo col pulsante destro del mouse, apparirà un menù contestuale, dal quale, col sinistro del mouse, sceglieremo "ASSEGNA MACRO", si aprirà una finestra con le macro presenti e selezioneremo la prescelta dando OK. In questo modo avremo creato un comodo avvio per la nostra macro, che potremo attivare quando lo vorremo, infatti quando andremo col mouse sul pulsante associato, il cursore assumerà la forma di una mano, cliccheremo e la macro scatterà.
|
|
Per completare l'opera, tornando sul bordo del pulsante, in basso a destra, col destro del mouse, potremo scegliere "Aggiungi testo" e dare un nome per identificare a quale macro è associata, e da "Formato forme" per il "rettangolo" o da "formato casella di testo" per quest'ultima, potremo scegliere il colore di fondo, per evidenziare il pulsante.
Un' ulteriore maniera è quella di assegnare una macro ad un "CommandButton", selezionabile dalla casella degli strumenti, ed in "modalità progetto", assegnare all'evento click del commandbutton la suddetta macro. Ma questo lo vedremo nella sezione "Strumenti di controllo".
Casella degli strumenti
Una caratteristica di molti linguaggi di programmazione, e il VBA è uno di questi, è la "programmazione ad oggetti". Per oggetti si intendono quelli strumenti che facilitano o migliorano la gestione del foglio di lavoro e dei dati in esso contenuti, attraverso l'inserimento dell'oggetto stesso sul foglio di lavoro: sono oggetti : commandbutton, casella combinata, casella di testo, option button, una form,ecc. Ogni oggetto possiede delle proprietà, dei metodi, e degli eventi . Le proprietà sono le caratteristiche che l'oggetto possiede e che possono essere modificate nelle impostazioni. Ogni oggetto ha le sue proprie proprietà, non necessariamente comuni ad altri oggetti. Per usare gli oggetti,una volta inseriti in un foglio, dovremo lavorare in "modalità progettazione" (si attiva automaticamente quando inseriamo l'oggetto, o si richiama cliccando sull'icona "squadra" nella casella degli strumenti); in questa modalità, con un doppio click sull'oggetto, entreremo nell'editor di visual basic che ci mostrerà nella finestra inferiore a sinistra, le proprietà dell'oggetto stesso. Sulla pagina destra troveremo invece la zona dove inserire eventuali istruzioni da far eseguire scegliendo un evento dell'oggetto stesso. Per esempio, usando un commandbotton, potremo sfruttare l'evento click, selezionandolo dalla finestrina in alto a destra, e ciò che vedremo sarà così:
Private Sub
CommandButton1_Click()
qui inseriremo l'istruzione (macro)
End Sub
continuando: l'oggetto "CommandButton" o "pulsante di comando", ha la proprietà "Caption" impostata a "CommanButton1" (la proprietà Caption è la scritta che vediamo sul pulsante) Possiamo modificare l'impostazione, scrivendo nel relativo campo delle proprietà, le parole che ci ricordano cosa avviene premendo il pulsante, per esempio "Aggiungi Dati". Ora, quando vedremo il pulsante, ci troveremo scritto "Aggiungi Dati". Il metodo è l'azione che l'oggetto "può" compiere e l' evento è l'azione che attiva il metodo.
Vi consiglio di consultare la guida in linea, attivabile anche con F1, per familiarizzarsi con questi concetti.
Vediamo, passo passo, come lavorare con questi strumenti: dal Menù Visualizza/Barre degli strumenti, selezionare la voce "Strumenti di Controllo" (o "Casella degli Strumenti" per le versioni più vecchie di Excel). vedi immagine sotto.
![]() |
Apparirà una piccola finestra come quella nelle foto sotto: è la finestra degli strumenti: passando il mouse sulle icone, appare la descrizione dell'oggetto. Nella foto sotto, a destra, è evidenziata l'icona della "Modalità Progettazione". questa modalità dovrà essere selezionata ogni qualvolta vorremo intervenire sulle proprietà dell'oggetto che avremo inserito sul foglio di lavoro. (la "Modalità Progettazione si attiva in automatico allorchè, selezionando un oggetto, lo "incolleremo" sul foglio di lavoro).
|
|
Vediamo ora un esempio di come inserire e dialogare con un oggetto: la casella combinata. Nella "Finestra degli oggetti", clicchiamo sull'icona "Casella Combinata", spostiamoci col mouse sul foglio di lavoro e in corrispondenza della zona che avremo scelto per ospitare l'oggetto, clicchiamo col sinistro del mouse e trasciniamo: apparirà l'oggetto che potremo dimensionare a piacere agendo sui punti di selezione (i circoletti). In questa fase saremo già in "Modalità progettazione". Foto sotto: la casella combinata
![]() |
Ora dovremo passare alla visualizzazione delle proprietà dell'oggetto per inserire le istruzioni che faranno al caso nostro: il reperimento di una colonna di dati e la casella di destinazione dove vorremo che il dato prescelto nella casella stessa, appaia. Doppio click sull'oggetto casella combinata, e si aprirà l'editor di visual basic. Vedi foto sotto a sinistra. Nella zona inferiore sinistra di questa foto vediamo la finestra delle proprietà relative al "ComboBox1", nome inglese della "casella combinata". Il N° 1 viene aggiunto dal codice per identificare che questa è la casella combinata prima inserita, e, poichè ne potremo inserire altre, ad ognuna verrà assegnato un numero di identificazione progressivo.Nella foto sotto a destra vediamo invece le proprietà che invece ci interessano da vicino: "LinkedCell" e "ListFillRange". La prima identifica la cella che vorremo indicare per riportare i dati che selezioneremo sul foglio di lavoro nella casella combinata, la seconda indica la zona dove la casella combinata andrà a trovare i dati che la stessa ci mostrerà sul foglio di lavoro. Nell'esempio che trattiamo, la lista dei nomi da cercare si troverà nella colonna A, dalla riga 1 alla 8. Per il momento trascuriamo di illustrare le altre proprietà che saranno consultabili attraverso la guida in linea.
|
|
Ritorniamo sul foglio di lavoro, clicchiamo sull'icona della "squadra" che identifica la "Modalità progettazione" per uscire da questa modalità, e ciò che vedremo sarà quello illustrato nella foto sotto:
![]() |
Nella casella combinata ora appare un elenco di nomi (quello che avevamo collegato con "ListFillRange") , con un click su un nome, vedremo la cella C1 (quella collegata con "LinkedCell") riempirsi del nome selezionato. Soprassiedo per il momento a ciò che avremmo potuto fare sfruttando i metodi e gli eventi .
Un ultimo accorgimento: poichè la finestra degli strumenti resterebbe "a spasso" per il foglio di lavoro, si può chiuderla usando la famosa "X", ma meglio se si inserisce, così l'avremo sempre a portata di mano, in alto, sotto i menù, cercando uno spazio tra le finestra già inserite. E' sufficiente trascinare la finestra dgli strumenti con il mouse, e rilasciare quando gli avremo trovato la giusta collocazione. Vedi foto sotto:
![]() |
La sintassi del VBA
(tratto dal sito http://www.softwareplanet.net/php/mostraCorso.php?nomeCorso=VisualBasic)
Le variabili
Anche Visual Basic, come tutti i linguaggi di programmazione, prevede l'uso
delle variabili.
Una variabile è un luogo di memorizzazione temporanea per i dati del programma a
cui esso può accedere grazie a un nome assegnato in fase di creazione.
Si possono utilizzare più variabili all’interno del codice ed esse possono
contenere diversi tipi di dati quali numeri, lettere, date o addirittura
oggetti.
Solitamente prima di utilizzare una variabile occorrerebbe crearla; questa
prassi è obbligatoria in quasi tutti i linguaggi, mentre Visual Basic, essendo
poco “pignolo” ci permette anche di non farlo.
Il consiglio è comunque quello di impostare una maggiore rigidità per avere più
controllo in fase di compilazione e quindi evitare errori di distrazione:
abilitando la voce “Dichiarazione di variabili obbligatoria” nel menù Strumenti,
Opzioni.
Dichiarazione di una variabile
Per dichiarare una variabile occorre utilizzare l’istruzione Dim, che
presenta la seguente sintassi:
Dim <nome> [As <tipo>]
in cui <nome> rappresenta il nome da assegnare alla variabile e <tipo>
rappresenta il tipo di dato che la variabile conterrà.
Non è obbligatorio specificare un tipo di dato, ma è consigliabile farlo per
ottimizzare l’impiego delle risorse.
Esempio:
Dim Importo as Integer
Regole di assegnazione del nome di una variabile
Il nome di una variabile deve essere costituito da una sequenza di caratteri
alfabetici o numerici nel rispetto delle seguenti regole:
- deve iniziare sempre con una lettera
- non può contenere spazi
- può contenere al massimo 256 carattere
- non deve essere una parola chiave, il nome di una proprietà o di un oggetto di
Visual Basic
- può contenere il carattere _ (underscore)
- non vi è differenza tra maiuscole e minuscole (la variabile Somma è anche
SOMMA)
Esempi di nomi corretti: Somma_Num, Stringa1, TOTALE
Esempi di nomi errati: 1Totale, Data Pagamento, Print, You&Me, _Totale
Tipi di dato in Visual Basic
Abbiamo detto che è consigliabile, anche se non obbligatorio dare
un'indicazione del tipo di dato da creare. Visual Basic prevede numerosi tipi
standard.
I più utilizzati sono:
- byte tipo numerico intero senza segno compreso nell’intervallo
da 0 a 255
- integer usato per rappresentare numeri interi (con segno) compresi fra
-32768 a 32767
- string che può contenere delle sequenze di caratteri (stringhe) a
lunghezza variabile oppure a lunghezza fissa
- long per numeri interi compresi fra -2,147,483,648 e 2,147,483,647,
- single e double, con cui è possibile memorizzare numeri reali a
singola o a doppia precisione
- boolean, tipo logico che può assumere il valore TRUE o FALSE (vero o
falso)
- date, in cui è possibile memorizzare data e ora
- variant, tipo universale che può contenere dei dati di qualsiasi
formato
Se una variabile non è dichiarata, la sua creazione avviene la prima volta in
cui si fa riferimento ad essa.
In assenza di dichiarazione (dichiarazione implicita) oppure in caso di
dichiarazione senza la specifica del tipo, Visual Basic considera il tipo di
dato della variabile come Variant (con conseguente spreco di risorse), a meno
che si utilizzi un carattere identificatore di tipo alla fine del nome della
variabile.
I principali identificatori di tipo sono i seguenti:
$ per String
% per tipo di dato Integer
& per tipo di dato Long
! per tipo di dato Sigle,
# per tipo di dato Double
Ad esempio, è possibile creare una variabile di tipo numerico intero ed
assegnarle un valore scrivendo le due seguenti istruzioni
Dim Importo as Integer
Importo = 1000
oppure con la sola dichiarazione implicita
Importo% = 1000
Assegnazione di un valore ad una variabile
Per assegnare un determinato valore ad una variabile, occorre utilizzare
l’operatore =, lo stesso che abbiamo utilizzato per cambiare i valori
delle proprietà delle form e dei controlli.
Dim MyVar as string
MyVar=“Ciao”
I moduli
I moduli standard (o moduli di codice) sono componenti del progetto
che contengono del codice puro (vengono memorizzati su disco con
estensione .BAS), ovvero non contengono parti grafiche e possono
contenere dichiarazioni di variabili, procedure e funzioni. Solitamente
vengono utilizzati per contenere le funzioni e le variabili comuni a
tutte le finestre, un sorta di “libreria” per intenderci.
Il modulo ha una proprietà Name, inputabile dalla solita finestra delle
proprietà. Con tale nome il modulo verrà visualizzato, insieme alle Form,
nella finestra del progetto.
Variabili pubbliche all’interno di un modulo
Se abbiamo bisogno di una variabile che mantenga il valore (ossia non
“muoia” al termine di un evento) e sia visibile all’interno di tutto il progetto
occorrerà dichiararla nella parte più alta della finestra del codice del modulo
ovvero prima di tutte le procedure di evento.
Dim Importo as long
Private Sub UserForm_Click()
Private Sub …
….
End Sub
Private Sub UserForm_Initialize()
Private Sub …
….
End Sub
Se vogliamo che questa variabile sia utilizzata anche da altre Form, occorre
dichiararla, nella stessa posizione, utilizzando la parola chiave Public.
In questo modo, le altre finestre, per fare riferimento ad essa devono far
precedere il nome della finestra a quello della variabile (separato da un
punto), perché la variabile appartiene alla finestra ed esiste solo se la
finestra è caricata in memoria.
Ad esempio, per utilizzare la variabile pubblica Importo della finestra
FrmInvoice dalla finestra FrmCustomer, occorre utilizzare la seguente sintassi:
TxSomma = FrmInvoice.Importo
Variabili globali
Quando si presenta la necessità di fare in modo che un valore sia
accessibile da tutte le procedure presenti nell'applicazione, indipendentemente
dal form in cui esse si trovano, e che questa variabile non appartenga a nessuna
Form in particolare, è necessario utilizzare per la dichiarazione la parola
chiave Global.
Una variabile dichiarata in questo modo è detta globale. La sua dichiarazione
non può essere fatta all'interno di un form (proprio perché deve essere
indipendente da ognuno di essi), ma deve essere effettuata in un modulo.
E’ molto semplice, basta utilizzare la parola chiave Global (va bene anche
Public) anziché Dim e mettere l’istruzione all’interno di un modulo.
Esempio di dichiarazione di una variabile globale all’interno di un modulo:
Global Autore as String
La InputBox
Per far immettere all’utente dei valori, si possono utilizzare le caselle di
testo all’interno di una finestra, oppure si può utilizzare una funzione (ossia
un’istruzione che restituisce un risultato) che ci mette a disposizione Visual
Basic: la InputBox.
E’ molto simile alla MsgBox (ricordate ??), apre una piccola finestrina con un
messaggio, con la differenza che dà la possibilità di inserire del testo.
Possiamo specificare la frase da visualizzare ed il titolo elencandoli tra
parentesi e virgolette.
Essa ci restituisce poi un risultato che possiamo memorizzare in una variabile.
Questo esempio memorizza nella variabile Frase ciò che l’utente ha digitato
nella finestrina avente il titolo “Prova” a destra della dicitura “Inserisci una
frase”:
Frase = InputBox( “Inserisci una frase”,
“Prova”)
Se l’utente digita “Ciao” la variabile Frase conterrà “Ciao”.
Applicazione di esempio
Il listato di codice che segue rappresenta un piccolo progetto che
all’attivazione del foglio contenete questa procedura evento richiede un nome di
autore e lo visualizza
Private Sub Worksheet_Activate()
Dim Autore As String
Autore = InputBox("Inserire il nome dell'autore del
progetto", "Attenzione")
MsgBox Autore
End Sub
Prima di passare ad esaminare le strutture di controllo, è opportuno
conoscere gli operatori che si possono utilizzare per formulare espressioni o
condizioni.
Gli Operatori
Gli operatori matematici
Primi tra tutti sono gli operatori matematici. Le quattro operazioni
fondamentali esistono, naturalmente, con la sola differenza che il simbolo di
moltiplicazione è * e quello di divisione è / (in generale come in tutti i
linguaggi di programmazione).
Esistono inoltre altri tre operatori che permettono di determinare la parte
intera o il resto di una divisione e per elevare un numero a potenza.
Tutte le altre funzioni matematiche (radice quadrata, funzioni trigonometriche,
ecc..) esistono in VB ma non sono operatori, bensì funzioni appartenenti ad una
libreria.
+ Somma Somma i valori
- Sottrazione Sottrae i valori
* Moltiplicazione Moltiplica i valori
/ Divisione Divide i valori
Divisione intera Determina la parte intera di una divisione
^ Esponente Eleva un valore ad una potenza
MOD Modulo Determina il resto di una divisione
Esempi: 5 + 8 = 13, 12 - 4 = 8, 3 * 6 = 18, 10 / 3 = 3,33.., 10 3 = 3,
2 ^ 3 = 8, 10 MOD 3 = 1
Esempi in VB: Importo = Numero1 + Numero2, Importo = Num1 * Num2,
Quadrato = Num ^ 2, Resto = Num1 MOD Num2
Operatori di relazione (o confronto)
Gli operatori di relazione sono indispensabili per confrontare dei valori
numerici (e non) e quindi per esprimere delle condizioni, e sono:
= Uguale
> Maggiore
>= Maggiore uguale
< Minore
<= Minore uguale
<> Diverso
Esempi: Numero1 <> Numero2, Importo1 < = Importo2
Gli operatori logici
Gli operatori logici permettono di concatenare tra loro più condizioni e quindi
di creare condizioni composte (ricordate?! le condizioni le abbiamo già viste
nella struttura di controllo o IF.. che approfondiremo nuovamente la prossima
lezione)
AND
la condizione è vera se entrambe le condizioni si verificano; è falsa se una od
entrambe le condizioni non si verificano
Esempio: Espressione1 AND Espressione2, dà risultato TRUE solo nel caso in cui
entrambe le espressioni diano come risultato TRUE (cioè siano vere)
TRUE and TRUE = TRUE
TRUE and FALSE = FALSE
FALSE and FALSE = FALSE
FALSE and TRUE = FALSE
NOT
è utilizzato per eseguire una negazione logica di un’espressione, cioè per
esprimere una condizione al contrario.
not TRUE = FALSE
not FALSE = TRUE
OR
La condizione è vera al verificarsi di una od entrambe le condizioni, ad
esempio:
Espressione1 OR Espressione2, dà risultato TRUE nel caso in cui almeno una delle
espressioni sia vera.
TRUE or TRUE = TRUE
TRUE or FALSE = TRUE
FALSE or FALSE = FALSE
FALSE or TRUE = TRUE
In realtà esistono altri tre operatori logici meno utilizzati: Xor, Eqv, Imp,
derivabili dai precedenti.
Ordine delle operazioni
In un’espressione del tipo:
Totale= Totale + Prezzo * Quantita,
quali sono le operazioni eseguite prima? In generale questo è un problema che
incontriamo anche in matematica ed è per questo motivo che a volte occorre fare
uso delle parentesi.
L’ordine in cui le considera Visual Basic è il seguente:
- esponente
- moltiplicazione, divisione, divisione intera, modulo
- addizione e sottrazione
- operatori di confronto (valutati da sinistra a destra)
- operatori logici (nell’ordine NOT, AND, OR)
Per modificare l’ordine delle operazioni occorre utilizzare le parentesi tonde
(le quadre e le graffe, utilizzate nelle espressioni matematiche, non possono
essere utilizzate).
STRUTTURE DI CONTROLLO
Avevamo già anticipato nella lezione 9
cosa sono le strutture di controllo ed in particolare avevamo visto la struttura
di controllo IF.
La struttura decisionale o di controllo (o costrutto) è un elemento del
linguaggio che permette di controllare il flusso delle istruzioni. Le
istruzioni, in Visual Basic vengono eseguite se si verifica un certo evento,
e, all’interno della procedura di evento, le istruzioni vengono eseguite una
dopo l’altra a meno che si faccia uso di questi strumenti.
Le strutture quindi modificano la sequenza delle istruzioni eseguite in base al
verificarsi di un certa condizione oppure permettono di ripetere un certo numero
di istruzioni.
La struttura decisionale IF
Il costrutto IF permette di eseguire una o più istruzioni in seguito al
verificarsi di una condizione.
If <condizione1>
Then
<istruzioni da eseguire se la condizione è vera>
[ElseIf <Condizione2> Then
<istruzioni da eseguire se la condizione è vera>
...
[Else
<istruzioni da eseguire se la condizione è falsa>]
End If
La condizione può essere rappresentata da una espressione logica, cioè
un’espressione che dà come risultato vero o falso. Se essa è
verificata viene eseguito il blocco di istruzioni indicato fra le parole chiave
Then e Else. In caso contrario, è eseguito il secondo gruppo di
istruzioni. Si noti che quest'ultimo può anche essere assente. In tal caso, la
parola chiave Else non va utilizzata e non è eseguito alcun codice in
caso di mancata verifica della condizione.
La frase End If delimita la struttura.
Esempio
Per visualizzare un messaggio diverso a seconda che un saldo sia positivo o
negativo:
Private Sub CmdVediSaldo_Click()
IF Saldo > 0 then
MsgBox “Saldo positivo”
else
MsgBox “Saldo negativo”
End If
End Sub
La struttura iterativa FOR .... NEXT:
Il costrutto FOR .. NEXT consente di ripetere un gruppo di istruzioni per il
numero di volte specificato.
For contatore = inizio
To fine [Step incremento]
[istruzioni]
[Exit For]
[istruzioni]
Next [contatore]
Quando ci può servire un ciclo di
questo tipo? Quando dobbiamo ripetere un certo numero di volte una stessa
istruzione. Per definizione, nel costrutto FOR, dobbiamo utilizzare una
variabile numerica intera (denominata contatore) che si incrementa ad ogni
esecuzione del ciclo. Il contatore parte dal valore indicato dopo il simbolo =
fino ad arrivare ad un valore massimo indicato dopo la parola chiave TO.
L’incremento solitamente è 1, se serve un passo diverso (ad esempio 2) occorre
aggiungere STEP 2 dopo il numero massimo.
La fine del ciclo è identificata dalla parola chiave NEXT, immediatamente dopo
si può indicare anche il nome della variabile contatore. Non è necessario, anche
se solitamente è bene metterlo se si usano cicli FOR annidati (Suggerimento:
nelle sintassi dei linguaggi solitamente la parentesi quadra indica parti
opzionali!!).
Esempio: il seguente ciclo visualizza i primi dieci numeri. E’ stata dichiarata
una variabile che fa da contatore partendo dal numero 1 fino al numero 10
Dim Conta as integer
For Conta=0 to 10
Msgbox Str(Conta)
Next Conta
Esempio: calcolo del fattoriale di un numero N inserito dall’utente.
Per definizione il fattoriale (si indica con il simbolo !) di un numero N è
uguale a 1* 2 * 3 * …. * N, in formule:
N! = 1* 2 * 3 * …. * N
I passi seguiti sono:
- richiesta del numero all’utente attraverso la funzione InputBox (vista nella
lezione 11), memorizzato poi nella variabile N.
- dichiarazione di una variabile contatore I (perché il fattoriale per
definizione fa N moltiplicazioni, dunque il nostro ciclo dovrà dunque essere
ripetuto N volte).
- dichiarazione di una variabile Fattoriale, atta a contenere il risultato
finale e parziale di ogni moltiplicazione; notare che occorre inizializzarla a 1
in quanto è l’elemento neutro della moltiplicazione.
Private Sub CmdFatt_Click()
Dim N As Integer
Dim I As Integer
Dim Fattoriale As Long
Fattoriale = 1
N = InputBox("Inserisci il numero:", "Calcolo del fattoriale")
For I = 1 To N
Fattoriale = Fattoriale * I
Next I
MsgBox "Il fattoriale di " & Str(N) & " é " & Str(Fattoriale)
End Sub
La prossima volta vedremo un altro costrutto che permette di eseguire dei cicli.
Per il momento ci accontentiamo di assimilare il FOR e terminiamo la lezione
introducendo un’altra struttura di controllo meno utilizzata.
L’istruzione Go To
Passa incondizionatamente a una riga specifica all'interno di una procedura (ma
non al di fuori di essa) ed identificata da un’etichetta.
Per definire un ‘etichetta è sufficiente darle un nome (seguito dai : ) e
posizionarla nel punto desiderato.
GoTo etichetta
Esempio:
Private Sub CmdSaluta_Click()
Msgbox “Adesso vi saluto”
GoTo SALUTA
…
…
SALUTA:
Msgbox “Ciao a tutti”
End Sub
Suggerimento: la presenza di troppe istruzioni GoTo può rendere difficile
la lettura del codice. Quando possibile, è consigliabile utilizzare istruzioni
di controllo strutturate (Do...Loop, For...Next, If...Then...Else, Select Case)
Terminiamo oggi la parte relativa alle strutture di controllo
introducendo gli ultimi due costrutti.
La struttura iterativa Do While.. Loop e Do Until .. Loop
La struttura Do...Loop consente di eseguire un blocco di istruzioni per un
numero di volte imprecisato (contrariamente al FOR). L'istruzione Do...Loop
valuta una condizione che consente di determinare se continuare o meno
l'esecuzione. Come per la struttura If...Then, la condizione deve essere
rappresentata da un valore o da un'espressione che risulti Vera o Falsa. La
parola chiave DO identifica l’inizio del ciclo, mentre LOOP indica la fine.
Esistono 4 varianti del ciclo Do…Loop; le prime due sono determinate dalla
differenza tra While ed Until.
In presenza di un While un ciclo viene eseguito fino a che la condizione
risulta Vera; non appena la condizione diventa falsa, il ciclo viene interrotto.
Viceversa l’Until viene eseguito finchè la condizione non
è verificata ed è interrotto non appena diventa Vera.
E‘ possibile diversificare ulteriormente il ciclo Do..Loop mettendo la
condizione all’inizio (dopo il DO) oppure alla fine, dopo la parola chiave LOOP,
la differenza sostanziale è che, mettendo la condizione alla fine, il ciclo
viene eseguito sicuramente almeno una volta anche se la condizione di partenza
non è Vera.
Abbiamo dunque ottenute le seguenti combinazioni:
Do While condizione <istruzioni> Loop Do Until condizione <istruzioni> Loop |
Do <istruzioni> Loop While condizione Do |
Esempio:
stampiamo CIAO finchè l’utente non risponde NO alla domanda “Vuoi stampare?”
nei quattro possibili casi:
Private Sub CmdStampa_Click()
Do While (MsgBox("Vuoi stampare?", vbYesNo) = vbYes)
Print "CIAO"
Loop
End Sub
Lo stesso risultato si ottiene utilizzando il DO UNTIL e quindi negando la
condizione precedente
Do Until (MsgBox("Vuoi stampare?",
vbYesNo) = vbNo)
Print "CIAO"
Loop
Un risultato leggermente diverso lo possiamo avere mettendo la condizione alla
fine: nei due casi precedenti CIAO non viene stampanto se l’utente risponde NO
alla prima domanda, mettendo la condizione alla fine, CIAO viene stampato
sicuramente almeno una volta:
Do
Print "CIAO"
Loop While (MsgBox("Vuoi stampare?", vbYesNo) = vbYes)
Do
Print “CIAO”
Loop Until (MsgBox("Vuoi stampare?", vbYesNo) = vbNo)
Utilizzando il ciclo Do..Loop è possibile riprodurre il costrutto FOR,
in questo caso ovviamente, bisogna farsi carico di inizializzare ed incrementare
il contatore.
Esempio:
riprendiamo il ciclo che visualizza i numeri da 0 a 10
Dim Conta as integer
Conta=0
Do While Conta <= 10
Msgbox Str(Conta)
Conta=Conta+1
Loop
ATTENZIONE!
In cicli di questo tipo è bene non dimenticarsi l’incremento del contatore, in
tal caso, infatti, la condizione non diventa mai Vera e si genera un LOOP
INFINITO.
L’istruzione Select Case
Select Case è analogo a If...Then...Else, ma è più indicato e migliora la
leggibilità del codice nel caso di più scelte.
Si basa su un'unica espressione di prova che viene valutata una volta all'inizio
della struttura stessa. Il risultato di tale espressione viene confrontato con
il valore di ciascuna istruzione Case della struttura e in caso di
corrispondenza viene eseguito il blocco di istruzioni associato all'istruzione
Case:
Select Case <espressione>
[Case <espressione1>
[bloccoistruzioni-1]]
[Case <espressione2>
[bloccoistruzioni-2]]
.
..
[Case Else
[bloccoistruzioni-n]]
End Select
Esempio:
La MsgBox (vedere approfondimento dopo) può restituire 3 risultati differenti
(esempio SI, NO, ANNULLA), in tal caso avremmo bisogno di 2 costrutti IF per
valutare le istruzioni da eseguire.
In tal caso è consigliabile utilizzare il Select..Case
Private Sub CmdProva_Click()
Dim Ris As Integer
Ris = MsgBox("Che tasto hai scelto", vbYesNoCancel)
Select Case Ris
Case vbYes
Msgbox “SI”
Case vbNo
MsgBox "NO"
Case vbCancel
MsgBox "ANNULLA"
Case Else
End Select
End Sub
Finalmente siamo oggi riusciamo ad approfondire il concetto di
procedura e funzione che abbiamo dovuto anticipare piu’ volte.
Procedure e funzioni (sottoprogrammi) servono per raccogliere un gruppo di
istruzioni per dare maggiore leggibilità al programma o per evitare di ripetere
in più punti le stesse istruzioni.
La differenza sostanziale tra le due è che le funzioni restituiscono un valore,
mentre le procedure no.
Procedure
Una procedura in Visual Basic prende il nome di Sub.
La sintassi di dichiarazione di una procedura è la seguente
Sub
NomeProcedura([param1
as …, param2
as…])
istruzioni
End Sub
Ad esempio, se vogliamo creare una procedura che visualizza una frase di saluto:
Sub Saluta()
Msgbox “Ciao”
End Sub
Per utilizzarla è sufficiente scrivere il nome della procedura:
Private Sub Command1_Click()
Saluta
End Sub
In questo caso non appare evidente l’utilità di utilizzare un procedura, ma se
avessimo usato Saluta molte volte all’interno del nostro codice e ad un certo
punto si presentasse la necessità di cambiare la frase “Ciao” per tradurla in
inglese “Hello”, sarebbe sufficiente cambiarla una sola volta (all’interno della
procedura).
I parametri
Nella sintassi di dichiarazione della procedura compaiono degli elementi
racchiusi tra parentesi quadre: sono i parametri o argomenti, che già
avevamo dovuto anticipare nelle prime lezioni.
Non è obbligatorio utilizzarli (ed è per questo motivo che sono indicati tra
parentesi quadre), ma sono molto utili in quanto a volte si vuole rendere
“parametrica” la procedura (o la funzione).
Occorre dare un nome ad ogni parametro e specificare il tipo di dato che
conterrà (proprio come le variabili), se ne indichiamo più di uno occorre
elencarli di seguito separati da virgola. L’ordine posizionale è anche quello
che ci servirà per riferirci ad essi quando utilizziamo la procedura.
Ad esempio potremmo rendere parametrica Saluta mettendo come
argomento il nome della persona che vogliamo salutare:
Sub Saluta(Nome as string)
Msgbox “Ciao ” + Nome
End Sub
In questo caso, per richiamarla occorrerà specificare anche il valore del
parametro dopo il nome della procedura separato da spazio:
Private Sub Command1_Click()
Saluta “Carlo”
End Sub
Ampliando l’esempio a due parametri:
Sub Saluta(Nome as string, Cognome as
string)
Msgbox “Ciao ” + Nome + “ “ + Cognome
End Sub
I parametri possono essere passati direttamente con il loro valore oppure
utilizzando una variabile, come nell’esempio :
Private Sub Command1_Click()
Dim Surname as string
Surname =”Rossi”
Saluta “Carlo”, Rossi
End Sub
Funzioni
La funzione è analoga alla procedura, con la sola differenza che restituisce un
valore.
La sua dichiarazione è analoga a quella della Sub, ma occorre specificare la
parola chiave Function ed indicare, dopo la parentesi tonda (alla fine
dell’elenco dei parametri), l’indicazione del tipo di dato che restituirà.
Function NomeFunction(param1 as …, ...) as ...
Istruzioni
NomeFUnction=
End Function
P.S.Poiché essa restituisce un valore sarà opportuno che tra le istruzioni che
contiene ve ne sia almeno una che assegna alla funzione stessa il valore
risultante!!
Supponiamo, ad esempio di voler creare una funzione che calcola l’importo
dell’IVA al 4% su un imponibile . L’imponibile sarà il nostro parametro ed il
risultato sarà restituito dalla funzione stessa.
Function IVA(Importo As Long) As Long
IVA = Importo * 0.04
End Function
Per richiamare la funzione si usano le stesse regole della
procedura, ma attenzione; i parametri vanno elencati tra parentesi !!.
Dim ValoreIva As Long
ValoreIva = IVA(100000)
MsgBox "L'IVA al 4% su L.100.000 è:" + Str(ValoreIva)
End Sub
Per migliorare l’esempio possiamo rendere parametrico anche l’aliquota IVA, con
il seguente risultato:
Function IVA(Importo As Long, Aliquota As Single) As Long
IVA = Importo * Aliquota / 1000
End Function
Un’approfondimento:
abbiamo detto che per richiamare una procedura occorre elencare i parametri
senza utilizzare le parentesi.
Esiste un altro modo: utilizzare l’istruzione Call:
Call Saluta(“Carlo”)
In tal caso le parentesi vanno utilizzate!!
Variabili locali
Le variabili possono essere create all’interno di una procedura di evento. In
tal caso si chiamano variabili locali in quanto nascono all’atto della
dichiarazione e vengono distrutte dopo l'esecuzione dell'ultima istruzione.
Private Sub Command1_Click()
Dim Messaggio As String
. . .
End Sub
Per fare in modo che il loro valore sia conservato durante tutta l’esecuzione
del programma e che siano visibili anche dentro ad altre procedure occorre
creare variabili diverse che studieremo nella seconda parte di “Le variabili”.
Avevamo detto nella scorsa lezione che se dichiariamo le variabili localmente
all’interno di una procedura di evento, esse nascono quando va in esecuzione
l’evento e muoiono al termine di esso.
Le variabili possono anche appartenere a tutte le procedure evento di una stessa
finestra oppure essere comuni e visibili a tutte le finestre del nostro
progetto, in tal caso occorre dichiararle in modo diverso.
Il passaggio di parametri
Nella scorsa lezione abbiamo visto cosa sono le procedure, le funzioni ed i
parametri, in particolare avevamo detto che i parametri hanno un’ordine
posizionale, vanno elencati separati da virgola, devono rispettare il tipo di
dato specificato nella dichiarazione e possono essere “passati” come valori
fissi o tramite variabili.
Cerchiamo di approfondire meglio quest’ultimo concetto.
E’ possibile passare dei parametri alle procedure ed alle funzioni in due modi:
- passaggio per riferimento (ByRef ), si utilizza quando all’interno
della procedura (o funzione) il valore del parametro viene modificato e, alla
procedura chiamante, serve il valore di ritorno modificato;
- passaggio per valore (ByVal), il valore del parametro, ritorna alla
procedura chiamante con il suo valore originale, anche se viene modificato
all’interno della procedura (o funzione).
Il passaggio per valore è più sicuro,
ma lavora su una copia del valore del parametro, e dunque occupa più memoria.
E’ per questo motivo che il passaggio di default (ovvero quello scelto da VB se
non specificato diversamente) è quello per riferimento… anche se si dice che
nella prossima versione di VB non sarà esattamente così… J
Esempio
Supponiamo di migliorare la funzione scritta la volta precedente: la nuova
funzione dovrà verificare che l’aliquota IVA sia corretta ed in caso contrario
dovrà restituire alla procedura chiamante l’aliquota con valore 0.
Function IVA(Importo As Long, ByRef
Aliquota As Single) As Long
If (Aliquota <> 4) And (Aliquota <> 20) Then
Aliquota = 0
Exit Function
End If
IVA = Importo * Aliquota / 1000
End Function
La funzione IVA verrà richiamata
nell’evento click del pulsante Command1:
Private Sub Command1_Click()
Dim Aliquota As Single
AliquotaIva = 5
Call IVA(100000, Aliquota)
If AliquotaIva = 0 Then
MsgBox "L'aliquota iva è sbagliata"
Else
MsgBox "L'aliquota iva rientra in quelle specificate"
End If
End Sub
In questo caso la variabile AliquotaIva assumerà il valore 0 in seguito alla
chiamata della funzione IVA permettendoci di capire che l’aliquota è sbagliata.
Sostituendo la parola chiave ByVal nella funzione IVA:
Function IVA(Importo As Long, ByRef Aliquota As Single) As Long
…..
Otterremo un risultato differente, la variabile AliquotaIva varrà 5 anche al
ritorno dalla chiamata alla funzione Iva.
In generale, i parametri per i quali ci serve un valore di ritorno sono detti
parametri di output, mentre gli altri sono detti parametri di input o di
input/output.
I parametri opzionali
Nel caso in cui volessimo utilizzare alcuni parametri senza obbligare chi
utilizza le nostre procedure ad utilizzarli, potremmo dichiararli come
opzionali.
Per dichiarare un parametro opzionale è sufficiente indicare prima la parola
chiave Optional con il seguente accorgimento: se viene utilizzata, anche
tutti gli argomenti successivi devono essere facoltativi e dichiarati con la
parola chiave Optional.
E’ possibile associare un valore di default al parametro mancante oppure
controllarne l’esistenza con la funzione di VB IsMissing (la quale però funziona
solo con tipi di dati variant).
Torniamo sempre al nostro solito esempio, potremmo permettere al nostro
utilizzatore di specificare l’aliquota IVA solo nel caso in cui sia diversa da
4.
Function IVA(Importo As Long, Optional
Aliquota As Single = 4) As Long
IVA = Importo * Aliquota / 1000
End Function
Dunque per calcolare l’iva al 4% sarà sufficiente specificare l’importo:
MsgBox IVA(100000)
La stessa funzione la si può riprodurre
utilizzando la funzione IsMissing, ovvero verificando se il valore del parametro
è stato specificato e, in caso contrario, assegnarvi un valore di default.
Function IVA(Importo As Long, Optional
Aliquota) As Long
If IsMissing(Aliquota) Then
Aliquota = 4
End If
IVA = Importo * Aliquota / 1000
End Function
Validità delle funzioni
L’ambito di validità delle procedure e funzioni e simile a quello visto per le
variabili: possono essere pubbliche o private (Private o Public) e possono
appartenere ad una FORM oppure ad un modulo .BAS.
Nel primo caso, anche se pubbliche, per poterle richiamare occorre specificare
prima il nome della FORM di appartenenza.
Le costanti
Anche il concetto di costante è molto importante per un programmatore, in quanto
è presente in tutti i linguaggi di programmazione.
La costante non è altro che una sorta di “variabile costante” ovvero un’area
di memoria alla quale si assegna un nome ed un valore che non potrà cambiare
durante l’esecuzione del programma.
Il caso classico è quello del valore del pi-greco per calcolare circonferenza ed
area di un cerchio. Può essere comodo, all’inizio del programma, dichiarare una
costante denominata PIGRECO (solitamente il nome delle costanti è maiuscolo per
convenzione) avente il valore 3,1415..…
Non sarà indispensabile ricordarsi ogni volta il valore completo ma sarà
sufficiente utilizzare la costante PIGRECO.
La dichiarazione è simile a quella delle variabili utilizzando la parola chiave
CONST, naturalmente con PRIVATE per le costanti riservate ad un modulo e PUBLIC
per quelle pubbliche con la particolarità che le costanti dichiarate all’interno
di un form non possono essere pubbliche
Private Const PIGRECO = 3.141592
Abbiamo imparato a creare ed utilizzare le procedure e le funzioni. In questa
e nelle prossime lezione impareremo a cosa servono le principali funzioni messe
a disposizione da Visual Basic.
Le principali funzioni di Visual Basic
Le funzioni di conversione di tipo
Questa categoria di funzioni serve per convertire variabili od
espressioni da un tipo di dato ad un altro. Se non specificato diversamente esse
richiedono un parametro di input e restituiscono un valore del tipo di dato
specificato.
CBool:
permette di modificare qualsiasi espressione valida (numerica o stringa) in TRUE
o FALSE. Esempio:
Dim Numero1 as integer
Dim Numero2 as integer
Dim Confronto as boolean
Numero1 = 3
Numero2 = 2
Confronto = CBool(Numero1 = Numero2) ' Confronta ora contiene
FALSE
Numero2 = 3
Confronto = CBool(Numero1 = Numero2) ' Confronta ora contiene
TRUE
CDate:
questa funzione, data una qualsiasi espressione valida che rappresenta una data,
restituisce un valore di tipo DATE. Esempio:
Dim DataInCaratteri as String
Dim DataData as Date
DataInCaratteri = "13 marzo 1987" ' Variabile stringa contenete un
espressione che rappresenta una data
DataData = CDate(DataInCaratteri) ' Converte nel tipo di
dati Date.
CInt:
serve per convertire un espressione valida in un numero intero (ovvero da -
32.768 a 32.767). Se l’espressione passata come parametro rappresenta un numero
con virgola, il risultato sarà un intero approssimato per eccesso o per difetto.
Esempio:
Dim NumeroConVirg as double
Dim NumeroIntero as integer
Dim NumeroStringa as string
NumeroConVirg = 337.78
NumeroIntero = CInt(NumeroConVirg) ' ora NumeroIntero contiene
338
NumeroStringa = "52"
NumeroIntero = CInt(NumeroStringa) ' ora NumeroIntero contiene 52
Esistono funzioni analoghe anche per convertire un’espressione neglli altri tipi
di dati numerici, Byte, Long, Single, Double ovvero CByte, CLng, CSng, CDbl.
CStr:
converte in stringa l’espressione che viene passata come parametro. Esempio:
Dim VerooFalso As Boolean
Dim Stringa As String
Dim NumConVirgola As Double
VerooFalso = True
Stringa = CStr(VerooFalso) ‘Restituisce VERO o TRUE se il sistema
operativo è in inglese
NumConVirgola = 3.4
Stringa = CStr(NumConVirgola) ‘Restituisce 3,4 o 3.4 se il sistema
operativo ha le impostazioni inglesi o americane
Str:
è una funzione analoga alla CStr, con la differenza che converte solo
espressioni numeriche in stringa e non accetta altre espressioni (es. boolean o
date).
MyString = Str(459) '
Restituisce " 459"
MyString = Str(-459.65) ' Restituisce "-459,65".
MyString = Str(459.001) ' Restituisce " 459,001".
Val:
è una funzione di conversione in numero più generalizzata delle precedenti:
ovvero accetta un stringa e la restituisce sotto forma di valore numerico di
tipo appropriato cercando di interpretare anche frasi più complesse. Esempio:
Numero = Val("13")
Numero = Val("13 cose") ‘ in entrambi i casi Numero conterrà 13
Numero = Val("cose") ‘ in questo caso conterrà 0 in quanto non
interpretabile
Asc:
converte un carattere nel corrispondente codice della tabella ASCII (valore
intero tra 0 e 255).
Codice = Asc("A")
' Restituisce 65
Codice = Asc("a") ' Restituisce 97.
Chr:
E’ la funzione inversa ad Asc, ovvero dato un codice della tabella ASCII ne
restituisce il carattere corrispondente:
Carattere = Chr(65) '
Restituisce A
Carattere = Chr(97) ' Restituisce a.
I numeri da 0 a 31 corrispondono ai codici ASCII standard non stampabili. La
funzione Chr(13), ad esempio, restituisce il carattere di INVIO a capo.
Msgbox “Ciao “ + chr(13) + “ a tutti”
visualizzerà
Abbiamo imparato a creare ed utilizzare le procedure e le funzioni. In questa
e nelle prossime lezione impareremo a cosa servono le principali funzioni messe
a disposizione da Visual Basic.
Le principali funzioni di VBA
Format:
è una funzione molto utile, in quanto serve per “formattare” un’espressione in
un formato desiderato, ovvero, per stampare i numeri con i punti separatori
delle migliaia oppure per visualizzare una data con l’anno di 4 cifre o anche
per visualizzare una frase tutta in maiuscolo.
Sintassi:
Format(espressione[, formato])
Il tipo di formato dipendende naturalmente dal contenuto dell’espressione, ecco
alcuni esempi:
MsgBox Format(Date, "Long Date")
visualizza la data corrente nel formato esteso
MsgBox Format(Date, "dd/mm/yyyy") visualizza la data corrente in
formato giorno/mese/annoin4cifre
MsgBox Format(5459.4,
"##,##0.00") Restituisce 5.459,40
MsgBox Format(1334.9, "###0.00") Restituisce 1334,90.
MsgBox Format("CIAO", "<") Restituisce "ciao".
MsgBox Format("ciao", ">") Restituisce "CIAO".
Funzioni di manipolazione delle stringhe
Instr:
Restituisce un valore numerico che specifica la posizione della prima
occorrenza di una stringa all'interno di un'altra.
Sintassi:
InStr([inizio, ]stringa1, stringa2[, confronto])
Esempio:
InStr(1,"ciao a tutti voi", "tutti") restituisce il valore 8.
Il tipo di confronto, se non specificato è quello specificato nell’istruzione
Option Compare (*) altrimenti può essere di tipo binario (VbBinaryCompare) e
testo (VbTextCompare).
(*) L’istruzione Option Compare può essere utilizzata a livello di modulo
per dichiarare la modalità di confronto predefinita da utilizzare per
confrontare i dati di una stringa (se non specificato diversamente si usa il
confronto binario).
Sintassi: Option Compare {Binary | Text | Database}
Mid:
Restituisce un certo numero di caratteri estraendolo da una posizione
specificata di una stringa di partenza. I parametnri da specificare sono dunque
la stringa di partenza, il punto da cui inziare l’estrazione ed il numero di
caratteri da estrarre (se non è specificato si intende fino alla fine).
Sintassi:
Mid(string, start[, length])
Esempio:
Mid(“ciao a tutti voi", 8,
5) restituisce il “tutti”.
Ucase e LCase:
Restituiscono un la stringa passata come parametro, convertita in maiuscole
oppure in minuscole.
Sintassi:
UCase(stringa), LCase(stringa)
Esempio:
UCase(“ciao a tutti voi”)
restituisce il “CIAO A TUTTI VOI”.
LCase(“CIAO A TUTTI VOI”) restituisce il “ciao a tutti voi”.
Left e Right:
Restituiscono un numero specificato di caratteri di una stringa a partire da
sinistra o da destra.
Sintassi
Left(string, length), Right(string, length)
Esempio:
Left(“ciao a tutti
voi”,4) restituisce “ciao”
Right(“ciao a tutti voi”,3) restituisce “voi”
Trim, Ltrim e Rtrim
Restituiscono la stringa di partenza senza spazi iniziali (LTrim), spazi finali
(RTrim) o senza spazi iniziali e finali (Trim).
Sintassi
LTrim(stringa)
RTrim(stringa)
Trim(stringa)
Esempio:
Trim(“ ciao ”)
restituisce “ciao”
LTrim(“ ciao ”) restituisce “ciao ”
RTrim(“ ciao ”) restituisce “ ciao”
Cosa ne dite? Queste erano le funzioni principali per lavorare sulle stringhe,
ma ne esistono altre! La prossima lezione finalmente termineremo la carrellata
sulle funzioni fornite da VB imparando quelle relative alle date ed ai numeri.
In questa lezione finalmente termineremo lo studio delle
funzioni fornite da Visual Basic imparando quelle relative alle date ed ai
numeri.
Funzioni di manipolazione delle date:
Date:
E’ una funzione che restituisce la data di sistema corrente.
Esempio:
msgbox Format(Date,”dd-mm-yyyy”)
Supponendo che oggi sia il 2/6/2001 questo esempio restituirà 02-06-2001
Year:
Restituisce un valore numerico intero corrispondente all’anno della data
passata come parametro
Month:
Restituisce un valore numerico intero corrispondente al mese della data
passata come parametro
Day:
Restituisce un valore numerico intero corrispondente al giorno della data
passata come parametro
Esempio:
msgbox Day(Date)
msgbox Month(Date)
msgbox Year(Date)
Supponendo che oggi sia il 2/6/2001 restituisce 2, 6, poi 2001
IsDate:
Restituisce un valore Booleano (True o False) che indica se è possibile o
meno convertire l’espressione passata come parametro in data. Successivamente,
se l’esito di questo controllo è positivo, si potrà convertire utilizzando
l’apposita funzione di conversione CDate.
Esempio:
If IsDate("29/31/2001") Then
MsgBox "Data Corretta"
Else
MsgBox "La data passata non è valida!"
End If
Questo esempio dirà che “la data passata non è valida”
Funzioni numeriche:
Round:
Restituisce un numero arrotondato in base al numero di cifre decimali
specificato.
Sintassi: Round(espressione[, numcifredecimali])
Esempio:
MsgBox Round(8.98737, 1) restituirà 9
MsgBox Round(8.94737, 2) restituirà 8,95
MsgBox Round(8.94737, 3) restituirà 8,947
MsgBox Round(8.94737, 4) restituirà 8,9474
Sqr:
Restituisce un valore Double che specifica la radice quadrata di un numero.
Abs:
Restituisce un valore che specifica il valore assoluto di un numero. Il
valore restituito sarà dello stesso tipo di quello passato alla funzione. Ad
esempio ABS(-2) e ABS(2) restituiscono entrambi 2.
Cos e Sin:
Restituiscono un valore Double che specifica il coseno o il seno di un
angolo.