Definizione di VBScript

 

In Microsoft Visual Basic Scripting Edition, il linguaggio di programmazione più recente della famiglia Visual Basic, sono disponibili funzioni per includere script in un'ampia gamma di ambienti diversi, tra cui script client Web in Microsoft Internet Explorer e script server Web in Microsoft Internet Information Server.

Facilità di apprendimento e di uso

Se si conosce già Visual Basic o Visual Basic, Applications Edition, VBScript risulterà estremamente semplice. In caso contrario, la fase di apprendimento di VBScript consentirà di acquisire le conoscenze sufficienti per imparare in modo semplice a programmare con tutti i linguaggi di programmazione della famiglia Visual Basic. Queste pagine Web includono informazioni complete su VBScript, ma non istruzioni sulle tecniche di programmazione. Per l'apprendimento delle tecniche di programmazione, vedere i volumi della serie Passo per passo di Microsoft Press.

Tecnologia ActiveX Scripting

VBScript comunica con applicazioni host tramite la tecnologia ActiveX™ Scripting, grazie alla quale nei browser e in altre applicazioni host non è necessario scrivere codice integrativo speciale per ciascun componente script. Questa tecnologia consente a un host di compilare script, di ottenere e richiamare punti di ingresso e di gestire lo spazio dei nomi disponibile per lo sviluppatore. Grazie alla tecnologia ActiveX Scripting i fornitori di linguaggi possono creare componenti run-time standard per le tecniche di script. Microsoft sta inoltre lavorando assieme a vari gruppi Internet per definire uno standard ActiveX Scripting che consenta di rendere intercambiabili i vari moduli di gestione per script. La tecnologia ActiveX Scripting viene utilizzata in Microsoft® Internet Explorer e in Microsoft® Internet Information Server.

VBScript in altre applicazioni e browser

Gli sviluppatori possono concedere gratuitamente licenze per l'implementazione di codice di VBScript da utilizzare nei prodotti creati. Microsoft sta creando implementazioni binarie di VBScript per l'API di Windows® a 32 e a 16 bit e per Macintosh®. VBScript è integrato con i browser Web. È inoltre possibile utilizzare VBScript e ActiveX Scripting come linguaggi di script di tipo generale in altre applicazioni.

 

Aggiunta di codice VBScript ad una pagina HTML

È possibile utilizzare l'elemento SCRIPT per aggiungere codice VBScript a una pagina HTML.

 

Tag <SCRIPT>

 

Il codice VBScript viene inserito all'interno dei tag <SCRIPT>. Una routine per la verifica di una data di consegna, ad esempio, appare nel modo seguente:

 

<SCRIPT LANGUAGE="VBScript">

<!--

Function CanDeliver(Dt)

CanDeliver = (CDate(Dt) - Now()) > 2

End Function

-->

</SCRIPT>

 

Il codice è racchiuso tra tag <SCRIPT> iniziali e finali. L'attributo LANGUAGE indica il linguaggio di script utilizzato. Dato che i browser supportano anche altri linguaggi di script, è necessario indicare quello utilizzato. Si noti inoltre che la funzione CanDeliver è racchiusa tra i tag di commento, ovvero <!-- e -->, in modo che il codice non venga visualizzato nei browser che non supportano il tag <SCRIPT>.

Dato che l'esempio corrisponde a una funzione generale non collegata a nessun controllo di form specifico, è possibile includervi la sezione HEAD della pagina:

 

 

<HTML>

<HEAD>

<TITLE>Immissione ordine</TITLE>

<SCRIPT LANGUAGE="VBScript">

<!--

Function CanDeliver(Dt)

CanDeliver = (CDate(Dt) - Now()) > 2

End Function

-->

</SCRIPT>

</HEAD>

<BODY>

...

 

È possibile utilizzare i blocchi SCRIPT in qualsiasi punto della pagina HTML, sia nella sezione BODY che nella sezione HEAD. È tuttavia consigliabile inserire tutto il codice script di utilizzo generale nella sezione HEAD, in modo che l'intero codice sia incluso in un'unica posizione. Questa operazione consente di leggere e decifrare tutto il codice prima di essere utilizzato da una chiamata dall'interno della sezione BODY.

Nel caso di form, si consiglia tuttavia di fornire codice script su una stessa riga per rispondere agli eventi di oggetti contenuti nel form. È, ad esempio, possibile incorporare codice script per rispondere alla pressione di un pulsante in un form:

 

 

<HTML>

<HEAD>

<TITLE>Verifica eventi dei pulsanti</TITLE>

</HEAD>

<BODY>

<FORM NAME="Form1">

<INPUT TYPE="Button" NAME="Button1" VALUE="Click">

<SCRIPT FOR="Button1" EVENT="onClick" LANGUAGE="VBScript">

MsgBox "Pulsante premuto"

</SCRIPT>

</FORM>

</BODY>

</HTML>

 

Quasi tutto il codice verrà visualizzato nelle routine Sub o Function e verrà richiamato solo quando il codice scritto ne determinerà l'esecuzione. È tuttavia possibile scrivere codice VBScript esternamente alle routine, ma sempre all'interno di un blocco SCRIPT. Questo codice viene eseguito una sola volta, quando la pagina HTML viene caricata. In questo modo, è possibile inizializzare i dati o modificare dinamicamente l'aspetto della pagina Web quando viene caricata.

Tipi di dati

Descrizione dei tipi di dati di VBScript

In VBScript è disponibile solo il tipo di dati Variant, un tipo di dati speciale che, a seconda della modalità in cui viene utilizzato, può includere vari tipi di informazioni. Il tipo di dati Variant, essendo l'unico disponibile, è il tipo di dati restituito da tutte le funzioni di VBScript.

Nella forma più semplice una variabile Variant può includere informazioni numeriche o stringhe. È equivalente a un numero se utilizzata in un contesto numerico e a una stringa se utilizzata in un contesto stringa. Ciò significa che, se si lavora con dati simili a valori numerici, VBScript interpreterà tali dati come numeri e verranno eseguite le operazioni più appropriate. In modo analogo, se si lavora con dati che possono essere solo stringhe, essi verranno gestiti come dati stringa. È tuttavia possibile fare in modo che i numeri vengano gestiti come stringhe racchiudendoli tra virgolette doppie (" ").

Sottotipi di variabili Variant

Oltre alla semplice classificazione di valore numerico o stringa, con le variabili Variant è possibile definire ulteriori distinzioni in base alla natura specifica delle informazioni numeriche. Se, ad esempio, si utilizzano informazioni numeriche che rappresentano una data o un orario insieme ad altri dati relativi alla data o all'orario, il risultato verrà sempre espresso come data o come orario. È tuttavia possibile utilizzare informazioni numeriche di vario tipo con dimensioni che vanno dai valori booleani ai numeri in virgola mobile di grandi dimensioni. Le varie categorie di informazioni che possono essere incluse in variabili Variant sono definite sottotipi. Nella maggior parte dei casi, i dati inseriti in variabili Variant vengono automaticamente gestiti nel modo più adatto.

Nella tabella seguente sono elencati i possibili sottotipi di variabili Variant.

Sottotipo

Descrizione

Empty

Variabile Variant non inizializzata. Il valore è 0 nel caso di variabili numeriche e una stringa di lunghezza zero ("") nel caso di variabili stringa.

Null

Variabile Variant che include dati non validi inseriti volutamente.

Boolean

Può contenere True o False.

Byte

Contiene un intero compreso tra 0 e 255.

Integer

Contiene un intero compreso tra -32.768 e 32.767.

Currency

Contiene un valore compreso tra -922.337.203.685.477,5808 e 922.337.203.685.477,5807.

Long

Contiene un intero compreso tra -2.147.483.648 e 2.147.483.647.

Single

Contiene un numero in virgola mobile e precisione singola compreso tra -3,402823E38 e -1,401298E-45 per valori negativi e tra 1,401298E-45 e 3,402823E38 per valori positivi.

Double

Contiene un numero in virgola mobile e precisione doppia compreso tra -1,79769313486232E308 e -4,94065645841247E-324 per valori negativi e tra 4,94065645841247E-324 e 1,79769313486232E308 per valori positivi.

Date (Time)

Contiene un numero che rappresenta una data compresa tra l'1 gennaio dell'anno 100 e il 31 dicembre del 9999.

String

Contiene una stringa di lunghezza variabile composta da un massimo di circa 2 miliardi di caratteri.

Object

Contiene un oggetto.

Error

Contiene un numero di errore.

Per le conversioni tra sottotipi è disponibile un'ampia gamma di funzioni di conversione. È inoltre possibile utilizzare la funzione VarType che restituisce informazioni sulla modalità di memorizzazione dei dati in una variabile Variant.

 

Costanti in VBscript

 

Definizione di costante

 

Una costante è un nome significativo non soggetto a modifiche utilizzato in sostituzione di un numero o di una stringa. In VBScript è possibile definire numerose costanti intrinseche. Per ulteriori informazioni sulle costanti intrinseche, consultare Riferimento al linguaggio VBScript.

 

Creazione di costanti

 

Per creare costanti in VBScript, è necessario utilizzare l'istruzione Const con cui vengono create costanti stringa o numeriche con nomi significativi, che è quindi possibile associare a valori letterali e utilizzare negli script. Ad esempio:

Const MyString = "Questa è la mia stringa."

Const MyAge = 49

 

Nell'esempio il valore letterale stringa è racchiuso tra virgolette doppie ("), il modo più chiaro per contraddistinguere i valori stringa dai valori numerici. È possibile rappresentare i valori letterali di data e ora racchiudendoli tra simboli di cancelletto (#), ad esempio:

Const CutoffDate = #6-1-97#

 

È consigliabile adottare una convenzione di denominazione in modo da contraddistinguere le costanti dalle variabili ed evitare quindi di riassegnare valori alle costanti durante l'esecuzione dello script. È possibile, ad esempio, utilizzare il prefisso "vb" o "con" per i nomi di costanti o assegnare nomi in maiuscolo. In entrambi i casi, è buona norma contraddistinguere le costanti dalle variabili per evitare possibili confusioni in script più complessi.

 

Operatori VBScript

In VBScript sono disponibili tutti gli operatori aritmetici, di confronto, di concatenemanto e logici.

Precedenza tra operatori

Quando in un'espressione si eseguono varie operazioni, ciascuna parte viene valutata e risolta secondo un ordine specifico definito precedenza tra operatori. Per ignorare l'ordine di precedenza in modo che determinate parti di un'espressione vengano valutate prima di altre, è necessario utilizzare le parentesi. Le operazioni racchiuse tra parentesi vengono sempre valutate per prime. All'interno delle parentesi tuttavia viene mantenuta la normale precedenza tra operatori.
Nelle espressioni che includono operatori di categorie diverse, vengono innanzitutto valutati gli operatori aritmetici, quindi gli operatori di confronto e infine gli operatori logici. Gli operatori di confronto hanno la stessa precedenza, ovvero vengono valutati da sinistra a destra nello stesso ordine in cui sono stati specificati. Gli operatori aritmetici e logici vengono valutati in base all'ordine di precedenza indicato nella tabella seguente.

Aritmetici

Di confronto

Logici

Descrizione

Simbolo

Descrizione

Simbolo

Descrizione

Simbolo

Elevamento a potenza

^

Uguaglianza

=

Negazione logica

Not

Negazione unaria

-

Disuguaglianza

<>

Congiunzione logica

And

Moltiplicazione

*

Minore di

<

Disgiunzione logica

Or

Divisione

/

Maggiore di

>

Esclusione logica

Xor

Divisione intera

\

Minore o uguale a

<=

Equivalenza logica

Eqv

Modulo aritmetico

Mod

Maggiore o uguale a

>=

Implicazione logica

Imp

Addizione

+

Equivalenza tra oggetti

Is

 

 

Sottrazione

-

 

 

 

 

Concatenamento di stringhe

&

 

 

 

 

Se in un'espressione vengono eseguite la moltiplicazione e la divisione oppure l'addizione e la sottrazione, ciascuna operazione verrà valutata nello stesso ordine in cui è indicata da sinistra verso destra.
L'operatore di concatenamento di stringhe (&) non è un operatore aritmetico, ma per quanto riguarda la precedenza segue tutti gli operatori aritmetici e precede tutti gli operatori di confronto. L'operatore Is è un operatore di confronto per riferimenti a oggetti, ovvero non esegue il confronto degli oggetti o dei corrispondenti valori, ma verifica semplicemente se due riferimenti sono relativi allo stesso oggetto.

Utilizzo di istruzioni condizionali

 

Controllo dell'esecuzione del programma

È possibile controllare il flusso di script tramite istruzioni  condizionali e istruzioni di ciclo. Con le istruzioni condizionali è possibile scrivere codice VBScript che consente di prendere decisioni e ripetere azioni. In VBScript sono disponibili le seguenti istruzioni

condizionali:

If...Then...Else

Select Case

Istruzione If...Then...Else

L'istruzione If...Then...Else consente di valutare se una condizione è True o False e, a seconda del risultato, di specificare una o più

istruzioni da eseguire. In genere la condizione corrisponde a un'espressione in cui due valori o due variabili vengono confrontati

tramite un operatore di confronto. Per informazioni sugli operatori di confronto, vedere Operatori di confronto. Le istruzioni

If...Then...Else possono essere nidificate in un numero qualsiasi di livelli di nidificazione.Esecuzione di istruzioni quando una condizione è True  Per eseguire una sola istruzione quando una condizione è True, è necessario utilizzare la sintassi a riga singola dell'istruzione

If...Then...Else, come illustrato nell'esempio riportato di seguito.

Nell'esempio la parola chiave Else viene omessa.

Sub FixDate()

Dim myDate

myDate = #2/13/95#

If myDate < Now Then myDate = Now

End Sub

 

Per eseguire più righe di codice, è necessario utilizzare la sintassi a righe multiple o a blocco, in cui è inclusa l'istruzione End If, come

illustrato nell'esempio riportato di seguito.

Sub AlertUser(value)

If value = 0 Then

AlertLabel.ForeColor = vbRed

AlertLabel.Font.Bold = True

AlertLabel.Font.Italic = True

End If

End Sub

Esecuzione di istruzioni specifiche quando una determinata condizione è True e di altre istruzioni quando la condizione è False

È possibile utilizzare un'istruzione If...Then...Else per definire due blocchi di istruzioni da eseguire l'uno quando la condizione è True e

l'altro quando la condizione è False.

 

Sub AlertUser(value)

If value = 0 Then

AlertLabel.ForeColor = vbRed

AlertLabel.Font.Bold = True

AlertLabel.Font.Italic = True

Else

AlertLabel.Forecolor = vbBlack

AlertLabel.Font.Bold = False

AlertLabel.Font.Italic = False

End If

End Sub

Scelta tra possibili situazioni

 

Aggiungendo nell'istruzione If...Then...Else proposizioni ElseIf, è possibile scegliere tra situazioni diverse. La funzionalità dell'istruzione If...Then...Else viene in tal modo estesa consentendo di controllare il flusso del programma in base a possibilità diverse.

Esempio:

Sub ReportValue(value)

If value = 0 Then

MsgBox value

ElseIf value = 1 Then

MsgBox value

ElseIf value = 2 then

Msgbox value

Else

Msgbox "Valore non compreso nell'intervallo valido."

End If

Per fornire più situazioni diverse, è possibile aggiungere il numero necessario di proposizioni ElseIf. Un utilizzo eccessivo di queste proposizioni può tuttavia creare un codice poco chiaro e contorto. Un metodo alternativo migliore consiste nell'utilizzare l'istruzione

Select Case.

Istruzione Select Case

La struttura Select Case rappresenta un'alternativa all'istruzione

If...Then...ElseIf per la selezione di un blocco di istruzioni specifico tra più blocchi diversi. La funzione dell'istruzione Select

Case è simile a quella dell'istruzione If...Then...Else, con la differenza tuttavia che il codice risulta più efficiente e di più facile lettura.

Una struttura Select Case include una singola espressione di testo valutata una sola volta all'inizio della struttura stessa. Il risultato dell'espressione viene quindi confrontato con i valori di ciascun blocco Case della struttura. Se viene individuata una corrispondenza,

il blocco di istruzioni associato al blocco Case specifico verrà eseguito.

Select Case Document.Form1.CardType.Options(SelectedIndex).Text

Case "MasterCard"

DisplayMCLogo

ValidateMCAccount

Case "Visa"

DisplayVisaLogo

ValidateVisaAccount

Case "American Express"

DisplayAMEXCOLogo

ValidateAMEXCOAccount

Case Else

DisplayUnknownImage

PromptAgain

End Select

A differenza della struttura Select Case con cui un'espressione viene valutata una sola volta all'inizio della struttura stessa, la struttura If...Then...ElseIf consente di valutare un'espressione diversa per ciascuna istruzione ElseIf. È possibile sostituire una struttura

If...Then...ElseIf con una struttura Select Case solo se con ciascuna istruzione ElseIf viene valutata la stessa espressione. esecuzione di cicli nel codice

Utilizzo di cicli per la ripetizione del codice

L'esecuzione di cicli consente di eseguire ripetutamente un gruppo di istruzioni. In alcuni cicli le istruzioni vengono ripetute fino a quando una condizione risulta False, mentre in altri vengono ripetute fino a quando una condizione risulta True. Esistono inoltre cicli in cui le istruzioni vengono ripetute un numero specifico di volte.In VBScript sono disponibili le seguenti istruzioni per l'esecuzione di cicli:

Do...Loop: le istruzioni vengono ripetute fino a quando una condizione risulta True.

While...Wend: le istruzioni vengono ripetute fino a quando una condizione risulta True.

For...Next: le istruzioni vengono ripetute il numero di volte specificato da un contatore.

For Each...Next: un gruppo di istruzioni viene ripetuto per ciascun elemento incluso nell'insieme di una matrice.

Cicli Do

È possibile utilizzare le istruzioni Do...Loop per eseguire un blocco di istruzioni un numero indefinito di volte. Le istruzioni vengono ripetute mentre una condizione è True oppure fino a quando risulta True. Ripetizione di istruzioni mentre una condizione è TruePer verificare una condizione in un'istruzione Do...Loop, è necessario utilizzare la parola chiave While. La verifica può essere eseguita prima dell'inizio del ciclo, come illustrato nell'esempio ChkFirstWhile riportato di seguito, oppure dopo almeno una esecuzione del ciclo, come illustrato nell'esempio ChkLastWhile. Nella routine ChkFirstWhile, se myNum è impostato su 9 anziché su 20, le istruzioni incluse nel ciclo non verranno mai eseguite. Nella routine ChkLastWhile, le istruzioni incluse nel ciclo vengono eseguite una sola volta, in quanto la condizione è già False.

Sub ChkFirstWhile()

Dim counter, myNum

counter = 0

myNum = 20

Do While myNum > 10

myNum = myNum - 1

counter = counter + 1

Loop

MsgBox "Il ciclo ha eseguito " & counter & " ripetizioni."

End Sub

 

Sub ChkLastWhile()

Dim counter, myNum

counter = 0

myNum = 9

Do

myNum = myNum - 1

counter = counter + 1

Loop While myNum > 10

MsgBox "Il ciclo ha eseguito " & counter & " ripetizioni."

End Sub

 

Ripetizione di un'istruzione fino a quando una condizione risulta True

Per verificare una condizione in un'istruzione Do...Loop, è possibile utilizzare la parola chiave Until in due modi diversi, ovvero la verifica può essere eseguita prima dell'inizio del ciclo, come illustrato nell'esempio ChkFirstWhile riportato di seguito, oppure dopo almeno una esecuzione del ciclo, come illustrato nell'esempio ChkLastWhile. Il ciclo viene ripetuto finché la condizione risulta False.

Sub ChkFirstUntil()

Dim counter, myNum

counter = 0

myNum = 20

Do Until myNum = 10

myNum = myNum - 1

counter = counter + 1

Loop

MsgBox "Il ciclo ha eseguito " & counter & " ripetizioni."

End Sub

 

Sub ChkLastUntil()

Dim counter, myNum

counter = 0

myNum = 1

Do

myNum = myNum + 1

counter = counter + 1

Loop Until myNum = 10

MsgBox "Il ciclo ha eseguito " & counter & " ripetizioni."

End Sub

 

 

Uscita da un'istruzione Do...Loop

Per uscire da una struttura Do...Loop, è possibile utilizzare l'istruzione Exit Do. Dato che l'uscita da tale struttura viene in genere eseguita solo in determinate situazioni, ad esempio per evitare la ripetizione infinita di un ciclo, l'istruzione Exit Do deve essere inclusa nel blocco di istruzioni True di un'istruzione If...Then...Else. Se la condizione è False, il ciclo viene eseguito normalmente.

Nell'esempio riportato di seguito, a myNum viene assegnato un valore in base al quale viene creato un ciclo infinito. L'istruzione If...Then...Else consente di verificare questa condizione, impedendo pertanto un'esecuzione all'infinito.

 

Sub ExitExample()

Dim counter, myNum

counter = 0

myNum = 9

Do Until myNum = 10

myNum = myNum - 1

counter = counter + 1

If myNum < 10 Then Exit Do

Loop

MsgBox "Il ciclo ha eseguito " & counter & " ripetizioni."

End Sub

Istruzione While...Wend

 

L'istruzione While...Wend deve essere utilizzata da utenti che ne conoscono la corretta applicazione. Dato che si tratta di un'istruzione poco flessibile, è consigliabile utilizzare invece l'istruzione Do...Loop.

Istruzione For...Next

L'istruzione For...Next consente di eseguire un blocco di istruzioni un numero specifico di volte. Nel caso di cicli, è necessario utilizzare una variabile contatore il cui valore viene aumentato o diminuito a ogni ripetizione del ciclo.

Nella routine riportata di seguito, ad esempio, la routine MyProc viene eseguita 50 volte. L'istruzione For specifica la variabile contatore x e il corrispondente valore iniziale e finale. L'istruzione Next consente di aumentare la variabile contatore con incrementi di una unità.

 

Sub DoMyProc50Times()

Dim x

For x = 1 To 50

MyProc

Next

End Sub

 

La parola chiave Step consente di aumentare o diminuire la variabile contatore del valore specificato. Nell'esempio riportato di seguito la variabile contatore viene incrementata di due unità a ogni ripetizione del ciclo. Al completamento del ciclo, il totale corrisponde alla somma di 2, 4, 6, 8 e 10.

Sub TwosTotal()

Dim j, total

For j = 2 To 10 Step 2

total = total + j

Next

MsgBox "Il totale è " & total

End Sub

Per diminuire la variabile contatore, è necessario utilizzare un valore Step negativo specificando un valore finale minore del valore iniziale. Nell'esempio riportato di seguito, la variabile contatore myNum viene diminuita di due unità a ogni ripetizione del ciclo. Al completamento del ciclo, il totale corrisponde alla somma di 16, 14, 12, 10, 8, 6, 4 e 2.

 

Sub NewTotal()

Dim myNum, total

For myNum = 16 To 2 Step -2

total = total + myNum

Next

MsgBox "Il totale è " & total

End Sub

 

Per uscire da un'istruzione For...Next prima che il valore del contatore abbia raggiunto il valore finale, è necessario utilizzare l'istruzione Exit For. Dato che l'uscita da un'istruzione For...Next viene in genere eseguita solo in determinate situazioni, ad esempio quando si verifica un errore, l'istruzione Exit For deve essere inclusa nel blocco di istruzioni True di un'istruzione If...Then...Else. Se la condizione è False, il ciclo viene eseguito normalmente.

Istruzione For Each...Next

L'istruzione For Each...Next è simile a For...Next, con la sola differenza che le istruzioni non vengono ripetute il numero di volte specificato, ma per ciascun elemento di un insieme di oggetti o per ciascun elemento di una matrice. Ciò risulta particolarmente utile quando non si conosce il numero di elementi di un insieme.

Nell'esempio di codice HTML riportato di seguito, il contenuto di un oggetto Dictionary viene utilizzato per inserire testo in varie caselle di testo.

<HTML>

<HEAD><TITLE>Forms and Elements</TITLE></HEAD>

<SCRIPT LANGUAGE="VBScript">

<!--

Sub cmdChange_OnClick

Dim d 'Crea una variabile

Set d = CreateObject("Scripting.Dictionary")

d.Add "0", "Atene" 'Aggiunge alcune chiavi ed elementi

d.Add "1", "Belgrado"

d.Add "2", "Cairo"

 

For Each I in d

Document.frmForm.Elements(I).Value = D.Item(I)

Next

End Sub

-->

</SCRIPT>

<BODY>

<CENTER>

<FORM NAME="frmForm"

 

<Input Type = "Text"><p>

<Input Type = "Text"><p>

<Input Type = "Text"><p>

<Input Type = "Text"><p>

<Input Type = "Button" NAME="cmdChange" VALUE="Fare clic qui"><p>

</FORM>

</CENTER>

</BODY>

</HTML>

 

Routine VBScript

 

Tipi di routine

In VBScript sono disponibili due tipi di routine, ovvero le routine Sub e le routine Function.

Routine Sub

Una routine Sub è una serie di istruzioni VBScript incluse tra le istruzioni Sub ed End Sub che eseguono azioni senza restituire alcun valore. In una routine Sub è possibile specificare argomenti, ovvero costanti, variabili o espressioni passate dalla routine che sta eseguendo una chiamata. Se non si specifica alcun argomento, nella corrispondente istruzione Sub è necessario includere parentesi vuote ().

Nella routine Sub riportata di seguito vengono utilizzate le due funzioni VBScript intrinseche, ovvero incorporate, MsgBox e InputBox, che consentono di richiedere informazioni all'utente. Viene quindi visualizzato il risultato di un calcolo basato sulle informazioni fornite ed eseguito in una routine Function creata in VBScript, come descritto nella sezione successiva.

 

Sub ConvertTemp()

temp = InputBox("Immettere la temperatura in gradi Fahrenheit.", 1)

MsgBox "La temperatura è pari a " & Celsius(temp) & " gradi C."

End Sub

 

 

Routine Function

 

Una routine Function è una serie di istruzioni VBScript incluse tra le istruzioni Function ed End Function. È simile a una routine Sub, ma a differenza di questa può restituire un valore. In una routine Function è possibile specificare argomenti, ovvero costanti, variabili o espressioni passate alla routine dalla routine chiamante. Se non si specifica alcun argomento, nella corrispondente istruzione Function è necessario includere parentesi vuote. Una routine Function restituisce un valore quando si assegna un valore al nome della routine in una o più istruzioni. Il tipo restituito di una routine Function è sempre Variant.

Nell'esempio riportato di seguito, la funzione Celsius consente di eseguire la conversione da Fahrenheit a Celsius. Quando la funzione viene richiamata nella routine Sub ConvertTemp, viene passata alla funzione una variabile contenente il valore dell'argomento. Il risultato del calcolo viene quindi restituito alla routine che ha eseguito la chiamata e visualizzato in una finestra di messaggio.

 

Sub ConvertTemp()

temp = InputBox("Immettere la temperatura in gradi Fahrenheit.", 1)

MsgBox "La temperatura è pari a " & Celsius(temp) & " gradi C."

End Sub

 

Function Celsius(fDegrees)

Celsius = (fDegrees - 32) * 5 / 9

End Function

 

 

Come includere e leggere dati dalle routine

 

I dati vengono passati alla routine tramite argomenti che fungono da segnaposto per i dati stessi. Agli argomenti è possibile assegnare un nome valido per le variabili. Quando si crea una routine utilizzando l'istruzione Sub o Function, è necessario far seguire il nome della routine da parentesi, all'interno delle quali vengono inseriti gli argomenti separati da una virgola. Nell'esempio seguente fDegrees è il segnaposto del valore da convertire passato alla funzione Celsius:

Function Celsius(fDegrees)

Celsius = (fDegrees - 32) * 5 / 9

End Function

 

Per ottenere dati da una routine, è necessario utilizzare routine Function che, a differenza delle routine Sub, possono restituire un valore.

Routine Sub e Function nel codice

Per utilizzare routine Function nel codice, è necessario includerle a destra delle assegnazioni di variabili oppure in un'espressione. Ad esempio:

Temp = Celsius(fDegrees)

or

MsgBox "La temperatura in gradi Celsius è pari a " & Celsius(fDegrees) & " gradi."

Per richiamare una routine Sub da un'altra routine, è sufficiente specificarne il nome insieme ai valori degli argomenti obbligatori, separati da una virgola. L'istruzione Call non è obbligatoria. Se viene utilizzata, è necessario racchiudere gli eventuali argomenti tra parentesi.

Nell'esempio seguente vengono eseguite due chiamate alla routine MyProc. Sebbene l'istruzione Call sia utilizzata nel codice di una sola chiamata, entrambe le chiamate eseguono la stessa operazione.

Call MyProc(primoarg, secondoarg)

MyProc primoarg, secondoarg

 

Nella chiamata in cui l'istruzione Call non è utilizzata, le parentesi sono state omesse.

Convenzioni di scrittura del codice VBscript

Convenzioni di scrittura del codice

Le convenzioni di scrittura del codice consentono di facilitare la scrittura del codice in Microsoft Visual Basic Scripting Edition. Tali convenzioni sono le seguenti:

·         Convezioni di denominazione per oggetti, variabili e routine

·         Convenzioni per l'aggiunta di commenti

·         Indicazioni generali per la formattazione e il rientro del testo

Lo scopo principale delle convenzioni di scrittura del codice è uniformare la struttura e lo stile di uno script o gruppo di script in modo che il codice risulti semplice da leggere e comprensibile a tutti. Grazie alla definizione di buone convenzioni è possibile ottenere codice sorgente preciso, leggibile e chiaro, in conformità con il codice di altri linguaggi e quanto più possibile intuitivo.

Convenzioni di denominazione delle costanti

Nelle versioni precedenti di VBScript non era disponibile alcun metodo di creazione di costanti definite dall'utente. Se utilizzate, le costanti venivano implementate come variabili e distinte dalle altre variabili con l'utilizzo dei caratteri maiuscoli. Le parole che componevano il nome venivano separate con un carattere di sottolineatura (_). Ad esempio:
USER_LIST_MAX
NEW_LINE
È ancora possibile utilizzare questo metodo per identificare le costanti, ma si consiglia di utilizzare uno schema di denominazione alternativo e l'istruzione Const per creare vere costanti. Questa convenzione consente di utilizzare un formato con caratteri maiuscoli e minuscoli in cui i nomi delle costanti sono preceduti dal prefisso "con", ad esempio:
conCostantePersonale

Convenzioni di denominazione delle variabili

Per motivi di leggibilità e uniformità, in VBScript i nomi delle variabili devono essere descrittivi e preceduti dai prefissi elencati nella tabella seguente.

Sottotipo

Prefisso

Esempio

Boolean

bln

blnFound

Byte

byt

bytRasterData

Date (Time)

dtm

dtmStart

Double

dbl

dblTolerance

Error

err

errOrderNum

Integer

int

intQuantity

Long

lng

lngDistance

Object

obj

objCurrent

Single

sng

sngAverage

String

str

strFirstName

Area di validità delle variabili

Nella tabella seguente sono elencate le aree di validità che è possibile associare alle variabili VBScript. È consigliabile scegliere sempre l'area di validità minima.

Area di validità

Posizione della dichiarazione della variabile

Visibilità

A livello di routine

Evento oppure routine Function o Sub

Nella routine in cui è dichiarata

A livello di script

Sezione HEAD di una pagina HTML, all'esterno di routine

In tutte le routine dello script

Prefissi per l'area di validità delle variabili

Con script di grandi dimensioni diventa particolarmente importante poter contraddistinguere l'area di validità delle variabili. A tale scopo è sufficiente aggiungere un prefisso di una lettera al prefisso del tipo di variabile in modo da evitare nomi eccessivamente lunghi.

Area di validità

Prefisso

Esempio

A livello di routine

Nessuno

dblVelocity

A livello di script

s

sblnCalcInProgress

Nomi di routine e variabili descrittivi

Il corpo del nome di variabili e routine deve descrivere nel modo più completo possibile la funzione della variabile o routine, nonché includere una combinazione di lettere maiuscole e minuscole. I nomi di routine devono inoltre iniziare con un verbo, ad esempio InitNameArray o CloseDialog.
Per termini utilizzati di frequente o particolarmente lunghi, è consigliabile utilizzare abbreviazioni standard, in modo da mantenere ridotta la lunghezza del nome. In generale, i nomi di variabili composti da più di 32 caratteri risultano di difficile lettura. Le abbreviazioni devono essere utilizzate in modo uniforme. Se in uno script o gruppo di script vengono, ad esempio, alternate le abbreviazioni Cnt e Count senza alcun criterio, è possibile creare confusione.

Convenzioni di denominazione degli oggetti

Nella tabella seguente sono elencate le convezioni di denominazione di vari oggetti utilizzati nella programmazione in VBScript.

Tipo di oggetto

Prefisso

Esempio

Pannello 3D

pnl

pnlGroup

Pulsante animato

ani

aniMailBox

Casella di controllo

chk

chkReadOnly

Casella combinata o di riepilogo a discesa

cbo

cboEnglish

Pulsante di comando

cmd

cmdExit

Finestra di dialogo comune

dlg

dlgFileOpen

Cornice

fra

fraLanguage

Barra di scorrimento orizzontale

hsb

hsbVolume

Immagine

img

imgIcon

Etichetta

lbl

lblHelpMessage

Linea

lin

linVertical

Casella di riepilogo

lst

lstPolicyCodes

Pulsante di selezione

spn

spnPages

Casella di testo

txt

txtLastName

Barra di scorrimento verticale

vsb

vsbRate

Dispositivo di scorrimento

sld

sldScale

Convenzioni per i commenti del codice

All'inizio delle routine è necessario includere un breve commento per descrivere il funzionamento della routine stessa. Tale commento non deve tuttavia includere informazioni dettagliate sulla modalità di implementazione. Tali informazioni, essendo soggette a modifiche, comporterebbero infatti un inutile lavoro di manutenzione o addirittura la presenza di commenti non corretti. La modalità di implementazione viene comunque descritta nel codice stesso e nei commenti inseriti sulla stessa riga delle istruzioni.
È necessario descrivere gli argomenti passati a routine la cui funzione non risulta evidente o inclusi in un determinato intervallo. All'inizio delle routine è inoltre necessario includere una descrizione dei valori restituiti da funzioni e altre variabili che vengono modificate dalla routine, soprattutto se le modifiche vengono apportate tramite argomenti di riferimento.

Nei commenti di intestazione delle routine è necessario includere le intestazioni di sezione indicate di seguito. Per alcuni esempi, vedere la sezione successiva "Formattazione del codice".

Intestazione di sezione

Contenuto del commento

Scopo

Operazioni eseguite dalla routine, non la modalità di esecuzione.

Presupposti

Elenco di variabili esterne, controlli e altri elementi il cui stato ha effetto sulla routine.

Effetti

Elenco dell'effetto della routine su variabili esterne, controlli e altri elementi.

Input

Descrizione degli argomenti con significato non evidente. Ciascun argomento deve essere incluso in una riga distinta insieme a un commento specifico sulla stessa riga.

Valori restituiti

Descrizione del valore restituito.

È importante tenere presente i seguenti punti:
Le dichiarazioni di variabili importanti devono includere un commento sulla stessa riga in cui viene descritto l'utilizzo della variabile dichiarata.
I nomi di variabili, controlli e routine devono essere sufficientemente descrittivi in modo che sia necessario aggiungere commenti sulla stessa riga solo per la descrizione di implementazioni complesse.
All'inizio degli script è consigliabile includere cenni preliminari che descrivino brevemente lo script e in cui siano elencati gli oggetti, le routine, gli algoritmi, le finestre di dialogo e altre dipendenze di sistema. A volte può risultare utile aggiungere pseudocodice che descrivi l'algoritmo.

Formattazione del codice

Lo scopo è quello di risparmiare spazio sullo schermo, ma allo stesso tempo applicare al codice una formattazione che ne rifletta in modo chiaro la struttura logica e i livelli di nidificazione. Di seguito sono indicati alcuni suggerimenti:
I blocchi nidificati standard devono rientrare di quattro spazi.
I commenti introduttivi di una procedura devono essere rientrati di uno spazio.
Le istruzioni di livello principale che seguono i commenti iniziali devono rientrare di quattro spazi, con ciascun blocco nidificato rientrato di altri quattro spazi. Ad esempio:

'*********************************************************
' Scopo: individua la prima occorrenza del nome utente
' specificato nella matrice UserList.
' Input: strUserList(): elenco dei nomi utente in cui eseguire la ricerca.
' strTargetUser: nome utente da cercare.
' Valori restituiti: indice della prima occorrenza
' di strTargetUser nella matrice strUserList.
' Se il nome utente specificato non viene individuato,
' verrà restituito -1.
'*********************************************************

Function intFindUser (strUserList(), strTargetUser)
Dim i ' Contatore di ciclo.
Dim blnFound ' Flag elemento trovato
intFindUser = -1
i = 0 ' Inizializza il contatore di cicli
Do While i <= Ubound(strUserList) and Not blnFound
If strUserList(i) = strTargetUser Then
blnFound = True ' Imposta il flag su True
intFindUser = i ' Imposta il valore restituito sul conteggio dei cicli
End If
i = i + 1 ' Incrementa il contatore di cicli
Loop
End Function

 

 

 

Semplice Pagina VBScript

Una semplice pagina

Microsoft® Internet Explorer consente di visualizzare la pagina generata dal codice HTML riportato di seguito. Quando si fa clic sul pulsante disponibile sulla pagina, viene eseguito VBScript.
<HTML>
<HEAD><TITLE>Una semplice pagina di esempio</TITLE>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Button1_OnClick
MsgBox "Mirabile visu."
End Sub
-->
</SCRIPT>
</HEAD>
<BODY>
<H3>Una semplice pagina di esempio</H3><HR>
<FORM><INPUT NAME="Button1" TYPE="BUTTON" VALUE="Fare clic qui"></FORM>
</BODY>
</HTML>

Verrà visualizzata una finestra di dialogo contenente una frase in latino che significa "Stupendo da guardare".
Al momento della lettura della pagina, Internet Explorer rileva i tag <SCRIPT>, individua la presenza di codice VBScript e salva il codice. Quando si fa clic sul pulsante, viene stabilita la connessione tra il pulsante e il codice e la routine viene eseguita.

La routine Sub racchiusa tra i tag <SCRIPT> è definita routine di eventi. Il nome della routine è composto da due parti separate da un carattere di sottolineatura, ovvero dal nome del pulsante Button1, che deriva dall'attributo NAME del tag <INPUT>, e dal nome dell'evento OnClick. Ad ogni clic sul pulsante, viene cercata ed eseguita la corrispondente routine di eventi Button1_OnClick.

Gli eventi disponibili per i controlli di form sono definiti in Modello di oggetti per la creazione di script nella documentazione di Internet Explorer.

Nelle pagine è inoltre possibile utilizzare combinazioni di controlli e routine. Nella pagina successiva VBScript e i form vengono illustrate alcune semplici interazioni tra i controlli.

Modalità alternative per l'associazione di codice a eventi

Per associare codice VBScript a eventi, è possibile procedere in due modi diversi. Tuttavia il metodo descritto sopra è probabilmente quello più semplice e il più utilizzato. Internet Explorer consente di aggiungere brevi sezioni di codice sulla stessa riga nel tag che definisce il controllo. Quando si fa clic sul pulsante, l'azione eseguita dal seguente tag <INPUT>, ad esempio, è equivalente all'azione eseguita dal codice dell'esempio precedente:
<INPUT NAME="Button1" TYPE="BUTTON"
VALUE="Fare clic qui" OnClick='MsgBox "Mirabile visu."'>
La stessa chiamata alla funzione è racchiusa tra virgolette semplici mentre la stringa della funzione MsgBox è racchiusa tra virgolette doppie. È possibile utilizzare più istruzioni a condizione che siano separate dai due punti (:).
È inoltre possibile scrivere un tag <SCRIPT> in modo che sia valido solo per un determinato evento di un controllo specifico:

<SCRIPT LANGUAGE="VBScript" EVENT="OnClick" FOR="Button1">
<!--
MsgBox "Mirabile visu."
-->
</SCRIPT>

In questo caso, dato che il tag <SCRIPT> specifica l'evento e il controllo, le istruzioni Sub e End Sub non vengono utilizzate.

VBScript e i form

Convalida semplice

È possibile utilizzare Visual Basic Scripting Edition per le operazioni di elaborazione di form che in genere è necessario eseguire in un server, nonché per le operazioni che non possono essere svolte nel server.
Di seguito è riportato un esempio di convalida semplice nel client. Il codice HTML genererà una casella di testo e un pulsante. Se per visualizzare le pagine generate dal codice si utilizza Microsoft® Internet Explorer, verrà visualizzata una piccola casella di testo con un pulsante.

<HTML>
<HEAD><TITLE>Convalida semplice</TITLE>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Submit_OnClick
Dim TheForm
Set TheForm = Document.ValidForm
If IsNumeric(TheForm.Text1.Value) Then
If TheForm.Text1.Value < 1 Or TheForm.Text1.Value > 10 Then
MsgBox "Immettere un numero compreso tra 1 e 10."
Else
MsgBox "Valore corretto."
End If
Else
MsgBox "Immettere un valore numerico."
End If
End Sub
-->
</SCRIPT>
</HEAD>
<BODY>
<H3>Convalida semplice</H3><HR>
<FORM NAME="ValidForm">
Immettere un valore compreso tra 1 e 10:
<INPUT NAME="Text1" TYPE="TEXT" SIZE="2">
<INPUT NAME="Submit" TYPE="BUTTON" VALUE="Invia">
</FORM>
</BODY>
</HTML>

L'unica differenza tra questo esempio e gli esempi riportati nella sezione Una semplice pagina VBScript è che la proprietà Value della casella di testo viene utilizzata per verificare il valore immesso. Per leggere la proprietà Value, è tuttavia necessario che nel codice venga specificato il riferimento al nome della casella di testo.
È comunque possibile scrivere il riferimento completo Document.ValidForm.Text1. Nel caso di più riferimenti a controlli di form, è tuttavia consigliabile procedere come indicato nell'esempio, ovvero dichiarare innanzitutto una variabile e assegnare quindi il form alla variabile TheForm tramite l'istruzione Set. In questo caso non è possibile utilizzare una normale istruzione di assegnazione quale Dim. L'istruzione Set consente infatti di mantenere il riferimento a un oggetto.

Utilizzo di valori numerici

Nell'esempio il valore viene verificato direttamente in base a un numero, ovvero viene verificato che la stringa inclusa nella casella di testo sia un numero tramite la funzione IsNumeric. Anche se in VBScript stringhe e numeri vengono convertiti automaticamente in modo adeguato, è consigliabile controllare sempre il sottotipo dei valori immessi dall'utente e utilizzare, se necessario, le funzioni di conversione. Quando si eseguono somme con i valori di caselle di testo, è inoltre necessario convertire i valori in numeri in modo esplicito. Il segno più (operatore +) rappresenta infatti sia l'addizione che il concatenamento di stringhe. Se, ad esempio, Text1 include "1" e Text2 include "2", il risultato ottenuto sarà il seguente:
A = Text1.Value + Text2.Value ' A è "12"
A = CDbl(Text1.Value) + Text2.Value ' A è 3

Convalida e restituzione di dati al server

Nell'esempio di convalida semplice viene utilizzato un normale controllo pulsante. Se venisse utilizzato un controllo Submit, i dati da controllare non sarebbero mai visualizzati, in quanto verrebbero inoltrati immediatamente al server. Se non si utilizza il controllo Submit, è possibile verificare i dati, che tuttavia non verranno inoltrati al server. Per poter eseguire questo ulteriore trasferimento, è necessario aggiungere la seguente riga di codice:
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Submit_OnClick
Dim TheForm
Set TheForm = Document.ValidForm
If IsNumeric(TheForm.Text1.Value) Then
If TheForm.Text1.Value < 1 Or TheForm.Text1.Value > 10 Then
MsgBox "Immettere un numero compreso tra 1 e 10."
Else
MsgBox "Valore corretto."
TheForm.Submit ' Dati inoltrati al server.
End If
Else
MsgBox "Immettere un valore numerico."
End If
End Sub
-->
</SCRIPT>
Per inoltrare i dati al server, nel codice viene richiamato il metodo Submit dell'oggetto form quando i dati sono corretti. Il server gestisce quindi i dati secondo la normale modalità, ma i dati vengono corretti prima di essere inoltrati al server. Per ulteriori informazioni sul metodo Submit e altri metodi, consultare la pagina Modello di oggetti per la creazione di script nella documentazione di Internet Explorer.
Oltre agli oggetti HTML <FORM> standard, Internet Explorer consente di sfruttare le caratteristiche dei controlli ActiveX™, precedentemente definiti controlli OLE, e degli oggetti Java™.

 

Utilizzo di VbScript con oggetti

Utilizzo di oggetti

Microsoft Visual Basic Scripting Edition e Microsoft® Internet Explorer gestiscono sia i controlli ActiveX™, precedentemente definiti controlli OLE, che gli oggetti Java™. Se si utilizza Microsoft Internet Explorer e sono stati installati i controlli disponibili nella Raccolta ActiveX™, è possibile visualizzare la pagina generata dal codice associato.
Per includere un oggetto, è necessario utilizzare il tag <OBJECT>, mentre per impostare i valori iniziali delle proprietà dell'oggetto, è necessario utilizzare il tag <PARAM>. L'utilizzo del tag <PARAM> è equivalente all'impostazione dei valori iniziali delle proprietà per un controllo di un form in Visual Basic. Nell'esempio seguente i tag <OBJECT> e <PARAM> consentono di aggiungere il controllo Label (etichetta) ActiveX a una pagina:

<OBJECT
classid="clsid:99B42120-6EC7-11CF-A6C7-00AA00A47DD2"
id=lblActiveLbl
width=250
height=250
align=left
hspace=20
vspace=0
>
<PARAM NAME="Angle" VALUE="90">
<PARAM NAME="Alignment" VALUE="4">
<PARAM NAME="BackStyle" VALUE="0">
<PARAM NAME="Caption" VALUE="Etichetta desiderata">
<PARAM NAME="FontName" VALUE="Verdana, Arial, Helvetica">
<PARAM NAME="FontSize" VALUE="20">
<PARAM NAME="FontBold" VALUE="1">
<PARAM NAME="FrColor" VALUE="0">
</OBJECT>

È possibile impostare proprietà e richiamare metodi esattamente come per i controlli nei form. Il codice seguente, ad esempio, include i controlli <FORM> che consentono di richiamare due proprietà del controllo Label:
<FORM NAME="LabelControls">
<INPUT TYPE="TEXT" NAME="txtNewText" SIZE=25>
<INPUT TYPE="BUTTON" NAME="cmdChangeIt" VALUE="Modifica testo">
<INPUT TYPE="BUTTON" NAME="cmdRotate" VALUE="Ruota etichetta">
</FORM>

Quando il form è stato definito, una routine di eventi del pulsante cmdChangeIt consente di modificare il testo dell'etichetta:
<SCRIPT LANGUAGE="VBScript">
<!--
Sub cmdChangeIt_onClick
Dim TheForm
Set TheForm = Document.LabelControls
lblActiveLbl.Caption = TheForm.txtNewText.Value
End Sub
-->
</SCRIPT>

Nel codice i riferimenti ai controlli e ai valori inclusi nei form vengono specificati esattamente come nell'esempio di Convalida semplice.
Nella Raccolta ActiveX sono disponibili diversi controlli ActiveX™ utilizzabili in Internet Explorer, nonché informazioni dettagliate su proprietà, metodi, eventi e identificatori di classe (CLSID) dei controlli nelle pagine di riferimento alla programmazione. Per ulteriori informazioni sul tag <OBJECT>, vedere la pagina Internet Explorer 4.0 Author's Guide and HTML Reference.

Nota Nelle versioni precedenti di Internet Explorer, gli attributi CLSID dovevano essere racchiusi tra parentesi graffe ({}), diversamente da quanto indicato nella specifica W3C. Nella versione corrente, l'utilizzo delle parentesi graffe genera un messaggio in cui si avvisa che nella pagina viene utilizzata una versione non aggiornata del tag <OBJECT>.