http://digilander.libero.it/Cenati

Manuale VbScript

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript

 

 

 

 

Perchè un Tutorial di VbScript?

[In questa pagina c'è una guida di VbScript ed i link ad altre pagine del sito con materiale di supporto, documentazione e un elenco di funzioni utili a semplificare la programmazione]

Quando si inizia a strudiare un nuovo linguaggio di programmazione si trovano tutte le informazioni necessarie nei file di help. Ma spesso queste informazioni non sono nell'ordine nelle quali ci servono. Ad esempio troviamo l'elenco delle istruzioni in ordine alfabetico, con ATAN tra le prime, che serve a calcolare l'arcotangente di un angolo. Se si studiano le istruzioni in quest'ordine bisogna essere ben determinati per riuscire a cavarci qualcosa di buono.

Per chi è agli inizi è invece utile essere accompagnato passo per passo alla scoperta della sintassi dei comandi più utilizzati. Se poi si ha già una esperienza di programmazione in altri linguaggi sarà facile imparare per analogie e differenze rispetto a ciò che già si conosce. Riuscire ad ottenere qualcosa, anche semplice, da un proprio programma è abbastanza gratificante da spingere a saperne di più

Nel guardarmi intorno alla ricerca di informazioni sui linguaggi di cui avevo sentito parlare, mi sono trovato alle prese con materiale già per esperti o con guide veramente scarne. Secondo me il primo motivo per cui una persona dovrebbe iniziare ad occuparsi di programmazione è "perchè gli serve". Se si conosce già un linguaggio di programmazione, forse non serve impararne un'altro. Ma può anche essere che si cerchi di fare qualcosa che non è possibile con gli strumenti che si conoscono. Oppure qualcosa di più facile o più portabile. Ecco, VbScript è preinstallato con Windows, gli script si possono scrivere e modificare con il Notepad e non hanno bisogno di installazione. Questi potrebbero essere già dei buoni motivi per imparare ad usarlo. Posso aggiungere che essendo VbScript il fratello minore di Visual Basic, quello che si impara può essere usato per fare un passo in avanti senza dover ricominciare da zero.

Spero che questa pagina riesca a colmare una carenza sulle nozioni di base del linguaggio VbScript, soprattutto in lingua italiana. Certamente non copre tutte le istruzioni e le funzioni di VbScript, ma permette di farsi un'idea di cosa si può fare con questo linguaggio.

Cosa serve per programmare in VbScript

Ciò che è  necessario per scrivere codice in VbScript è con molta probabilità già installato sul computer. VbScript fa parte della dotazione di Windows e per scrivere programmi è sufficiente il Blocco Note. Altre informazioni sono disponibili nella pagina "cosa è  e come imparare VbScript", mentre se più avanti vorrete usare un programma specifico che vi assista nella scrittura del codice (suggerendo la sintassi dei comandi) potete consultare la pagina sugli "Editor".

Suggerisco di scrivere il codice proposto (anzichè fare copia & incolla) in modo da prendere maggiore familiarità con la sintassi. Una volta capito il meccanismo, inventate altri esempi per vedere come si comporta VbScript.

C'è anche una pagina con una raccolta di materiale di supporto che ho trovato molto utile. Guide, un semplice editor gratuito, raccolte di spezzoni di codice, ecc.

Tutta roba in cui mi sono imbattuto e che lo avessi saputo prima avrei fatto molta meno fatica a reinventare la ruota.

A questo proposito, c'è anche una pagina con l'elenco di molte funzioni (scritte da me o trovate in rete) che semplificano molto la programmazione. Oltre ad una breve descrizione, c'è ovviamente il codice scaricabile.

Allora iniziamo

Come ogni manuale che si rispetti e nel solco della tradizione iniziata da Kernighan e Ritchie negli anni 70 con "The C Programming Language", il primo programma in VbScript che prepareremo servirà a salutare l'utente.

Apriamo il blocco note di Windows (Notepad) e scriviamo la nostra prima riga di codice:

MSGBOX "ciao a tutti"

Poi salviamo il testo in un file VBS. Per salvare bisogna scegliere il menu File/Salva, scrivere il nome del file da creare "ciao.vbs" nella casella "Nome File" e (IMPORTANTE!) nella sottostante casella "Salva come" bisogna scegliere "Tutti i file". In questo modo si creerà il file ciao.vbs, che ha l'icona di un tabulato a righe, come di un modulo continuo a forma di "S". 

Esempio di come salvare uno script vbs

Ora possiamo entrare nella cartella dove abbiamo salvato il file ciao.vbs ed avviare con un doppio click il programma. Apparirà una finestrella come la seguente.

Output del primo script: CIAO

Ecco che è stata sufficiente una riga per creare una finestra sullo schermo. Vedremo come fare anche qualcosa di più utile.

Per ora introduciamo qualche ulteriore caratteristica della finestra messaggio. Il primo parametro, come abbiamo visto, indica il testo da mettere nella finestra. Il secondo indica quali pulsanti o icone devono esserci, il terzo indica il titolo della finestra.


' Questo è un commento. Infatti la riga inizia con un apice.
MsgBox "ciao a tutti", VbOkOnly, "Titolo della finestra"

VbOkOnly in realtà vale zero, quindi potremmo anche non mettere nulla ed ottenere una finestra come quella dell'immagine. Nel file di help di VbScript alla voce MsgBox abbiamo una lista delle costanti che possiamo utilizzare come secondo parametro. Si tratta di una comodità per rendere più leggibile il codice, in quanto potremmo utilizzare direttamente i numeri al posto delle parole chiave. VbCritical fa apparire la x bianca sul pallino rosso tipica dei messaggi di errore. VbQuestion mostra una finestra col punto di domanda. VbExclamation mostra il segnale di attenzione (triangolo giallo con punto esclamativo), VbInformation mostra la "i" nel pallino blu. Provate.

' Esempio di finestra con la X bianca nel pallino rosso.
MsgBox "Questo è un messaggio di errore", VbCritical, "Attenzione"

Dato che VbQuestion fa apparire il punto di domanda, la finestra dovrebbe poter offrire la possibilità di scelta tra più opzioni. Con questo codice otteniamo quindi una risposta dall'utente:

' Rivolgo una domanda all'utente.
Risposta = MsgBox ("Sei proprio sicuro?", vbQuestion + vbYesNo, "Domanda")


Questo esempio ci introduce al prossimo argomento. Più avanti torneremo ad occuparci della istruzione MsgBox.

Le Variabili.

Le variabili sono delle "scatole" che possono contenere un valore. Questa è la definizione classica ed anche un po' semplicistica. In pratica nei nostri programmi possiamo assegnare un valore qualsiasi ad una variabile, anche che sia il risultato di qualche calcolo o elaborazione. I nomi delle variabili devono iniziare con una lettera e possono contenere lettere e numeri. Non importa se usiamo le lettere maiuscole o minuscole, quindi Variabile1 e VARIabile1 sono la stessa cosa. Per fortuna, altrimenti rischieremmo di fare degli errori per un banale errore di digitazione. Per assegnare un valore ad una variabile basta scriverne il nome seguito da un uguale e poi dal valore che le si vuole dare. Il valore può essere anche il risultato di una operazione su numeri o altre variabili. Per i calcoli si usa il più, il meno, l'asterisco per la moltiplicazione e la barra "/" per la divisione. Nell'help ci sono inoltre molte funzioni per il calcolo di radice quadrata, operazioni trigonometriche, ecc.

Per chi non ha alcuna esperienza di programmazione, segnalo che una espressione come x=x+1 in matematica non ha senso, ma in molti linguaggi di programmazione sì. Questo perchè non si tratta di una espressione di equivalenza, ma con questo codice si intende che alla variabile x (a sinistra dell'uguale) si assegna il valore che sta a destra del segno di uguale, cioè x+1. In pratica con questo codice aumento di una unità il valore della variabile x. In alcuni altri linguaggi l'operazione di assegnazione si fa con un simbolo diverso (ad esempio x:= 4) per non confondere le idee, mentre si riserva il segno "uguale" a quando si esegue un confronto fra valori. In questo caso x= (x+1) servirà a confrontare i due valori ed il risultato sarà "falso". Volevo fare un chiarimento e forse ho complicato le cose...

Cercate di usare dei nomi di variabile che significhino qualcosa, in modo che rileggendo il programma sia più facile capire cosa state facendo. Ad esempio chiamate le variabili NumeroTotaleDiPersone e ImportoAlNettoDiIVA. Usate anche i commenti, per spiegare cosa succede. Un commento all'inizio di un blocco di programma potrebbe descrivere quali dati entrano e quali dati escono. E magari come vengono elaborati.

Bisogna notare anche che in VbScript le variabili non sono distinte in tipi diversi come avviene invece in altri linguaggi. La variabile A può contenere indifferentemente un numero o una frase. A seconda del modo in cui verrà usata, la variabile si comporterà come un numero o come una stringa di testo. Questo a volte può essere molto comodo, ma a volte può non essere chiaro quale è il comportamento di VbScript. 

Quando si realizza uno script è utile mettere una MsgBox ogni tanto che mostri quale è il valore di una variabile a quel punto dello svolgimento del programma. Serve per essere certi che si abbia ottenuto il valore giusto per continuare l'elaborazione.

'Qualche esempio con i numeri
PrimoNumero = 18
SecondoNumero = 24
Risultato= PrimoNumero + SecondoNumero
MsgBox Risultato 'Qui vedrete 42, era facile.
'Qualche esempio con le stringhe di testo
Nome = "Giovanni"
Messaggio = "Il mio nome è " & Nome
MsgBox Messaggio
a = 10
b = 20
MsgBox a + b  'Mostrerà 30
MsgBox a & b  'Mostrerà 1020

Le stringhe di testo si concatenano usando la e commerciale "&".  Nell'esempio concateno "Il mio nome è " con il contenuto della variabile Nome. Poi mostro il risultato sullo schermo.

L'ultimo esempio è meno intuitivo. Le variabili A e B contengono due numeri, ma se si usa l'operatore di concatenazione delle stringhe ( & ) otteniamo la somma di due stringhe anzichè la somma di due numeri. VbScript ha capito, dall'operatore che abbiamo usato, che intendevamo trattare A e B come stringhe di testo.

Per gli esperti, aggiungo che il testo può essere anche concatenato con il "+". Proprio perchè sono esperti, già sanno che non è il caso di rischiare e quindi se vogliamo essere certi di quello che vogliamo ottenere basta usare il + per i numeri ed & per il testo.

Più avanti (parlando di Subroutine) aggiungo qualcosa sull'argomento "variabili".

    Le Costanti

Le costanti sono "variabili" delle quali non è possibile variare il valore.

Si indicano in una riga di codice con CONST Autore="Giovanni" oppure PiGreco= 3.14

e il tentativo di modificarle genera un errore.

Ora che abbiamo parlato un po' delle variabili e delle costanti, proviamo a chiedere all'utente di fornirci dei dati. Il primo programma che ti fa una domanda ed elabora la tua risposta è un'emozione.

Input dall'utente

Esiste una semplice funzione per chiedere all'utente di inserire un dato. InputBox. Vediamone la sintassi.

Nome = InputBox ("Come ti chiami?", "Inserire il nome", "Giovanni")
MsgBox "Il tuo nome è " & Nome

InputBox restituisce un risultato, quindi bisogna usare una variabile (Nome, nell'esempio) che conterrà l'input dell'utente. Sullo schermo appare una finestra dal titolo "Inserire il nome" che contiene la domanda "Come ti chiami?" e la risposta predefinita "Giovanni". Solo il primo parametro è obbligatorio, mentre i successivi possono anche non esserci. Guardando nell'help potrete trovare anche altri parametri facoltativi, comunque di raro uso. Se l'utente clicca OK, il contenuto della casella di testo sarà assegnato alla variabile Nome, altrimenti la variabile sarà vuota.

A questo punto non è difficile preparare uno script che chieda un numero, poi un secondo numero ed infine ne mostri la somma. Due InputBox e poi una MsgBox "la somma di " & A & " e di " & B & " è uguale a " & A+B

Difficile? No, proviamo. Sono tutti pezzi di testo quindi dobbiamo concatenarli con "&". Il risultato, che è una somma, lo calcoliamo con il più.

a = InputBox ("Primo numero da sommare", "Somma")
b  = InputBox ("Secondo numero da sommare", "Somma")
MsgBox "La somma di " & a & " e di " & b & " è uguale a " & a+b

Per ora lasciamo perdere che l'utente potrebbe inserire dati non validi (testo anzichè numeri) e far risultare dati improbabili.

Con quello che abbiamo imparato fino ad ora si possono già fare tante cose. Ma un programma intelligente deve poter fare delle scelte, quindi introduciamo un nuovo comando.

Se...allora...altrimenti..Fine Se.

Prima di parlare di questo costrutto, spreco due parole sulla programmazione in generale: scrivere un programma vuol dire aver bene presente come si fa a risolvere il problema. La sostanza di quello che voglio dire è tutta qui. Bisogna sapere quale è il procedimento che partendo dai dati ci porta alla soluzione, bisogna conoscerlo bene in modo da tradurlo in una forma comprensibile al computer. Prima che il computer sappia come fare, lo dobbiamo sapere noi. A volte scrivere il programma porta a riflettere sul problema ed aiuta a formalizzarlo e comprenderlo meglio. Si arriva ad un certo punto e si pensa: "se succede questo devo comportarmi così, mentre se succede quest'altro...". La scelta tra ipotesi diverse è quello di cui ci occupiamo adesso.

Le istruzioni che permettono di effettuare una scelta sono IF e THEN. SE ed ALLORA.

Scriviamo un programma che calcola il risultato di una divisione, ma solo se il denominatore è diverso da zero.

a = InputBox ("Inserisci il numeratore", "Divisione")
b  = InputBox ("Inserisci il denominatore", "Divisione")
if b<>0 then MsgBox a & " diviso " & b & " è uguale a " & a/b

Il comando If esegue l'istruzione che segue Then, ma solo se la condizione è vera. Si possono mettere anche più istruzioni dopo il Then, ma devono essere separate dai due punti ":", che servono in generale per separare più istruzioni sulla stessa riga.

Ed ora, per introdurre il comando ELSE (altrimenti), modifichiamo il programma in modo che anche in caso di errore venga visualizzato qualcosa. Questa costruzione si sviluppa su più righe. Per comodità si usa incolonnare diversamente le istruzioni in modo da rendere più leggibile quello che viene eseguito sotto la condizione. L'incolonnamento non cambia il senso del codice, ma lo rende più leggibile. E' importante, soprattutto nel caso di codice più complesso con un if dentro l'altro, che l'incolonnamento sia ben fatto, altrimenti potrebbe sembrare che una istruzione dipenda da un if mentre dipende da un altro.

if b=0 then
   MsgBox "Divisione per zero non ammessa", vbCritical, "Errore"
else
   MsgBox a & " diviso " & b & " è uguale a " & a/b
End If

Come vedete, se non c'è nulla dopo il Then significa che stiamo scrivendo una condizione su più righe. Quindi serve una istruzione END IF che concluda il blocco.

Ricordate cosa significa il secondo parametro "VbCritical"? Fa apparire una finestra con la "X" rossa per significare che si è verificato un errore.

C'è un altro costrutto che permette di eseguire delle scelte. E' il SELECT..CASE. E' simile ad una serie di IF.

I cicli For..Next

Queste sono istruzioni molto potenti, con le quali si esprime la potenza e la velocità di calcolo di un computer. Servono a ripetere per un certo numero di volte lo stesso blocco di codice.

Nel ciclo For c'è una variabile che assume un valore iniziale e che viene incrementata ogni volta che si arriva al comando Next. Tutto quello che c'è tra il For ed il Next viene eseguito fino a che la variabile raggiunge un valore finale. Ok, meglio fare un esempio.

For contatore = 1 to 5
  msgbox "Il contatore vale " & contatore
next
msgbox "Fine"

La variabile Contatore all'inizio vale 1. Viene mostrato un messaggio che dice "Il contatore vale 1". Quando si arriva al next, il ciclo ricomincia e il contatore viene incrementato di uno. Appare il nuovo messaggio che dice "Il contatore vale 2".

Il programma arriva fino a "Il contatore vale 5" dopo di che il ciclo termina e anzichè ripartire dall'inizio prosegue alla istruzione successiva mostrando il messaggio "Fine".

Ora proviamo a fare la somma dei numeri da uno a mille. Dunque, ho bisogno di una variabile dove mettere la somma man mano che si forma e un ciclo per scorrere tutti i numeri.

Somma=0
for i = 1 to 1000
   Somma = Somma + i
next

MsgBox "La somma è " & Somma

Adesso voglio sommare solo i numeri pari. L'istruzione FOR ha la possibilità di incrementare il contatore di qualsiasi valore, non solo di uno come abbiamo visto fin'ora. Quindi partiamo dal valore zero (o due) e incrementiamo di due alla volta specificandolo con l'istruzione STEP, che significa "passo".

Somma=0
for i = 0 to 1000 step 2
   Somma = Somma + i
next

MsgBox "La somma dei numeri pari da zero a mille è " & Somma

In questi esempi c'è una sola istruzione (il calcolo della somma) tra il for ed il next, ma ce ne possono essere quante ne vogliamo. 

Per completezza devo anche dire che esiste una istruzione "Exit For" che forza l'uscita dal ciclo (se, ad esempio, si verifica una certa condizione). A volte è opportuno utilizzare un ciclo for con una istruzione di uscita anticipata, ma più frequentemente si utilizzano delle istruzioni nelle quali la ripetizione del codice è proprio legata al verificarsi di una condizione. Le vediamo adesso.

Istruzioni While...Wend

Il blocco di istruzioni compreso tra while e wend viene eseguito la prima volta se la condizione accanto a While è vera. Al termine del blocco (quando si arriva all'istruzione Wend) la condizione viene verificata di nuovo ed eventualmente il codice è eseguito di nuovo.

La particolarità di queste istruzioni è che il codice viene eseguito se la condizione è VERA. Inoltre, il controllo viene fatto in testa al codice, quindi se la condizione non si avvera può accadere che il codice non venga del tutto eseguito.

L'avvertenza da tener presente quando si lavora con questo genere di cicli è che una svista nella scrittura del codice può produrre un loop (ciclo) infinito ed il programma non termina più. Magari perchè nelle istruzioni che abbiamo scritto ci siamo dimenticati di modificare i dati utilizzati per la condizione del While. Insomma, se la condizione è vera e nel codice non la modifico, lo script continuerà a lavorare senza mai uscire. E' buona cosa salvare sempre il codice creato prima di lanciare il programma in modo da non perdere le ultime modifiche apportate se il programma "va in loop".

Vediamo il listato qui sotto. All'utente viene chiesto di inserire un numero. Questo numero viene sommato al precedente e le richieste proseguono fin quando la somma non supera il 100.

In altre parole: fintanto che la somma è minore o uguale a zero, chiedi un numero e sommalo al totale.

Somma=0
While somma<=100
    numero=inputbox ("inserisci un numero da sommare")
    somma=somma + numero
    Mancanti=100-somma
    If mancanti >0 Then msgbox "La somma è " & somma & Vbcrlf & "Per arrivare a 100 ne mancano " & mancanti
Wend
msgbox "Hai raggiunto il numero " & somma

Abbiamo anche l'occasione di vedere altre caratteristiche di VbScript. In una riga calcolo anche quanto manca ad arrivare a 100. Poi uso un IF per mostrare quanto manca ad arrivare a 100, ma solo se non l'ho ancora superato. Per evitare che mi dica che ne mancano "meno 10" nel caso abbia già superato il cento.

Tra le varie cose che sono concatenate nell'istruzione msgbox c'è una cosa strana: "VbCrLf". E' una costante speciale di VbScript che indica il carattere di ritorno a capo. Quello che c'è dopo il VbCrLf finirà su una nuova riga.

Provate a togliere la prima riga (Somma=0) e lanciare il programma. A me è successo che ha trattato i dati inseriti dall'utente come del testo. Quindi scrivendo due volte "1" mi diceva che la somma era 11. Questo è un caso in cui noi e VbScript non ci capiamo sul contenuto delle variabili. Per ovviare a ciò basta assegnare un valore (numerico o di testo) alla variabile per far capire cosa deve contenere e come deve comportarsi con le operazioni sul contenuto. Ci sono anche alcune istruzioni dedicate proprio a forzare VbScript a considerare un certo tipo di dati come contenuto di una variabile (nell'help si può cercare CINT, CSTR, CCUR, ecc.)

Istruzioni Do..Loop: creare cicli più flessibili

Abbiamo visto le potenzialità di While, ma ad un certo punto si incontrano anche i suoi limiti. Questa nuova istruzione che vediamo ha la possibilità di mettere il controllo in testa oppure in coda (in quest'utlimo caso il codice viene sempre eseguito almeno una volta), ha la possibilità di uscire dal ciclo (con EXIT DO) e si può scegliere se la condizione per eseguire il codice deve essere vera oppure falsa.

Queste sono le due sintassi possibili:

 Do [{While | Until} condizione]
    [Istruzioni ]
    [Exit Do]
    [Istruzioni ]
Loop

Oppure

Do
    [Istruzioni]
    [Exit Do]
    [Istruzioni]
Loop [{While | Until} condizione]

Usando l'opzione WHILE facciamo ripetere il loop quando la condizione è VERA. Ed usciamo quando è FALSA.

Usando l'opzione UNTIL facciamo ripetere il loop quando la condizione è FALSA. Ed usciamo quando è VERA.

In fondo non farebbe molta differenza, visto che basterebbe usare una delle due opzioni e cambiare il tipo di controllo. Ad esempio WHILE x=5 equivale a UNTIL x<>5. In entrambi i casi il ciclo viene ripetuto se x è uguale a 5 e si esce se x è diverso da 5. Si tratta principalmente di una questione di chiarezza nella scrittura del codice, anzi soprattutto nella rilettura e nella comprensione del codice.

Vediamo di modificare un pochino l'esempio precedente.

Somma=0
Do
   numero=inputbox ("Sei a "& Somma & vbcrlf & "Inserisci un numero da sommare")
   somma=somma + numero
Loop Until somma>= 100
msgbox "Hai raggiunto il numero " & somma

E' chiaro? Continua a chiedermi numeri finchè la loro somma non supera 100.

Vediamo un altro esempio, in cui impariamo una funzione un po' particolare che si chiama EVAL( ). Serve, per semplificare, a calcolare il risultato di una operazione passata come stringa di caratteri. EVAL("2+2") restituisce il valore di 4.

Do
    calcolo=inputbox ("Inserisci un calcolo (BASTA per terminare)")
    msgbox eval(calcolo)
Loop Until trim(ucase(calcolo))= "BASTA"

Abbiamo creato una calcolatrice. Si inserisce una formula (anche complessa, con parentesi ed i segni + - * e /) e si ottiene il risultato. Scrivendo "basta" si esce.

Per rendere le cose più semplici all'utente, "basta" può essere scritto anche in minuscolo. Il programma infatti mette l'input in maiuscolo con la funzione UCASE (che significa upper case, cioè maiuscolo) e lo confronta con "BASTA".

Per essere ancora più sicuri, tolgo eventuali spazi prima e dopo quello che l'utente ha inserito. Per far questo uso la funzione TRIM.

Avrei potuto anche usare la funzione INSTR(1,UCASE(calcolo),"BASTA") che è maggiore di zero se nella variabile CALCOLO (resa tutta maiuscola) è contenuta la stringa "BASTA" iniziando a controllare dal primo carattere. Il risultato è maggiore di zero perchè indica la posizione del primo carattere della stringa trovata. Restituisce zero se non trova nulla.

Le cose si stanno un po' complicando, ma è solo per dire che ci sono tante funzioni da scoprire (nel file di help) oltre a Ucase, Lcase (per mettere in minuscolo), Instr, InstrRev (per cercare partendo dal fondo) ed Eval.

Subroutine e Funzioni

Passiamo per un attimo a qualcosa di diverso. Nel codice ci possono essere delle parti ricorrenti da eseguire in diversi punti del programma. Per quanto abbiamo imparato finora, bisognerebbe duplicare le stesse parti tante volte quanto servono. E se c'è una modifica da fare, correggere tutte le copie. Ci vengono quindi in aiuto le Subroutine, che sono appunto pezzi di codice da richiamare all'occorrenza e con la possibilità di inviare dei dati da utilizzare nei calcoli.

Beep 3,10
Beep 4,50

Sub Beep (n,wait)
For i = 1 To n
  createobject("wscript.Shell").Run "%comspec% /c echo "&Chr(7), 0, False
  Wscript.Sleep wait*1000
Next
End Sub

La subroutine Beep produce n suoni ad una distanza tra loro di "wait" secondi. E' una delle funzioni disponibili nella libreria che è scaricabile in questo sito. Per ora a noi interessa il fatto che nei nostri programmi possiamo mettere BEEP e rendere al contempo il codice più semplice e più leggibile. Ogni volta che scrivo BEEP è come se scrivessi il codice che c'è tra SUB e END SUB. Da notare che i parametri non sono compresi tra le parentesi, come invece accade per le Function.

La "funzione" (Function) è una sub che restituisce un risultato.

Prendiamo ad esempio il programa che calcola la somma dei numeri da uno a n. L'abbiamo visto con i cicli for/next. Ipotizziamo di dover usare più volte questo codice. Lo mettiamo in una Function che aspetta un numero come parametro per il calcolo.

msgbox calcola(100)
msgbox calcola(345)
msgbox calcola(7570)

Function calcola(n)
    'Restituisce la somma dei numeri da uno al parametro n.
    Dim i, somma
    For i=1 To n
        somma=somma+i
    Next
    calcola=somma 'Questo è il valore restituito dallaFunction
End Function

Quando la funzione termina, il controllo ripassa al programma chiamante. Il contenuto della variabile "calcola" (che non a caso ha lo stesso nome della funzione) viene ritornato al programma chiamante. Può essere utilizzato direttamente oppure memorizzato altrove.

Facciamo anche la conoscenza dell'istruzione DIM. Serve a dichiarare il nome di una variabile che si utilizzerà successivamente. Non è necessario dichiarare una variabile prima del suo utilizzo, ma i programmatori veri preferiscono farlo ed elencare in testa al programma quali sono le variabili che utilizzeranno e magari aggiungere un commento esplicativo.

Se in testa al programma si utilizza l'istruzione OPTION EXPLICIT, sarà obbligatorio dichiarare le variabili. Questa istruzione obbliga ad un codice più ordinato e genera un errore quando si cerca di utilizzare una variabile non dichiarata. Questo significa anche che un errore di battitura in una variabile sarà subito individuato da VbScript perchè la variabile non è stata dichiarata. E' molto utile per trovare gli errori nel codice, perchè senza la dichiarazione OPTION EXPLICIT saremo convinti di usare una variabile mentre da qualche parte ne stiamo usando una con un nome quasi uguale.

Dichiarare le variabili "i" e "somma" nella nostra Function significa che queste due variabili vivono solo dentro la Function, sono diverse da eventuali variabili con lo stesso nome utilizzate nel programma principale e non conservano il loro valore al termine della Function.

Ecco un esempio che chiarisce la validità delle variabili. La variabile "numero"  definita con DIM all'interno della sub è come se fosse una variabile diversa da quella definita nel programma principale.

numero=5
msgbox numero 'mostra 5 
MostraNumero  'mostra 1
msgbox numero 'mostra 5

Sub MostraNumero 
    Dim numero 
    numero=1
    msgbox numero
End Sub

L'arma segreta di VbScript: CreateObject

Questo è solo un rimando, perchè l'argomento è vasto e complesso.

Nel registro di Windows sono annotati una lunga serie di "oggetti COM", una sorta di riferimenti a librerie disponibili sul computer. Un "oggetto", per fare un paragone con quanto visto finora, è un insieme di subroutine e di funzioni alle quali possiamo accedere senza la possibilità di modificarle o visualizzarle.

Da un punto di vista più formale, un oggetto è un tipo di dati (come intero, alfanumerico, a virgola fissa, ecc.) che anzichè permettere un solo valore può accogliere più valori (chiamati "proprietà", in lettura e/o scrittura), contiene delle procedure (chiamate "metodi") e può notificare al programma chiamante gli "eventi" che accadono.

Ci sono oggetti molto complessi che possono essere manipolati dall'interno di un programma VbScript, come Internet Explorer ed Excel. Non tutti i programmi mettono a disposizione del programmatore un modello ad oggetti che si può utilizzare, ma quando questo è possibile si aprono enormi orizzonti.

Ad esempio utilizzando Internet Explorer ci si può collegare a siti internet, simulare la compilazione dei campi, premere sui pulsanti e scaricare file.

Usando Excel si può caricare un foglio (o crearne uno nuovo), estrarne dati, aggiungere dati, salvare e stampare.

Un oggetto molto importante è il FileSystemObject. C'è una pagina del sito dedicata a questo oggetto, che serve a manipolare file e cartelle.

Finale (?)

Questi che ho descritto sono gli elementi essenziali di VbScript. Penso che sia sufficiente per farsi un'idea generale del linguaggio e per decidere se vale la pena continuare.

Nell'Help scaricabile dal sito Microsoft o da questo sito c'è la descrizione di questi e di altri argomenti. Ci sono numerose altre funzioni che agiscono sul testo, sui numeri e anche su variabili contenenti date e ore. Nel momento in cui servono si possono facilmente approfondire vedendone la sintassi.

Spero che le cinque sere dedicate alla scrittura di questa pagina siano in grado di accendere in qualcuno la scintilla della passione per la programmazione.

Giovanni Cenati, 12 novembre 2009.

 

 

 

© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript