Esempio di istruzione di compilazione #Const

In questo esempio l'istruzione #Const viene utilizzata per dichiarare costanti di compilazione condizionale da utilizzare in blocchi #If...#Else...#End If.

#Const DebugVersion = 1	' Risulta True in un blocco #If.


Esempio di istruzione di compilazione #If...Then...#Else

In questo esempio viene fatto riferimento alle costanti di compilazione condizionale in un blocco #If...Then...#Else per determinare se compilare alcune istruzioni.

' Se Mac risulta True, esegue le istruzioni

' che seguono #If.

#If Mac Then

'. Inserire solo istruzioni per Mac.

'.

'.

' Se si tratta di un programma per Windows a 32 bit

' procedere invece come segue:

#ElseIf Win32 Then

'. Inserire solo istruzioni per Windows a 32 bit.

'.

'.

' Negli altri casi, procedere come segue:

#Else

'. Inserire qui istruzioni per altre piattaforme.

'.

'.

#End If


Istruzione di compilazione #Const

Utilizzata per definire costanti di compilazione condizionale per Visual Basic.

Sintassi

#Const nomecostante = espressione

La sintassi dell'istruzione di compilazione #Const è composta dalle seguenti parti:

Parte	Descrizione
nomecostante	Obbligatoria. Variant (String). Nome della costante specificato in base alle convenzioni di denominazione standard delle variabili.
espressione	Obbligatoria. Stringa di caratteri, altra costante di compilazione condizionale oppure qualsiasi combinazione comprendente qualsiasi operatore aritmetico o logico a eccezione di Is.
Osservazioni

Le costanti di compilazione condizionali sono sempre Private rispetto al modulo nel quale compaiono. L’istruzione #Const non consente di creare costanti di compilazione di tipo Public. Tali costanti possono essere create solo nell'interfaccia utente.

In espressione è possibile utilizzare soltanto costanti di compilazione condizionali e stringhe di caratteri. Se si utilizza una costante standard (definita con Const), o una costante non definita, verrà generato un errore. Le costanti definite utilizzando la parola chiave #Const possono essere invece utilizzate esclusivamente per la compilazione condizionale.

Le costanti di compilazione condizionale vengono sempre valutate a livello di modulo, indipendentemente dalla loro posizione nel codice.


Istruzione di compilazione #If ... Then ... #Else

Compila in modo condizionale blocchi selezionati di codice Visual Basic.

Sintassi

#If espressione Then

istruzioni

[#ElseIf espressione-n Then

[istruzionielseif]]

[#Else

[istruzionielse]]

#End If

La sintassi dell'istruzione #If...Then...#Else è composta dalle seguenti parti:

Parte	Descrizione
espressione	Obbligatoria. Qualsiasi espressione composta esclusivamente da una o più costanti di compilazione condizionale, stringhe di testo e operatori, che restituisca True o False.
istruzioni	Obbligatoria. Righe di codice di Visual Basic o istruzioni di compilazione che vengono valutate se l’espressione associata è True.
espressione-n	Facoltativa. Qualsiasi espressione composta esclusivamente da una o più costanti di compilazione condizionali, stringhe di testo e operatori, che restituisca True o False.
istruzionielseif	Facoltativa. Una o più righe di codice o istruzioni di compilazione che vengono valutate se espressione-n è True.
istruzionielse	Facoltativa. Una o più righe di codice o istruzioni di compilazione che vengono valutate se nessuna espressione o espressione-n precedente è True.
Osservazioni

Il funzionamento dell'istruzione #If...Then...#Else è analogo a quello dell'istruzione If...Then...Else, ma per le istruzioni #If, #Else, #ElseIf, e #End If, non esiste la forma a riga singola, ovvero nessun altro elemento di codice può apparire sulla stessa riga contenente una di queste istruzioni. La compilazione condizionale viene utilizzata in genere per la compilazione di uno stesso programma per più piattaforme. Questo tipo di compilazione può inoltre essere utilizzato per evitare la visualizzazione di codice di debug in un file eseguibile. Il codice escluso durante la compilazione condizionale viene omesso completamente dal file eseguibile finale e pertanto non influisce sulle dimensioni o sulle prestazioni.

La valutazione viene eseguita per tutte le espressioni, indipendentemente dal risultato. Per tale ragione, tutte le costanti utilizzate nelle espressioni devono essere definite, ovvero la valutazione di una costante non definita restituirà Empty.

Nota   L’istruzione Option Compare non ha effetto sulle espressioni contenute in istruzioni #If e #ElseIf. Le espressioni di un'istruzione di compilazione condizionale vengono sempre valutate con Option Compare Text.


Costanti di Visual Basic

In Visual Basic, Applications Edition le costanti vengono definite per semplificare la programmazione. Le costanti che seguono possono essere utilizzate in un punto qualsiasi del codice in sostituzione dei valori effettivi:

Costanti Date

Costanti CallType

Costanti degli attributi dei file

Costanti dei codici dei tasti

Costanti dei colori di sistema

Costanti dei colori

Costanti di calendario

Costanti di compilazione

Costanti di confronto

Costanti di formato di data

Costanti di input/output dei file

Costanti Form

Costanti Dir, GetAttr e SetAttr

Costanti DriveType

Costanti IMEStatus

Costanti MsgBox

Costanti QueryClose

Costanti Shell

Costanti SpecialFolder

Costanti StrConv

Costanti Tristate

Costanti varie

Costanti VarType

Costanti Visual Basic


Costanti QueryClose

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Costante	Valore	Descrizione
vbFormControlMenu	0	È stato scelto Chiudi dal menu di controllo del form.
vbFormCode	1	Istruzione Unload richiamata dal codice.
vbAppWindows	2	La sessione corrente del sistema operativo Microsoft Windows sta terminando.
vbAppTaskManager	3	Task Manager di Windows sta chiudendo l'applicazione.


Costanti di calendario

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Costante	Valore	Descrizione
vbCalGreg	0	Indica che viene utilizzato il calendario gregoriano.
vbCalHijri	1	Indica che viene utilizzato il calendario Hijri.


Costanti di compilazione

In Visual Basic, Applications Edition le costanti che possono essere utilizzate esclusivamente con #If...Then...#Else. Dal punto di vista funzionale queste costanti sono equivalenti a quelle definite con #If...Then...#Else, con la differenza che hanno un'area di validità globale, ovvero possono essere applicate ovunque in un progetto.

Nelle piattaforme a 16 bit le costanti di compilazione vengono definite come indicato di seguito:

Costante	Valore	Descrizione
Win16	True	Indica che l’ambiente di sviluppo è a 16 bit.
Win32	False	Indica che l’ambiente di sviluppo non è a 32 bit.
Nelle piattaforme a 32 bit le costanti di compilazione vengono definite come indicato di seguito:

Costante	Valore	Descrizione
Vba6	True	Indica che l’ambiente di sviluppo è Visual Basic, Applications Edition versione 6.0.
Vba6	False	Indica che l’ambiente di sviluppo non è Visual Basic, Applications Edition versione 6.0.
Win16	False	Indica che l’ambiente di sviluppo non è a 16 bit.
Win32	True	Indica che l’ambiente di sviluppo è a 32 bit.
Mac	False	Indica che l’ambiente di sviluppo non è Macintosh.
Win16	False	Indica che l’ambiente di sviluppo non è a 16-bit.
Win32	False	Indica che l’ambiente di sviluppo è a 32-bit Windows.
Mac	True	Indica che l’ambiente di sviluppo è Macintosh.
Nota    Queste costanti sono incorporate in Visual Basic e non è pertanto possibile utilizzarne il nome per definire costanti personalizzate.


Costanti Date

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Valori dell'argomento

I possibili valori dell'argomento firstdayofweek sono:

Costante	Valore	Descrizione
vbUseSystem	0	Utilizza l'impostazione NLS API.
vbSunday	1	Domenica (impostazione predefinita)
vbMonday	2	Lunedì
vbTuesday	3	Martedì
vbWednesday	4	Mercoledì
vbThursday	5	Giovedì
vbFriday	6	Venerdì
vbSaturday	7	Sabato
I possibili valori dell'argomento firstdayofyear sono:

Costante	Valore	Descrizione
vbUseSystem	0	Utilizza l'impostazione NLS API.
VbFirstJan1	1	Inizia dalla settimana in cui cade l'1 gennaio (impostazione predefinita).
VbUseSystem DayOfWeek	0	Utilizza il giorno della settimana specificato nelle impostazioni del sistema come primo giorno della settimana.
vbFirstFourDays	2	Inizia dalla prima settimana che ha almeno quattro giorni nel nuovo anno.
vbFirstFullWeek	3	Inizia dalla prima settimana completa dell'anno.
Valori restituiti

Costante	Valore	Descrizione
vbSunday	1	Domenica
vbMonday	2	Lunedì
vbTuesday	3	Martedì
vbWednesday	4	Mercoledì
vbThursday	5	Giovedì
vbFriday	6	Venerdì
vbSaturday	7	Sabato


Costanti Dir, GetAttr e SetAttr

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Costante	Valore	Descrizione
vbNormal	0	Normale (impostazione predefinita per Dir e SetAttr)
vbReadOnly	1	Sola lettura
vbHidden	2	Nascosto
vbSystem	4	File di sistema
vbVolume	8	Etichetta di volume
vbDirectory	16	Directory o cartella
vbArchive	32	Il file è stato modificato dall'ultimo backup
vbAlias	64	In ambiente Macintosh, l'identificatore è un alias.
In Macintosh, sono disponibili solo VbNormal, vbReadOnly, vbHidden e vbAlias.


Costanti IMEStatus

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi.

Le possibili costanti per le impostazioni internazionali giapponesi sono:

Costante	Valore	Descrizione
vbIMEModeNoControl	0	IME non gestito (predefinita)
vbIMEModeOn	1	IME attivo
vbIMEModeOff	2	IME non attivo
vbIMEModeDisable	3	IME disattivato
vbIMEModeHiragana	4	Modalità Hiragana a tutta larghezza
vbIMEModeKatakana	5	Modalità Katakana a tutta larghezza
vbIMEModeKatakanaHalf	6	Modalità Katakana a metà larghezza
vbIMEModeAlphaFull	7	Modalità alfanumerica a tutta larghezza
vbIMEModeAlpha	8	Modalità alfanumerica a metà larghezza
Le possibili costanti per le impostazioni internazionali coreane sono:

Costante	Valore	Descrizione
vbIMEModeNoControl	0	IME non gestito (predefinita)
vbIMEModeAlphaFull	7	Modalità alfanumerica a tutta larghezza
vbIMEModeAlpha	8	Modalità alfanumerica a metà larghezza
vbIMEModeHangulFull	9	Modalità Hangul a tutta larghezza
vbIMEModeHangul	10	Modalità Hangul a metà larghezza
Le possibili costanti per le impostazioni internazionali cinesi sono:

Costante	Valore	Descrizione
vbIMEModeNoControl	0	IME non gestito (predefinita)
vbIMEModeOn	1	IME attivo
vbIMEModeOff	2	IME non attivo


Costanti di confronto

Le seguenti costanti sono definite nella libreria dei tipi di Visual Basic, Applications Edition e possono essere utilizzate in un punto qualsiasi del codice in sostituzione dei valori effettivi:

Costante	Valore	Descrizione
vbUseCompareOption	-1	Esegue un confronto utilizzando le impostazioni dell'istruzione Option Compare.
vbBinaryCompare	0	Esegue un confronto binario
vbTextCompare	1	Esegue un confronto testuale
vbDatabaseCompare	2	In Microsoft Access (solo Windows), esegue un confronto in base alle informazioni incluse nel database.


Costanti varie

Le seguenti costanti sono definite nella libreria dei tipi di Visual Basic, Applications Edition e possono essere utilizzate in un punto qualsiasi del codice in sostituzione dei valori effettivi:

Costante	Equivalente	Descrizione
vbCrLf	Chr(13) + Chr(10)	Combinazione di ritorno a capo/avanzamento riga
vbCr	Chr(13)	Carattere di ritorno a capo
vbLf	Chr(10)	Carattere di avanzamento riga
vbNewLine	Chr(13) + Chr(10) o, in Macintosh, Chr(13)	Carattere di nuova riga specifico della piattaforma, a seconda del carattere appropriato per la piattaforma corrente
vbNullChar	Chr(0)	Carattere con valore 0
vbNullString	Stringa con valore 0	Non equivale a una stringa di lunghezza zero (""); utilizzata per le chiamate a routine esterne
vbObjectError	-2147221504	I numeri di errore definiti dall'utente devono essere maggiori di questo valore. Ad esempio: Err.Raise Number = vbObjectError + 1000
vbTab	Chr(9)	Carattere di tabulazione
vbBack	Chr(8)	Carattere backspace
vbFormFeed	Chr(12)	Non utilizzata in Microsoft Windows né in Macintosh
vbVerticalTab	Chr(11)	Non utilizzata in Microsoft Windows né in Macintosh


Costanti MsgBox

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Argomenti MsgBox

Costante	Valore	Descrizione
vbOKOnly	0	Solo pulsante OK (impostazione predefinita)
vbOKCancel	1	Pulsanti OK e Annulla
vbAbortRetryIgnore	2	Pulsanti Termina, Riprova e Ignora
vbYesNoCancel	3	Pulsanti Sì, No e Annulla
vbYesNo	4	Pulsanti Sì e No
vbRetryCancel	5	Pulsanti Riprova e Annulla
vbCritical	16	Messaggio critico
vbQuestion	32	Richiesta di avviso
vbExclamation	48	Messaggio di avviso
vbInformation	64	Messaggio di informazione
vbDefaultButton1	0	Il primo pulsante è il predefinito (impostazione predefinita)
vbDefaultButton2	256	Il secondo pulsante è il predefinito
vbDefaultButton3	512	Il terzo pulsante è il predefinito
vbDefaultButton4	768	Il quarto pulsante è il predefinito
vbApplicationModal	0	Finestra di messaggio a scelta obbligatoria nell'applicazione (impostazione predefinita)
vbSystemModal	4096	Finestra di messaggio a scelta obbligatoria nel sistema
vbMsgBoxHelpButton	16384	Inserisce un pulsante ? nella finestra di messaggio
VbMsgBoxSetForeground	65536	Imposta la finestra di messaggio come quella in primo piano
vbMsgBoxRight	524288	Testo allineato a destra
vbMsgBoxRtlReading	1048576	Imposta la visualizzazione del testo da destra a sinistra per i sistemi Ebraico e Arabo
Valori restituiti da MsgBox

Costante	Valore	Descrizione
vbOK	1	Pulsante OK premuto
vbCancel	2	Pulsante Annulla premuto
vbAbort	3	Pulsante Termina premuto
vbRetry	4	Pulsante Riprova premuto
vbIgnore	5	Pulsante Ignora premuto
vbYes	6	Pulsante Sì premuto
vbNo	7	Pulsante No premuto


Costanti Shell

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Costante	Valore	Descrizione
vbHide	0	La finestra è nascosta e l'attivazione viene passata alla finestra nascosta.
vbNormalFocus	1	La finestra è attivata e vengono ripristinate la dimensione e la posizione originali.
vbMinimizedFocus	2	La finestra è ridotta a icona e attivata.
vbMaximizedFocus	3	La finestra è ingrandita e attivata.
vbNormalNoFocus	4	Vengono ripristinate le dimensioni e posizione precedenti della finestra. La finestra attiva resta attiva.
vbMinimizedNoFocus	6	La finestra è ridotta a icona. La finestra attiva resta attiva.
In Macintosh, vbNormalFocus, vbMinimizedFocus e vbMaximizedFocus attivano l'applicazione in primo piano, mentre vbHide, vbNoFocus, vbMinimizedFocus la attivano in background.


Costanti StrConv

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Costante	Valore	Descrizione
vbUpperCase	1	Rende maiuscola la stringa.
vbLowerCase	2	Rende minuscola la stringa.
vbProperCase	3	Rende maiuscola la prima lettera di ogni parola della stringa.
vbWide	4	Converte i caratteri stretti (a singolo byte) della stringa in caratteri larghi (a doppio byte). Valida per le impostazioni internazionali orientali.
vbNarrow	8	Converte i caratteri larghi (a doppio byte) in caratteri stretti (a singolo byte). Valida per le impostazioni internazionali orientali.
vbKatakana	16	Converte i caratteri Hiragana della stringa in caratteri Katakana. Valida solo per il Giappone.
vbHiragana	32	Converte i caratteri Katakana della stringa in caratteri Hiragana. Valida solo per il Giappone.
vbUnicode	64	Converte la stringa in Unicode utilizzando la tabella codici predefinita del sistema. Non è disponibile in Macintosh.
vbFromUnicode	128	Converte la stringa da Unicode utilizzando la tabella codici predefinita del sistema. Non è disponibile in Macintosh.


Costanti VarType

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Costante	Valore	Descrizione
vbEmpty	0	Non inizializzata (impostazione predefinita)
vbNull	1	Non contiene dati validi
vbInteger	2	Integer
vbLong	3	Intero lungo
vbSingle	4	Numero a virgola mobile a precisione singola
vbDouble	5	Numero a virgola mobile a precisione doppia
vbCurrency	6	Currency
vbDate	7	Date
vbString	8	String
vbObject	9	Oggetto
vbError	10	Errore
vbBoolean	11	Boolean
vbVariant	12	Variant (utilizzata solo per matrici di variabili Variant)
vbDataObject	13	Oggetto di accesso ai dati
vbDecimal	14	Decimal
vbByte	17	Byte
vbUserDefinedType	36	Variant che include tipi definiti dall'utente
vbArray	8192	Matrice


Costanti dei colori

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Costante	Valore	Descrizione
vbBlack	0x0	Nero
vbRed	0xFF	Rosso
vbGreen	0xFF00	Verde
vbYellow	0xFFFF	Giallo
vbBlue	0xFF0000	Blu
vbMagenta	0xFF00FF	Fucsia
vbCyan	0xFFFF00	Azzurro
vbWhite	0xFFFFFF	Bianco


Costanti dei codici dei tasti

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Costante	Valore	Descrizione
vbKeyLButton	0x1	Pulsante sinistro del mouse
vbKeyRButton	0x2	Pulsante destro del mouse
vbKeyCancel	0x3	Tasto ANNULLA
vbKeyMButton	0x4	Pulsante centrale del mouse
vbKeyBack	0x8	Tasto BACKSPACE
vbKeyTab	0x9	Tasto TAB
vbKeyClear	0xC	Tasto CANCELLA
vbKeyReturn	0xD	Tasto INVIO
vbKeyShift	0x10	Tasto MAIUSC
vbKeyControl	0x11	Tasto CTRL
vbKeyMenu	0x12	Tasto MENU
vbKeyPause	0x13	Tasto PAUSA
vbKeyCapital	0x14	Tasto BLOC MAIUSC
vbKeyEscape	0x1B	Tasto ESC
vbKeySpace	0x20	Tasto BARRA SPAZIATRICE
vbKeyPageUp	0x21	Tasto PGSU
vbKeyPageDown	0x22	Tasto PGGIÙ
vbKeyEnd	0x23	Tasto FINE
vbKeyHome	0x24	Tasto HOME
vbKeyLeft	0x25	Tasto FRECCIA SINISTRA
vbKeyUp	0x26	Tasto FRECCIA SU
vbKeyRight	0x27	Tasto FRECCIA DESTRA
vbKeyDown	0x28	Tasto FRECCIA GIÙ
vbKeySelect	0x29	Tasto SELEZIONA
vbKeyPrint	0x2A	Tasto STAMP
vbKeyExecute	0x2B	Tasto ESEGUI
vbKeySnapshot	0x2C	Tasto SNAPSHOT
vbKeyInsert	0x2D	Tasto INS
vbKeyDelete	0x2E	Tasto CANC
vbKeyHelp	0x2F	Tasto GUIDA
vbKeyNumlock	0x90	Tasto BLOC NUM
I tasti da A a Z sono uguali ai codici equivalenti ASCII A – Z:

Costante	Valore	Descrizione
vbKeyA	65	Tasto A
vbKeyB	66	Tasto B
vbKeyC	67	Tasto C
vbKeyD	68	Tasto D
vbKeyE	69	Tasto E
vbKeyF	70	Tasto F
vbKeyG	71	Tasto G
vbKeyH	72	Tasto H
vbKeyI	73	Tasto I
vbKeyJ	74	Tasto J
vbKeyK	75	Tasto K
vbKeyL	76	Tasto L
vbKeyM	77	Tasto M
vbKeyN	78	Tasto N
vbKeyO	79	Tasto O
vbKeyP	80	Tasto P
vbKeyQ	81	Tasto Q
vbKeyR	82	Tasto R
vbKeyS	83	Tasto S
vbKeyT	84	Tasto T
vbKeyU	85	Tasto U
vbKeyV	86	Tasto V
vbKeyW	87	Tasto W
vbKeyX	88	Tasto X
vbKeyY	89	Tasto Y
vbKeyZ	90	Tasto Z
I tasti da 0 a 9 sono uguali ai codici equivalenti ASCII 0 – 9:

Costante	Valore	Descrizione
vbKey0	48	Tasto 0
vbKey1	49	Tasto 1
vbKey2	50	Tasto 2
vbKey3	51	Tasto 3
vbKey4	52	Tasto 4
vbKey5	53	Tasto 5
vbKey6	54	Tasto 6
vbKey7	55	Tasto 7
vbKey8	56	Tasto 8
vbKey9	57	Tasto 9
Le seguenti costanti rappresentano i tasti sul tastierino numerico:

Costante	Valore	Descrizione
vbKeyNumpad0	0x60	Tasto 0
vbKeyNumpad1	0x61	Tasto 1
vbKeyNumpad2	0x62	Tasto 2
vbKeyNumpad3	0x63	Tasto 3
vbKeyNumpad4	0x64	Tasto 4
vbKeyNumpad5	0x65	Tasto 5
vbKeyNumpad6	0x66	Tasto 6
vbKeyNumpad7	0x67	Tasto 7
vbKeyNumpad8	0x68	Tasto 8
vbKeyNumpad9	0x69	Tasto 9
vbKeyMultiply	0x6A	Tasto SEGNO DI MOLTIPLICAZIONE (*)
vbKeyAdd	0x6B	Tasto SEGNO PIÙ (+)
vbKeySeparator	0x6C	Tasto INVIO
vbKeySubtract	0x6D	Tasto SEGNO MENO (–)
vbKeyDecimal	0x6E	Tasto SEPARATORE DECIMALE (.)
vbKeyDivide	0x6F	Tasto SEGNO DI DIVISIONE (/)
Le seguenti costanti rappresentano tasti funzione:

Costante	Valore	Descrizione
vbKeyF1	0x70	Tasto F1
vbKeyF2	0x71	Tasto F2
vbKeyF3	0x72	Tasto F3
vbKeyF4	0x73	Tasto F4
vbKeyF5	0x74	Tasto F5
vbKeyF6	0x75	Tasto F6
vbKeyF7	0x76	Tasto F7
vbKeyF8	0x77	Tasto F8
vbKeyF9	0x78	Tasto F9
vbKeyF10	0x79	Tasto F10
vbKeyF11	0x7A	Tasto F11
vbKeyF12	0x7B	Tasto F12
vbKeyF13	0x7C	Tasto F13
vbKeyF14	0x7D	Tasto F14
vbKeyF15	0x7E	Tasto F15
vbKeyF16	0x7F	Tasto F16


Costanti dei colori di sistema

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Costante	Valore	Descrizione
vbScrollBars	0x80000000	Colore della barra di scorrimento
vbDesktop	0x80000001	Colore del desktop
vbActiveTitleBar	0x80000002	Colore della barra del titolo della finestra attiva
vbInactiveTitleBar	0x80000003	Colore della barra del titolo della finestra inattiva
vbMenuBar	0x80000004	Colore di sfondo dei menu
vbWindowBackground	0x80000005	Colore di sfondo delle finestre
vbWindowFrame	0x80000006	Colore della cornice delle finestre
vbMenuText	0x80000007	Colore del testo nei menu
vbWindowText	0x80000008	Colore del testo nelle finestre
vbTitleBarText	0x80000009	Colore del testo nelle didascalie, nella casella di ridimensionamento e nella freccia di scorrimento
vbActiveBorder	0x8000000A	Colore del bordo della finestra attiva
vbInactiveBorder	0x8000000B	Colore del bordo della finestra inattiva
vbApplicationWorkspace	0x8000000C	Colore di sfondo delle applicazioni MDI (interfaccia a documenti multipli)
vbHighlight	0x8000000D	Colore di sfondo degli elementi selezionati in un controllo
vbHighlightText	0x8000000E	Colore del testo degli elementi selezionati in un controllo
vbButtonFace	0x8000000F	Colore dell'ombreggiatura della parte frontale dei pulsanti di comando
vbButtonShadow	0x80000010	Colore dell'ombreggiatura del bordo dei pulsanti di comando
vbGrayText	0x80000011	Testo grigio (disattivato)
vbButtonText	0x80000012	Colore del testo dei pulsanti di comando
vbInactiveCaptionText	0x80000013	Colore del testo di didascalie inattive
vb3DHighlight	0x80000014	Colore di evidenziazione per gli elementi di visualizzazione 3-D
vb3DDKShadow	0x80000015	Colore di ombreggiatura più scuro per gli elementi di visualizzazione 3-D
vb3DLight	0x80000016	Il penultimo colore 3-D più chiaro dopo vb3DHighlight
vbInfoText	0x80000017	Colore del testo delle descrizioni comandi
vbInfoBackground	0x80000018	Colore di sfondo delle descrizioni comandi


Costanti CallType

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Costante	Valore	Decrizione
vbMethod	1	Indica che è stato richiamato un metodo.
vbGet	2	Indica una routine Property Get.
vbLet	4	Indica una routine Property Let.
vbSet	8	Indica una routine Property Set.


Costanti Form

Le seguenti costanti possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi:

Costante	Valore	Decrizione
vbModeless	0	UserForm è non a scelta obbligatoria.
vbModal	1	UserForm è a scelta obbligatoria (impostazione predefinita).


Esempio di istruzione Call

In questo esempio l'istruzione Call viene utilizzata per trasferire il controllo ad una routine Sub, ad una funzione intrinseca e ad una routine DLL. Le routine DLL non vengono utilizzate in Macintosh.

' Chiama una routine Sub.

Call PrintToDebugWindow("Salve")

' L'istruzione sopra indicata trasferisce il controllo

' alla seguente routine Sub.

Sub PrintToDebugWindow(AnyString)

Debug.Print AnyString	' Scrive nella finestra Immediata .

End Sub

' Chiama una funzione intrinseca. Il valore restituito

' dalla funzione viene eliminato.

Call Shell(AppName, 1)	' AppName contiene il percorso

' dell'eseguibile.

' Chiama una routine DLL di Microsoft Windows.

' L'istruzione Declare deve essere Private in un modulo

' di classe ma non in un modulo standard.

Private Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

Sub CallMyDll()

Call MessageBeep(0)	' Chiama una routine DLL di Windows.

MessageBeep 0	' Chiama nuovamente senza la parola chiave Call.

End Sub


Esempio di funzione Choose

In questo esempio la funzione Choose viene utilizzata per visualizzare un nome in risposta ad un indice passato alla routine tramite il parametro Ind.

Function GetChoice(Ind As Integer)

GetChoice = Choose(Ind, "Espresso", "Pegasus", "Facchini")

End Function


Esempio di funzione DoEvents

In questo esempio la funzione DoEvents viene utilizzata per trasferire il controllo dell'esecuzione al sistema operativo ogni 1000 iterazioni del ciclo. DoEvents restituisce il numero di form aperti in Visual Basic, ma solo se l'applicazione host è Visual Basic.

' Crea una variabile per contenere il numero di form di

' Visual Basic caricati e visibili.

Dim I, OpenForms

For I = 1 To 150000	' Inizio ciclo.

If I Mod 1000 = 0 Then	' Se il ciclo è stato

' ripetuto 1000 volte.

OpenForms = DoEvents	' Trasferimento al sistema operativo.

End If

Next I	' Incrementa il contatore di ciclo.


Esempio di istruzione Do...Loop

In questo esempio vengono illustrati alcuni utilizzi dell'istruzione Do...Loop. L'istruzione Do...Loop interna si ripete 10 volte, imposta il valore del flag su False ed esce grazie all'istruzione Exit Do. Il ciclo esterno si conclude immediatamente dopo aver eseguito il controllo del valore del flag.

Dim Check, Counter

Check = True: Counter = 0	' Inizializzazione delle variabili.

Do	' Ciclo esterno.

Do While Counter < 20	' Ciclo interno.

Counter = Counter + 1	' Incrementa il contatore.

If Counter = 10 Then	' Se la condizione è True.

Check = False	' Imposta il valore del flag su False.

Exit Do	' Esce dal ciclo interno.

End If

Loop

Loop Until Check = False	' Esce immediatamente dal ciclo esterno.


Esempio di istruzione End

In questo esempio l'istruzione End viene utilizzata per terminare l'esecuzione del codice se l'utente immette una password non valida.

Sub Form_Load

Dim Password, Pword

PassWord = "Entrata"

Pword = InputBox("Digitare la password")

If Pword <> PassWord Then

MsgBox "Password non valida"

End

End If

End Sub


Esempio di istruzione Exit

In questo esempio l'istruzione Exit viene utilizzata per uscire da un ciclo For...Next, da una routine Do...Loop e da una routine Sub.

Sub ExitStatementDemo()

Dim I, MyNum

Do	' Imposta un ciclo infinito.

For I = 1 To 1000	' Ripete 1000 volte.

MyNum = Int(Rnd * 1000)	' Genera numeri casuali.

Select Case MyNum	' Valuta il numero casuale.

Case 7: Exit For	' Se 7, esce da For...Next.

Case 29: Exit Do	' Se 29, esce da Do...Loop.

Case 54: Exit Sub	' Se 54, esce da routine Sub.

End Select

Next I

Loop

End Sub


Esempio di istruzione For Each...Next

In questo esempio l'istruzione For Each...Next viene utilizzata per eseguire una ricerca nella proprietà Text di tutti gli elementi di un insieme e individuare la presenza della stringa "Salve". Nell'esempio, MyObject è un oggetto di testo ed è un elemento dell'insieme di dati MyCollection. Sono entrambi nomi generici utilizzati unicamente a titolo esemplificativo.

Dim Found, MyObject, MyCollection

Found = False	' Inizializza la variabile.

For Each MyObject In MyCollection	' Esegue un'iterazione in ogni elemento.

If MyObject.Text = "Salve" Then	' Se Text è uguale a "Salve".

Found = True	' Imposta Found su True.

Exit For	' Esce dal ciclo.

End If

Next


Esempio di istruzione For...Next

In questo esempio l'istruzione For...Next viene utilizzata per creare una stringa che contiene 10 istanze dei numeri da 0 a 9. Le stringhe verranno separate da uno spazio. Il ciclo esterno utilizza una variabile di contatore di ciclo che viene ridotta ad ogni ciclo.

Dim Words, Chars, MyString

For Words = 10 To 1 Step -1 	' Imposta 10 ripetizioni.

For Chars = 0 To 9	' Imposta 10 ripetizioni.

MyString = MyString & Chars	' Aggiunge il numero alla stringa.

Next Chars	' Incrementa contatore

MyString = MyString & " "	' Aggiunge uno spazio.

Next Words


Esempio di istruzione GoSub...Return

In questo esempio l'istruzione GoSub viene utilizzata per richiamare una subroutine all'interno di una routine Sub. L'istruzione Return consente di riavviare l'esecuzione dall'istruzione immediatamente successiva all'istruzione GoSub. L'istruzione Exit Sub viene utilizzata per evitare che il controllo venga inavvertitamente trasferito alla subroutine.

Sub GosubDemo()

Dim Num

' Richiede un numero all'utente.

Num = InputBox("Immettere un numero positivo da dividere per 2.")

' La routine viene utilizzata solo se l'utente

' immette un numero positivo.

If Num > 0 Then GoSub MyRoutine

Debug.Print Num

Exit Sub	' Usa Exit per evitare un errore.

MyRoutine:

Num = Num/2	' Esegue la divisione.

Return	' Restituisce il controllo all'istruzione.

End Sub	' successiva all'istruzione GoSub.


Esempio di istruzione GoTo

In questo esempio l'istruzione GoTo viene utilizzata per passare alle etichette di riga incluse in una routine.

Sub GotoStatementDemo()

Dim Number, MyString

Number = 1 	' Inizializza la variabile.

' Valuta Number e passa all'etichetta corretta.

If Number = 1 Then GoTo Line1 Else GoTo Line2

Line1:

MyString = "Number uguale a 1"

GoTo LastLine	' Va a LastLine.

Line2:

' L'istruzione seguente non viene mai eseguita.

MyString = "Number uguale a 2"

LastLine:

Debug.Print MyString	' Scrive "Number uguale a 1"

' nella finestra Immediata.

End Sub


Esempio di istruzione If...Then...Else

In questo esempio vengono illustrati alcuni utilizzi della sintassi a blocco e della sintassi a riga singola dell'istruzione If...Then...Else. Viene inoltre illustrato l'utilizzo dell'istruzione If TypeOf...Then...Else.

Dim Number, Digits, MyString

Number = 53	' Inizializza la variabile.

If Number < 10 Then

Digits = 1

ElseIf Number < 100 Then

' Se la valutazione della condizione dà come risultato

' True, viene eseguita l'istruzione successiva.

Digits = 2

Else

Digits = 3

End If

' Assegna un valore utilizzando la sintassi a

' riga singola.

If Digits = 1 Then MyString = "Uno" Else MyString = "Maggiore di uno"

In questo esempio la struttura If TypeOf viene utilizzata per determinare se il controllo passato in una routine è una casella di testo.

Sub ControlProcessor(MyControl As Control)

If TypeOf MyControl Is CommandButton Then

Debug.Print "È stato passato un controllo " & TypeName(MyControl)

ElseIf TypeOf MyControl Is CheckBox Then

Debug.Print "È stato passato un controllo " & TypeName(MyControl)

ElseIf TypeOf MyControl Is TextBox Then

Debug.Print "È stato passato un controllo " & TypeName(MyControl)

End If

End Sub


Esempio di funzione IIf

In questo esempio la funzione IIf viene utilizzata per valutare il parametro TestMe della routine CheckIt e restituisce "Superiore" se il valore è superiore a 1000, "Inferiore" in caso contrario.

Function CheckIt (TestMe As Integer)

CheckIt = IIf(TestMe > 1000, "Superiore", "Inferiore")

End Function


Esempio di istruzioni On...GoSub, On...GoTo

In questo esempio le istruzioni On...GoSub e On...GoTo vengono utilizzate per passare rispettivamente a subroutine e a etichette di riga.

Sub OnGosubGotoDemo()

Dim Number, MyString

Number = 2	' Inizializza la variabile.

' Passa a Sub2.

On Number GoSub Sub1, Sub2	' L'esecuzione riprende

' dopo On...GoSub.

On Number GoTo Line1, Line2	' Passa a Line2.

' L'esecuzione non riprende dopo On...GoTo.

Exit Sub

Sub1:

MyString = "In Sub1" : Return

Sub2:

MyString = "In Sub2" : Return

Line1:

MyString = "In Line1"

Line2:

MyString = "In Line2"

End Sub


Esempio di funzione Partition

In questo esempio si presuppone che sia disponibile una tabella Ordini che include il campo Trasporto. Viene creata una query di selezione che calcola il numero di ordini per i quali il costo del trasporto rientra in diversi intervalli. La funzione Partition viene innanzitutto utilizzata per determinare tali intervalli e quindi la funzione SQL Count viene utilizzata per contare il numero di ordini in ciascun intervallo. In questo esempio gli argomenti della funzione Partition sono start = 0, stop = 500, interval = 50. Il primo intervallo sarà quindi 0,49 e così via fino a 500.

SELECT DISTINCTROW Partition([trasporto],0, 500, 50) AS Range,

Count(Ordini.Trasporto) AS Count

FROM Ordini

GROUP BY Partition([trasporto],0,500,50);


Esempio di istruzione Select Case

In questo esempio l'istruzione Select Case viene utilizzata per valutare il valore di una variabile. La seconda proposizione Case contiene il valore della variabile in corso di valutazione e quindi viene eseguita solo l'istruzione associata.

Dim Number

Number = 8	' Inizializza la variabile.

Select Case Number	' Valuta Number.

Case 1 To 5	' Number tra 1 e 5, compresi.

Debug.Print "Tra 1 e 5"

' Questa è l'unica proposizione Case la cui valutazione

' dà come risultato True.

Case 6, 7, 8	' Number tra 6 e 8.

Debug.Print "Tra 6 e 8"

Case 9 To 10	' Number è 9 o 10.

Debug.Print "Maggiore di 8"

Case Else	' Altri valori.

Debug.Print "Non compreso tra 1 e 10"

End Select


Esempio di funzione Shell

In questo esempio la funzione Shell viene utilizzata per eseguire un'applicazione specificata dall'utente. In MacIntosh, il nome dell'unità predefinita è "HD" e le parti del percorso sono separate da due punti anzichè da barre rovesciate. In modo analogo, è necessario specificare le cartelle Macintosh anziché \Windows.

' Specificando 1 come secondo argomento l'applicazione

' viene avviata normalmente e riceve lo stato attivo.

Dim RetVal

RetVal = Shell("C:\WINDOWS\CALC.EXE", 1)	' Esegue la Calcolatrice.


Esempio di istruzione Stop

In questo esempio l'istruzione Stop viene utilizzata per sospendere l'esecuzione per ogni iterazione del ciclo For...Next.

Dim I

For I = 1 To 10	' Inizia il ciclo For...Next.

Debug.Print I	' Scrive I nella finestra Immediata.

Stop	' Interrompe ogni volta.

Next I


Esempio di funzione Switch

In questo esempio la funzione Switch viene utilizzata per restituire il nome della lingua corrispondente a ciascun nome di città.

Function MatchUp (CityName As String)

Matchup = Switch(CityName = "Londra", "Inglese", CityName _

= "Roma", "Italiano", CityName = "Parigi", "Francese")

End Function


Esempio di istruzione While...Wend

In questo esempio l'istruzione While...Wend viene utilizzata per incrementare una variabile contatore. Le istruzioni nel ciclo vengono eseguite fino a quando la valutazione della condizione dà come risultato True.

Dim Counter

Counter = 0	' Inizializza la variabile.

While Counter < 20	' Controlla il valore di Counter.

Counter = Counter + 1	' Incrementa Counter.

Wend	' Termina il ciclo While quando Counter > 19.

Debug.Print Counter	' Scrive 20 nella finestra Immediata.


Esempio di istruzione With

In questo esempio l'istruzione With viene utilizzata per eseguire una serie di istruzioni su un singolo oggetto. L'oggetto MyObject e le corrispondenti proprietà sono nomi generici utilizzati unicamente a titolo esemplificativo.

With MyObject

.Height = 100	' Equivale a MyObject.Height = 100.

.Caption = "Salve"	' Equivale a MyObject.Caption = "Salve".

With .Font

.Color = Red	' Equivale a MyObject.Font.Color = Red.

.Bold = True	' Equivale a MyObject.Font.Bold = True.

End With

End With


Istruzione Call

Trasferisce il controllo a una routine Sub, a una routine Function o a una routine DLL (libreria a collegamento dinamico).

Sintassi

[Call] nome [elencoargomenti]

La sintassi dell'istruzione Call è composta dalle seguenti parti:

Parte	Descrizione
Call	Facoltativa. Parola chiave. Se viene specificata, è necessario racchiudere elencoargomenti tra parentesi. Ad esempio:
	Call MyProc(0)
nome	Obbligatoria. Nome della routine da chiamare.
elencoargomenti	Facoltativa. Elenco di variabili, matrici, o espressioni delimitate da virgole da passare alla routine. Gli elementi di elencoargomenti possono includere le parole chiave ByVal o ByRef per descrivere la modalità con la quale devono essere passati gli argomenti nella routine chiamata. Le parole chiave, ByVal e ByRef possono essere utilizzate con l’istruzione Call soltanto per chiamate di routine DLL. In Macintosh, le parole chiave ByVal e ByRef possono essere utilizzate con Call per richiamare una risorsa codice Macintosh.
Osservazioni

Per chiamare una routine non è necessario utilizzare la parola chiave Call. Se si utilizza la parola chiave Call per chiamare una routine che richiede argomenti, elencoargomenti dovrà essere racchiuso tra parentesi. Se la parola chiave Call viene omessa, sarà necessario omettere anche le parentesi che racchiudono elencoargomenti. Se si utilizza la sintassi Call per chiamare una funzione intrinseca o definita dall'utente, il valore restituito dalla funzione verrà eliminato.

Per passare un'intera matrice, utilizzare il nome della matrice seguito da parentesi vuote.


Funzione Choose

Seleziona e restituisce un valore da un elenco di argomenti.

Sintassi

Choose(indice, scelta-1[, scelta-2, ... [, scelta-n]])

La sintassi della funzione Choose è composta dalle seguenti parti:

Parte	Descrizione
indice	Obbligatoria. Espressione numerica o campo che restituisce un valore compreso tra 1 e il numero delle scelte disponibili.
scelta	Obbligatoria. Espressione Variant contenente una delle scelte possibili.
Osservazioni

Choose restituisce un valore dell'elenco di scelte in base al valore di indice. Se indice è 1, Choose restituisce la prima scelta dell'elenco; se indice è 2, restituirà la seconda scelta e così via.

La funzione Choose può essere utilizzata per cercare un valore in un elenco. Se, ad esempio, indice è 3 e scelta-1 = "uno", scelta-2 = "due",e scelta-3 = "tre", Choose restituirà "tre". Questa caratteristica è particolarmente utile se indice rappresenta il valore all'interno di un gruppo di opzioni.

La funzione Choose valuta tutte le scelte dell'elenco, anche se ne restituisce una sola. Per tale ragione, è opportuno prevedere la possibilità di effetti indesiderati. Se, ad esempio, la funzione MsgBox viene utilizzata come parte di un’espressione in tutte le scelte, la valutazione di ciascuna scelta comporterà la visualizzazione di una finestra di messaggio, anche se Choose restituirà il valore di una sola scelta.

La funzione Choose restituisce un valore Null se indice è minore di 1 o maggiore del numero di scelte disponibili.

Se indice non è un numero intero, verrà arrotondato al numero intero più vicino prima di essere valutato.


Funzione DoEvents

Sospende l'esecuzione in modo che il sistema operativo possa elaborare altri eventi.

Sintassi

DoEvents( )

Osservazioni

La funzione DoEvents restituisce un valore Integer corrispondente al numero di form aperti nelle versioni autonome di Visual Basic, ad esempio l’Edizione Professional. In tutte le altre applicazioni DoEvents restituisce zero.

La funzione DoEvents trasferisce il controllo al sistema operativo, che lo conserverà fino a quando non avrà terminato di elaborare gli eventi della propria coda e fino a quando non saranno inviate tutte le sequenze di tasti della coda SendKeys.

La funzione DoEvents è particolarmente utile per semplici operazioni come consentire all'utente di annullare un processo dopo averlo avviato, ad esempio la ricerca di un file. Per operazioni di lunga durata, è consigliabile eseguire il trasferimento del controllo al processore tramite un timer oppure delegando l'operazione a un componente EXE ActiveX. In quest'ultimo caso, l'operazione può continuare in modo totalmente indipendente dall'applicazione e il multitasking e l'assegnazione dei tempi vengono gestiti dal sistema operativo.

Attenzione   Tutte le volte che si trasferisce temporaneamente il controllo al processore all'interno di una routine di eventi, verificare che la routine non venga di nuovo eseguita da un'altra sezione del codice prima che termini la prima chiamata. Potrebbero verificarsi, infatti, risultati imprevedibili. Non utilizzare inoltre DoEvents se, durante il periodo di tempo in cui il controllo è stato passato, è possibile che altre applicazioni interagiscano con la routine con effetti non prevedibili.


Istruzione Do...Loop

Ripete un blocco di istruzioni finché la valutazione di una condizione dà come risultato True o fino a quando non dà come risultato True.

Sintassi

Do [{While | Until} condizione]
[istruzioni]
[Exit Do]
[istruzioni]

Loop

In alternativa, è possibile utilizzare la seguente sintassi equivalente:

Do
[istruzioni]
[Exit Do]
[istruzioni]

Loop [{While | Until} condizione]

La sintassi dell’istruzione Do... Loop è composta dalle seguenti parti:

Parte	Descrizione
condizione	Facoltativa. Espressione numerica o espressione stringa che può dare come risultato True o False. Se condizione è Null, viene considerata come False.
istruzioni	Una o più istruzioni ripetute finché la valutazione di condizione è True.
Osservazioni

È possibile inserire un qualsiasi numero di istruzioni Exit Do in qualsiasi punto dell'istruzione Do...Loop come metodo alternativo per uscire dall'istruzione Do...Loop. Exit Do viene spesso utilizzata dopo la valutazione di una condizione, ad esempio If...Then, per trasferire il controllo all'istruzione immediatamente successiva all'istruzione Loop.

Quando le istruzioni Do...Loop sono nidificate, il controllo viene trasferito al ciclo che si trova al livello di nidificazione immediatamente superiore al ciclo in cui ha luogo Exit Do.


Istruzione End

Termina una routine o un blocco.

Sintassi

End

End Function

End If

End Property

End Select

End Sub

End Type

End With

L’istruzione End può essere utilizzata nei seguenti modi:

Istruzione	Descrizione
End	Interrompe l'esecuzione immediatamente. È sempre facoltativa ma può essere inclusa in un punto qualsiasi di una routine per interrompere l'esecuzione del codice, chiudere i file aperti con l'istruzione Open e annullare le variabili.
End Function	Necessaria per terminare un’istruzione Function.
End If	Necessaria per terminare un’istruzione If…Then…Else a blocchi.
End Property	Necessaria per terminare una routine Property Let, Property Get o Property Set.
End Select	Necessaria per terminare un’istruzione Select Case.
End Sub	Necessaria per terminare un’istruzione Sub.
End Type	Necessaria per terminare una definizione di tipo definito dall’utente (istruzione Type).
End With	Necessaria per terminare un’istruzione With.
Osservazioni

L’esecuzione dell’istruzione End comporta il ripristino di tutte le variabili a livello di modulo e di tutte le variabili locali statiche in tutti i moduli. Se si desidera conservare il valore di tali variabili, è consigliabile utilizzare l'istruzione Stop. Sarà quindi possibile riavviare l'esecuzione conservando il valore delle variabili.

Nota   L'istruzione End interrompe l'esecuzione del codice immediatamente senza richiamare gli eventi Unload, QueryUnload o Terminate o altro codice Visual Basic. Il codice eventualmente inserito negli eventi Unload, QueryUnload e Terminate di form e moduli di classe non viene eseguito. Gli oggetti creati dai moduli di classe vengono eliminati, i file aperti con l'istruzione Open vengono chiusi e la memoria utilizzata dal programma viene liberata. I riferimenti agli oggetti eventualmente attivati da altri programmi vengono annullati.

L'istruzione End rappresenta un metodo per forzare l'interruzione del programma. Per interrompere normalmente un programma Visual Basic, è necessario scaricare tutti i form. Il programma verrà chiuso quando non vi sono altri programmi con riferimenti attivi agli oggetti creati da moduli di classe pubblici del programma e quando non vi è più codice in esecuzione.


Istruzione Exit

Consente di uscire da un blocco di codice Do…Loop, For...Next, Function, Sub o Property.

Sintassi

Exit Do

Exit For

Exit Function

Exit Property

Exit Sub

L’istruzione Exit può essere utilizzata nei seguenti modi:

Istruzione	Descrizione
Exit Do	Consente di uscire da un'istruzione Do...Loop. Può essere utilizzata soltanto all'interno di un'istruzione Do...Loop. Exit Do trasferisce il controllo all’istruzione che segue l’istruzione Loop. Quando è utilizzata con istruzioni Do...Loop nidificate, Exit Do trasferisce il controllo al ciclo che si trova nel livello di nidificazione immediatamente superiore al ciclo in cui ha luogo Exit Do.
Exit For	Consente di uscire da un ciclo For. Può essere utilizzata soltanto in un ciclo For...Next o For Each...Next. Exit For trasferisce il controllo all’istruzione che segue l’istruzione Next. Quando è utilizzata con cicli For nidificati, Exit For trasferisce il controllo al ciclo che si trova nel livello di nidificazione immediatamente superiore al ciclo in cui ha luogo Exit For.
Exit Function	Consente di uscire immediatamente dalla routine Function in cui è inclusa. L'esecuzione continua con l'istruzione successiva a quella che ha chiamato la routine Function.
Exit Property	Consente di uscire immediatamente dalla routine Property in cui è inclusa. L'esecuzione continua con l'istruzione successiva a quella che ha chiamato la routine Property.
Exit Sub	Consente di uscire immediatamente dalla routine Sub in cui è inclusa. L'esecuzione continua con l'istruzione successiva a quella che ha chiamato la routine Sub.
Osservazioni

Fare attenzione a non confondere le istruzioni Exit con le istruzioni End. Un'istruzione Exit non termina una struttura.


Istruzione For Each...Next

Ripete un gruppo di istruzioni per ogni elemento di una matrice o di un insieme.

Sintassi

For Each elemento In gruppo
[istruzioni]
[Exit For]
[istruzioni]

Next [elemento]

La sintassi dell’istruzione For...Each...Next è composta dalle seguenti parti:

Parte	Descrizione
elemento	Obbligatoria. Variabile utilizzata per l’interazione tra gli elementi dell’insieme o della matrice. Negli insiemi, elemento può essere soltanto una variabile Variant, una variabile oggetto generica o una variabile oggetto di automazione specifica. Nelle matrici, elemento può essere soltanto una variabile Variant.
gruppo	Obbligatoria. Nome di un insieme o di una matrice di oggetti, a eccezione delle matrici di tipi definiti dall’utente.
istruzioni	Facoltativa. Una o più istruzioni che vengono eseguite per ciascun elemento del gruppo.
Osservazioni

Il blocco For...Each viene utilizzato in presenza di almeno un elemento indicato in gruppo. Una volta avviato il ciclo, tutte le istruzioni del ciclo verranno eseguite per il primo elemento indicato in gruppo. Quindi le istruzioni del ciclo verranno eseguite per gli altri elementi, se presenti. Nel caso non vi siano altri elementi, si uscirà dal ciclo e verrà eseguita l'istruzione successiva all'istruzione Next.

È possibile inserire un qualsiasi numero di istruzioni Exit For nel ciclo, come metodo d’uscita alternativo. Exit For viene spesso utilizzata con la valutazione di una condizione, ad esempio  If…Then, per trasferire il controllo all'istruzione immediatamente successiva all'istruzione Next.

È possibile nidificare cicli For...Each...Next inserendo un ciclo For...Each...Next all’interno di un altro. Ogni elemento del ciclo deve essere tuttavia univoco.

Nota   Se si omette elemento in un’istruzione Next, l’istruzione verrà eseguita come se elemento fosse incluso. Se l’istruzione Next viene incontrata prima dell’istruzione For corrispondente, verrà generato un errore.

Non è possibile utilizzare un’istruzione For...Each...Next con matrici di tipi definiti dall'utente perché una variabile Variant non può includere un tipo definito dall'utente.


Istruzione For...Next

Ripete un gruppo di istruzioni per il numero di volte specificato.

Sintassi

For contatore = inizio To fine [Step incremento]
[istruzioni]
[Exit For]
[istruzioni]

Next [contatore]

La sintassi dell'istruzione For...Next è composta dalle seguenti parti:

Parte	Descrizione
contatore	Obbligatoria. Variabile numerica utilizzata come contatore di ciclo. La variabile non può essere Boolean o un elemento di una matrice.
inizio	Obbligatoria. Valore iniziale del contatore.
fine	Obbligatoria. Valore finale del contatore.
incremento	Facoltativa. Quantità di cui viene incrementato il contatore al compimento di ciascun ciclo. Se non viene specificato, incremento assume per impostazione predefinita il valore 1.
istruzioni	Facoltativa. Una o più istruzioni comprese tra For e Next da eseguire per il numero di volte specificato
Osservazioni

L’argomento incremento può essere sia positivo che negativo. Il valore dell'argomento incremento determina l'esecuzione del ciclo come di seguito indicato:

Valore	Il ciclo viene eseguito se
Positivo o 0	contatore <= fine
Negativo	contatore >= fine
Dopo che si è entrati nel ciclo e che tutte le istruzioni del ciclo sono state eseguite, incremento viene sommato a contatore. A questo punto verranno eseguite di nuovo le istruzioni del ciclo, in base allo stesso test che ha causato la prima esecuzione del ciclo, oppure il ciclo terminerà e l'esecuzione continuerà con l'istruzione successiva a Next.

Suggerimento   La modifica del valore di un contatore dall’interno di un ciclo può complicare la lettura e il debug del codice.

È possibile inserire un qualsiasi numero di istruzioni Exit For nel ciclo, come metodo d’uscita alternativo. Exit For viene spesso utilizzata dopo la valutazione di una condizione, ad esempio If...Then, per trasferire il controllo all'istruzione immediatamente successiva all'istruzione Next.

È possibile nidificare cicli For...Next inserendo un ciclo For...Next all’interno di un altro. Assegnare come contatore a ciascun ciclo un nome di variabile univoco. La seguente costruzione è corretta:

For I = 1 To 10

For J = 1 To 10

For K = 1 To 10

...

Next K

Next J

Next I

Nota   Se si omette contatore in un'istruzione Next, l'istruzione verrà eseguita come se contatore fosse incluso. Se l'istruzione Next viene incontrata prima dell'istruzione For corrispondente, verrà generato un errore.


Istruzione GoSub...Return

In una routine, questa istruzione consente di passare a una subroutine e di tornare al punto di partenza.

Sintassi

GoSub riga
...
riga
...

Return

L’argomento riga può essere una qualsiasi etichetta di riga o un qualsiasi numero di riga.

Osservazioni

GoSub e Return possono essere utilizzate in un punto qualsiasi della routine, ma devono essere entrambe incluse nella stessa routine. Una subroutine può includere più istruzioni Return, ma la prima istruzione Return incontrata comporterà il ritorno del programma all’istruzione che segue l’istruzione GoSub più recente.

Nota   Non è possibile entrare o uscire da routine Sub tramite l’istruzione GoSub...Return.

Suggerimento   Una valida alternativa all'utilizzo dell'istruzione GoSub...Return è la creazione di routine separate richiamabili.


Istruzione GoTo

Passa incondizionatamente a una riga specifica all'interno di una routine.

Sintassi

GoTo riga

L’argomento riga può essere una qualsiasi etichetta di riga o un qualsiasi numero di riga.

Osservazioni

L’istruzione GoTo consente di passare soltanto alle righe della routine in cui è inclusa.

Nota   La presenza di troppe istruzioni GoTo può rendere difficile la lettura e il debug del codice. Quando possibile, è consigliabile utilizzare istruzioni di controllo strutturate (Do...Loop, For...Next, If...Then...Else, Select Case).


Istruzione If...Then...Else

Consente l'esecuzione condizionale di un gruppo di istruzioni in base al valore di un'espressione.

Sintassi

If condizione Then [istruzioni] [Else istruzionielse]

In alternativa, è possibile utilizzare la seguente sintassi a blocchi:

If condizione Then
[istruzioni]

[ElseIf condizione-n Then
[istruzionielseif] ...

[Else
[istruzionielse]]

End If

La sintassi dell’istruzione If...Then...Else è composta dalle seguenti parti

Parte	Descrizione
condizione	Obbligatoria. Uno o più dei due tipi di espressione indicati di seguito:
	Un’espressione numerica o un’espressione stringa che può dare come risultato True o False. Se condizione è Null, viene considerata come False.
	Un’espressione nella forma TypeOf nomeoggetto Is tipooggetto. L’argomento nomeoggetto è qualsiasi riferimento di oggetto e tipooggetto è qualsiasi tipo di oggetto valido. L'espressione dà come risultato True se nomeoggetto è del tipo di oggetto specificato da tipooggetto; in caso contrario il risultato è False.
istruzioni	Facoltativa nella sintassi a blocchi; Obbligatoria nella sintassi a riga singola, che non prevede una proposizione Else. Una o più istruzioni separate da due punti, eseguite se la valutazione di condizione dà come risultato True.
condizione-n	Facoltativa. Come condizione.
istruzionielseif	Facoltativa. Una o più istruzioni eseguite se la valutazione della condizione-n associata dà come risultato True.
istruzionielse	Facoltativa. Una o più istruzioni eseguite se la valutazione di nessuna espressione condizione o condizione-n precedente dà come risultato True.
Osservazioni

La forma su una sola riga (prima sintassi) è utile per eseguire brevi e semplici test. La forma a blocco (seconda sintassi) consente una maggiore strutturazione e flessibilità rispetto alla forma su una sola riga e in genere facilita la lettura, il controllo e il debug.

Nota   La sintassi su una sola riga consente di eseguire istruzioni multiple come risultato di una decisione If...Then. Le istruzioni devono comunque essere incluse nella stessa riga e separate da due punti come nell'istruzione di seguito riportata:

If A > 10 Then A = A + 1 : B = B + A : C = C + B

Un'istruzione If in forma di blocco deve essere la prima istruzione di una riga. Le parti Else, ElseIf e End If dell’istruzione possono essere precedute soltanto da un numero di riga o da un’etichetta di riga. Il blocco If deve terminare con un’istruzione End If.

Per determinare se un'istruzione è un blocco If, esaminare gli elementi successivi alla parola chiave Then. Se dopo tale parola chiave e sulla stessa riga non vi sono altri elementi a eccezione di un commento, l'istruzione viene considerata un'istruzione If su una sola riga.

Le proposizioni Else e ElseIf sono entrambe facoltative. Un blocco If può contenere un numero qualsiasi di proposizioni ElseIf, nessuna delle quali deve tuttavia apparire dopo una proposizione Else. Le istruzioni If a blocchi possono essere nidificate, ovvero inserite una all’interno dell’altra.

Nell'esecuzione di un blocco If (seconda sintassi) viene analizzata condizione. Se condizione è True, verranno eseguite le istruzioni successive a Then. Se condizione è False, verranno valutate singolarmente le condizioni ElseIf eventualmente presenti. Quando viene individuata una condizione True, vengono eseguite le istruzioni immediatamente successive all'istruzione Then associata. Se nessuna delle condizioni ElseIf risulta True (o in assenza di proposizioni ElseIf), verranno eseguite le istruzioni che seguono l'istruzione Else. Dopo l'esecuzione delle istruzioni che seguono Then o Else, verrà eseguita l'istruzione che segue EndIf.

Suggerimento   L’istruzione Select Case può risultare più utile per la valutazione di un'espressione singola che include diverse azioni possibili. La proposizione TypeOf nomeoggetto Is tipooggetto non può essere tuttavia utilizzata con l'istruzione Select Case.

Nota   La proposizione TypeOf non può essere utilizzata con tipi di dati diversi da Object, quali Long, Integer e così via.


Funzione IIf

Sulla base della valutazione di un’espressione, restituisce una delle due parti di un’espressione.

Sintassi

IIf(expr, truepart, falsepart)

La sintassi della funzione IIf è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
expr	Obbligatoria. Espressione che si desidera valutare.
truepart	Obbligatoria. Valore o espressione restituita se expr è True.
falsepart	Obbligatoria. Valore o espressione restituita se expr è False.
Osservazioni

IIf valuta sempre sia truepart che falsepart, anche se restituisce uno solo dei due valori. Per tale ragione, è opportuno prevedere la possibilità di effetti indesiderati. Se, ad esempio, la valutazione di falsepart restituisce un errore di divisione per zero, verrà generato un errore anche se expr è True.


Istruzioni On...GoSub e On...GoTo

Consentono di passare a una delle varie righe specificate, a seconda del valore di un'espressione.

Sintassi

On espressione GoSub elencodestinazione

On espressione GoTo elencodestinazione

La sintassi delle istruzioni On...GoSub e On...GoTo è composta dalle seguenti parti:

Parte	Descrizione
espressione	Obbligatoria. Qualsiasi espressione numerica che dia come risultato un numero intero tra 0 e 255, inclusi. Se espressione non è un numero intero, verrà arrotondata prima della valutazione.
elencodestinazione	Obbligatoria. Elenco dei numeri di riga o delle etichette di riga separati da virgole.
Osservazioni

Il valore di espressione determina la riga a cui si passerà in elencodestinazione. Se il valore di espressione è minore di 1 o maggiore del numero degli elementi dell'elenco, si avrà uno dei risultati di seguito indicati:

Se espressione è	Risultato
Uguale a 0	Il controllo passa all’istruzione successiva a On...GoSub o On...GoTo.
Maggiore del numero di elementi nell’elenco	Il controllo passa all’istruzione successiva a On...GoSub o On...GoTo.
Negativa	Viene generato un errore.
Maggiore di 255	Viene generato un errore.
Lo stesso elenco può contenere sia numeri di riga che etichette di riga. In pratica non esiste un limite per il numero di etichette di riga e di numeri di riga utilizzabile con le istruzioni On...GoSub e On...GoTo. Se tuttavia le etichette o i numeri utilizzati non rientrano in un'unica riga, sarà necessario utilizzare i caratteri di continuazione riga per continuare la riga logica nella riga fisica successiva.

Suggerimento   L’istruzione Select Case rappresenta un metodo più strutturato e flessibile per l'esecuzione di passaggi multipli.


Funzione Partition

Restituisce un valore Variant (String) che indica la posizione di un numero in una serie calcolata di intervalli.

Sintassi

Partition(number, start, stop, interval)

La sintassi della funzione Partition è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
number	Obbligatoria. Numero intero da valutare in base agli intervalli.
start	Obbligatoria. Numero intero che corrisponde all'inizio della serie di intervalli. Non può essere minore di 0.
stop	Obbligatoria. Numero intero che corrisponde alla fine della serie di intervalli. Non può essere uguale o minore di start.
Osservazioni

La funzione Partition identifica l’intervallo in cui si colloca number e restituisce un valore Variant (String) che descrive tale intervallo. La funzione Partition risulta particolarmente utile nelle query. È, ad esempio, possibile creare una query di selezione per visualizzare gli ordini che rientrano in diversi intervalli (ad esempio, valori di ordini da 1 a 1000, da 1001 a 2000 e così via).

La tabella che segue mostra come gli intervalli vengano determinati utilizzando, ad esempio, tre set di argomenti start, stop e interval. Le colonne Primo intervallo e Ultimo intervallo mostrano i valori restituiti da Partition. Gli intervalli sono rappresentati da valoreinferiore:valoresuperiore. Il limite inferiore dell'intervallo (valoreinferiore) è separato dal limite superiore (valoresuperiore) da due punti (:).

start	stop	interval	Prima del primo	Primo intervallo	Ultimo intervallo	Dopo l’ultimo
0	99	5	"   :-1"	"      0:  4"	"     95: 99"	"   100:   "
20	199	10	"   :  19"	"    20:  29"	"   190: 199"	"   200:   "
100	1010	20	"   :   99"	"  100:  119"	" 1000: 1010"	" 1011:   "
Nella tabella, la terza riga mostra il risultato nel caso in cui start e stop definiscano un insieme di numeri che non è possibile dividere esattamente per interval. L'ultimo intervallo si estende fino a stop (11 numeri) anche se interval è 20.

Se necessario, Partition restituisce un intervallo con un numero sufficiente di spazi iniziali, in modo che a destra e a sinistra dei due punti sia presente lo stesso numero di caratteri di stop, più uno. Ciò garantisce che se Partition viene utilizzata con altri numeri, il testo risultante verrà gestito in modo appropriato in qualsiasi operazione di ordinamento successiva.

Se interval è 1, l’intervallo è number:number, indipendentemente dal valore degli argomenti start e stop. Se, ad esempio, interval è 1, number è 100 e stop è 1000, Partition restituirà "  100:  100".

Se una delle parti è un valore Null, Partition restituirà un valore Null.


Istruzione Select Case

Esegue uno dei vari blocchi di istruzioni sulla base del valore di un’espressione.

Sintassi

Select Case espressioneprova
[Case elencoespressioni-n
[istruzioni-n]] ...
[Case Else
[istruzionielse]]

End Select

La sintassi dell'istruzione Select Case è composta dalle seguenti parti:

Parte	Descrizione
espressioneprova	Obbligatoria. Qualsiasi espressione numerica o espressione stringa.
elencoespressioni-n	Obbligatoria in presenza di Case. Elenco delimitato in una delle seguenti forme: espressione, espressione To espressione, oppure Is operatoreconfronto espressione. La parola chiave To specifica un intervallo di valori. Se si utilizza la parola chiave To il valore minore deve apparire prima di To. Utilizzare la parola chiave Is con gli operatori di confronto (a esclusione di Is e Like) per specificare un intervallo di valori. Se non viene indicata, la parola chiave Is verrà inserita automaticamente.
istruzioni-n	Facoltativa. Una o più istruzioni eseguite se espressioneprova corrisponde a una qualsiasi parte di elencoespressioni-n.
istruzionielse	Facoltativa. Una o più istruzioni eseguite se espressioneprova non corrisponde a nessun elemento della proposizione Case.
Osservazioni

Se espressioneprova corrisponde all'espressione elencoespressioni, associata a una proposizione Case, le istruzioni che seguono tale proposizione Case verranno eseguite fino alla proposizione Case successiva. L'ultimo blocco di istruzioni verrà eseguito fino a End Select. Il controllo passerà quindi all'istruzione successiva a End Select. Se espressioneprova corrisponde a un'espressione elencoespressioni in più di una proposizione Case, verranno eseguite solo le istruzioni che seguono la prima corrispondenza.

La proposizione Case Else viene utilizzata per indicare le istruzionielse da eseguire se non viene trovata corrispondenza tra espressioneprova e elencoespressioni in una delle altre selezioni Case. Sebbene non sia obbligatorio, è consigliabile includere un'istruzione Case Else in un blocco Select Case per gestire valori di espressioneprova non previsti. Se nessuna elencoespressioni Case corrisponde a espressioneprova e non è stata specificata un'istruzione Case Else, verrà eseguita l'istruzione successiva a End Select.

In ciascuna proposizione Case, è possibile utilizzare più espressioni o intervalli. La riga di seguito riportata è, ad esempio, valida:

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

Nota   Si noti che l'operatore di confronto Is e la parola chiave Is utilizzata nell'istruzione Select Case sono elementi diversi.

È inoltre possibile specificare intervalli e più di un'espressione per le stringhe di caratteri. In questo esempio, Case consente di confrontare le stringhe che corrispondono esattamente a everything, le stringhe comprese tra nuts e soup in ordine alfabetico e il valore corrente di TestItem:

Case "everything", "nuts" To "soup", TestItem

Le istruzioni Select Case possono essere nidificate. A ciascuna istruzione Select Case nidificata deve corrispondere un'istruzione End Select.


Funzione Shell

Avvia un programma eseguibile e restituisce un valore Variant (Double) che indica l'ID del task del programma in caso di esito positivo oppure zero in caso di esito negativo.

Sintassi

Shell(pathname[,windowstyle])

La sintassi della funzione Shell è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
pathname	Obbligatoria. Variant (String). Nome del programma da eseguire e tutti gli argomenti o parametri della riga di comando. Può includere la directory o cartella e l'unità. In Macintosh, è possibile utilizzare la funzione MacID per specificare la signature di un'applicazione al posto del nome. Nell'esempio seguente viene utilizzata la signature per Microsoft Word:  Shell MacID("MSWD")
windowstyle	Facoltativa. Variant (Integer) corrispondente allo stile della finestra nella quale verrà eseguito il programma. Se windowstyle viene omesso, il programma verrà aperto come programma attivo ridotto a icona. In Macintosh (System 7.0 o versioni successive), windowstyle consente unicamente di determinare se l'applicazione riceve o meno lo stato attivo quando viene eseguita.
Per l’argomento predefinito windowstyle sono disponibili i seguenti valori:

Costante	Valore	Descrizione
vbHide	0	La finestra è nascosta e lo stato attivo viene passato alla finestra nascosta. La costante vbHide non è valida per le piattaforme Macintosh.
vbNormalFocus	1	La finestra è attivata e vengono ripristinate la dimensione e la posizione originali.
vbMinimizedFocus	2	La finestra è ridotta a icona e attivata.
vbMaximizedFocus	3	La finestra è ingrandita e attivata.
vbNormalNoFocus	4	Vengono ripristinate le dimensioni e posizione precedenti della finestra. La finestra attiva resta attiva.
vbMinimizedNoFocus	6	La finestra è ridotta a icona. La finestra attiva resta attiva.
Osservazioni

Se la funzione Shell esegue in modo corretto il file indicato, restituirà l'ID del task del programma avviato. L'ID del task è un numero univoco, che identifica il programma in esecuzione. Se la funzione Shell non riesce ad avviare il programma specificato, verrà generato un errore.

In Macintosh, vbNormalFocus, vbMinimizedFocus e vbMaximizedFocus posizionano l'applicazione in primo piano; vbHide, vbNoFocus, vbMinimizeFocus posizionano l'applicazione sullo sfondo.

Nota   Per impostazione predefinita la funzione Shell consente di eseguire altri programmi in modo asincrono. Ciò significa che non è necessario attendere la fine dell'esecuzione di un programma avviato con Shell prima che possano essere eseguite le istruzioni che seguono la funzione Shell nell'applicazione.


Istruzione Stop

Sospende l'esecuzione.

Sintassi

Stop

Osservazioni

Le istruzioni Stop possono essere inserite in qualsiasi punto delle routine per sospenderne l'esecuzione. L'utilizzo dell'istruzione Stop produce risultati analoghi all'impostazione di un punto di interruzione nel codice.

L’istruzione Stop sospende l'esecuzione ma, diversamente da End, non chiude file né cancella variabili, a meno che non sia inclusa in un file eseguibile (EXE) compilato.


Funzione Switch

Valuta un elenco di espressioni e restituisce un valore Variant o un'espressione associata alla prima espressione dell'elenco che risulta True.

Sintassi

Switch(espr-1, valore-1[, espr-2, valore-2 … [, espr-n,valore-n]])

La sintassi della funzione Switch è composta dalle seguenti parti:

Parte	Descrizione
espr	Obbligatoria. Espressione Variant che si desidera valutare.
valore	Obbligatoria. Valore o espressione restituita se l'espressione corrispondente risulta True.
Osservazioni

L'elenco di argomenti per la funzione Switch è costituito da coppie di espressioni e valori. Le espressioni vengono valutate da sinistra a destra e viene restituito il valore associato alla prima espressione che risulta True. Se gli argomenti non sono adeguatamente accoppiati, viene generato un errore di run-time. Se ad esempio espr-1 è True, Switch restituirà valore-1. Se espr-1 è False, ma espr-2 è True, Switch restituirà valore-2 e così via.

Switch restituisce un valore Null se:

•	Nessuna delle espressioni è True.

•	Alla prima espressione che risulta True è associato un valore Null.

Switch valuta tutte le espressioni, anche se ne restituisce soltanto una. Per tale ragione, è opportuno prevedere la possibilità di effetti indesiderati. Se, ad esempio, la valutazione di un'espressione qualsiasi restituisce un errore di divisione per zero, verrà generato un errore.


Istruzione While...Wend

Esegue una serie di istruzioni finché la valutazione di una determinata condizione dà come risultato True.

Sintassi

While condizione
[istruzioni]

Wend

La sintassi dell'istruzione While...Wend è composta dalle seguenti parti:

Parte	Descrizione
condizione	Obbligatoria. Espressione numerica o espressione stringa che può dare come risultato True o False. Se condizione è Null, viene considerata False.
istruzioni	Facoltativa. Una o più istruzioni eseguite finché la condizione è True.
Osservazioni

Se condizione è True, verranno eseguite tutte le istruzioni fino all’istruzione Wend. Il controllo tornerà quindi all'istruzione While e condizione verrà analizzata nuovamente. Se condizione è ancora True, il processo verrà ripetuto. Se non è True, l'esecuzione riprenderà con l'istruzione successiva all'istruzione Wend.

I cicli While...Wend possono essere nidificati a qualsiasi livello. Ciascuna istruzione Wend corrisponderà all’istruzione While più recente.

Suggerimento   L’istruzione Do...Loop consente un'esecuzione dei cicli più strutturata e flessibile.


Istruzione With

Esegue una serie di istruzioni su un singolo oggetto o su un tipo definito dall’utente.

Sintassi

With oggetto
[istruzioni]

End With

La sintassi dell’istruzione With è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. Nome di un oggetto o di un tipo definito dall'utente.
istruzioni	Facoltativa. Una o più istruzioni da eseguire su oggetto.
Osservazioni

L'istruzione With consente di eseguire una serie di istruzioni su un oggetto specificato senza riqualificare il nome dell'oggetto. Se, ad esempio, si desidera modificare una serie di proprietà diverse per un singolo oggetto, risulta più agevole inserire le istruzioni di assegnazione di proprietà all'interno della struttura di controllo With facendo riferimento all'oggetto una sola volta, invece di dover includere il riferimento per ogni assegnazione di proprietà. In questo esempio viene descritto l'utilizzo dell'istruzione With per assegnare valori a diverse proprietà dello stesso oggetto.

With MyLabel

.Height = 2000

.Width = 2000

.Caption = "This is MyLabel"

End With

Nota   Dopo aver immesso un blocco With, non sarà possibile modificare oggetto. Ne risulta che non è possibile utilizzare una sola istruzione With per più oggetti diversi.

È possibile nidificare le istruzioni With inserendo un blocco With all'interno di un altro. I membri dei blocchi With esterni sono tuttavia nascosti dai blocchi With interni ed è pertanto necessario inserire in un blocco interno With un riferimento completo all'oggetto per qualsiasi membro di un oggetto incluso in un blocco With esterno.

Nota   In genere è consigliabile evitare di eseguire salti procedurali all'interno o all'esterno di blocchi With Se vengono eseguite le istruzioni di un blocco With, ma non viene eseguita l'istruzione With o End With, una variabile temporanea che contiene un riferimento all'oggetto rimarrà in memoria fino a quando non si esce dalla routine.


Esempio di funzione Asc

In questo esempio la funzione Asc viene utilizzata per restituire il codice di carattere corrispondente alla prima lettera della stringa.

Dim MyNumber

MyNumber = Asc("A")	' Restituisce 65.

MyNumber = Asc("a")	' Restituisce 97.

MyNumber = Asc("Apple")	' Restituisce 65.


Esempio di funzione CBool

In questo esempio la funzione CBool viene utilizzata per convertire un'espressione in tipo di dati Boolean. Se l'espressione dà come risultato un valore diverso da zero, la funzione CBool restituisce True, in caso contrario restituisce False.

Dim A, B, Check

A = 5: B = 5	' Inizializza le variabili.

Check = CBool(A = B)	' Check contiene True.

A = 0	' Definisce la variabile.

Check = CBool(A)	' Check contiene False.


Esempio di funzione CByte

In questro esempio la funzione CByte viene utilizzata per convertire un'espressione in Byte.

Dim MyDouble, MyByte

MyDouble = 125.5678	' MyDouble è di tipo Double.

MyByte = CByte(MyDouble)	' MyByte contiene 126.


Esempio di funzione CDate

In questo esempio la funzione CDate viene utilizzata per convertire una stringa in tipo di dati Date. Non è in genere consigliabile definire a livello di codice date e ore come stringhe come indicato nell'esempio. È invece consigliabile utilizzare valori letterali di data e ora come #2/12/1969# e #4:45:23 PM#.

Dim MyDate, MyShortDate, MyTime, MyShortTime

MyDate = "12 febbraio 1969"	' Definisce la data.

MyShortDate = CDate(MyDate)	' Converte nel tipo di dati Date.

MyTime = "16.35.47"	' Definisce l'ora.

MyShortTime = CDate(MyTime)	' Converte nel tipo di dati Date.


Esempio di funzione CCur

In questo esempio la funzione CCur viene utilizzata per convertire un'espressione in Currency.

Dim MyDouble, MyCurr

MyDouble = 543.214588	' MyDouble è di tipo Double.

MyCurr = CCur(MyDouble * 2)	' Converte il risultato di

' MyDouble * 2 (1086,429176)

' in Currency (1086,4292).


Esempio di funzione CDbl

In questo esempio la funzione CDbl viene utilizzata per convertire un'espressione in Double.

Dim MyCurr, MyDouble

MyCurr = CCur(234.456784)	' MyCurr è di tipo Currency.

MyDouble = CDbl(MyCurr * 8.2 * 0.01)	' Converte il risultato in Double.


Esempio di funzione CInt

In questo esempio la funzione CInt viene utilizzata per convertire un valore in Integer.

Dim MyDouble, MyInt

MyDouble = 2345.5678	' MyDouble è di tipo Double.

MyInt = CInt(MyDouble)	' MyInt contiene 2346.


Esempio di funzione CLng

In questo esempio la funzione CLng viene utilizzata per convertire un valore in Long.

Dim MyVal1, MyVal2, MyLong1, MyLong2

MyVal1 = 25427.45: MyVal2 = 25427.55	' MyVal1 e MyVal2 sono di tipo Double.

MyLong1 = CLng(MyVal1)	' MyLong1 contiene 25427.

MyLong2 = CLng(MyVal2)	' MyLong2 contiene 25428.


Esempio di funzione CSng

In questo esempio la funzione CSng viene utilizzata per convertire un valore in Single.

Dim MyDouble1, MyDouble2, MySingle1, MySingle2

' MyDouble1 e MyDouble2 sono di tipo Double.

MyDouble1 = 75.3421115: MyDouble2 = 75.3421555

MySingle1 = CSng(MyDouble1)	' MySingle1 contiene 75,34211.

MySingle2 = CSng(MyDouble2)	' MySingle2 contiene 75,34216.


Esempio di funzione CStr

In questo esempio la funzione CStr viene utilizzata per convertire un valore numerico in String.

Dim MyDouble, MyString

MyDouble = 437.324	' MyDouble è di tipo Double.

MyString = CStr(MyDouble)	' MyString contiene "437,324".


Esempio di funzione CVar

In questo esempio la funzione CVar viene utilizzata per convertire un'espressione in Variant.

Dim MyInt, MyVar

MyInt = 4534	' MyInt è di tipo Integer.

MyVar = CVar(MyInt & "000")	' MyVar contiene la stringa

' 4534000.


Esempio di funzione CVErr

In questo esempio la funzione CVErr viene utilizzata per restituire un errore di tipo Variant il cui VarType è vbError (10). La funzione definita dall'utente CalculateDouble restituisce un errore se l'argomento passato non è un numero. La funzione CVErr è utile per la restituzione di errori definiti dall'utente all'interno di routine definite dall'utente o per rimandare la gestione di un errore di run-time. Per verificare se il valore è un errore, utilizzare la funzione IsError.

' Chiama CalculateDouble con un argomento che

' genera un errore.

Sub Test()

Debug.Print CalculateDouble("345.45robert")

End Sub

' Definisce la routine della funzione CalculateDouble.

Function CalculateDouble(Number)

If IsNumeric(Number) Then

CalculateDouble = Number * 2	' Restituisce il risultato.

Else

CalculateDouble = CVErr(2001)	' Restituisce un numero di

End If	' errore definito dall'utente.

End Function


Esempio di funzione Val

In questo esempio la funzione Val viene utilizzata per restituire i numeri contenuti in una stringa.

Dim MyValue

MyValue = Val("2457")	' Restituisce 2457.

MyValue = Val(" 2 45 7")	' Restituisce 2457.

MyValue = Val("24 and 57")	' Restituisce 24.


Esempio di funzione CDec

In questo esempio la funzione CDec viene utilizzata per convertire un valore numerico in un valore Decimal.

Dim MyDecimal, MyCurr

MyCurr = 10000000.0587	' MyCurr è di tipo Currency.

MyDecimal = CDec(MyCurr) 	' MyDecimal è di tipo Decimal.


Funzioni di conversione

Funzione Asc

Funzione CBool

Funzione CByte

Funzione CCur

Funzione CDate

Funzione CDec

Funzione CDbl

Funzione Chr

Funzione CInt

Funzione CLng

Funzione CSng

Funzione CStr

Funzione CVar

Funzione CVErr

Funzione Format

Funzione Hex

Funzione Oct

Funzione Str

Funzione Val


Funzione Asc

Restituisce un valore Integer che rappresenta il codice di carattere corrispondente alla prima lettera di una stringa.

Sintassi

Asc(stringa)

L'argomento obbligatorio stringa può essere una qualsiasi espressione stringa valida. Se stringa non include alcun carattere, verrà generato un errore di run-time.

Osservazioni

L'intervallo valido dei risultati è compreso fra 0 e 255 in sistemi non DBCS e fra -32768 e 32767 in sistemi DBCS.

Nota   La funzione AscB è utilizzata con i dati byte contenuti in una stringa. Anziché restituire il codice del primo carattere, AscB restituisce il primo byte. La funzione AscW restituisce il codice di carattere Unicode ad eccezione delle piattaforme che non supportano Unicode. In questi casi, le funzioni sono identiche a quelle della funzione Asc.

Nota   Visual Basic per Macintosh non supporta stringhe Unicode. Di conseguenza, a differenza dell'ambiente Windows, AscW(n) non restituisce tutti i caratteri Unicode per valori n compresi tra 128 e 65.535, ma restituisce i caratteri più simili per i valori Unicode n maggiori di 127. Non utilizzare AscW in ambiente Macintosh.


Funzione CVErr

Restituisce un valore Variant del sottotipo Error contenente un numero di errore specificato dall'utente.

Sintassi

CVErr(numeroerrore)

L'argomento obbligatorio numeroerrore può essere qualsiasi numero di errore valido.

Osservazioni

Utilizzare la funzione CVErr per creare errori definiti dall'utente per routine create dall'utente. Se si crea, ad esempio, una funzione che accetta diversi argomenti e in genere restituisce una stringa, è possibile utilizzare la funzione per valutare gli argomenti di input e verificare che rientrino nell'intervallo valido. Se gli argomenti non rientrano nell'intervallo valido, è probabile che la funzione non produca il risultato previsto. In casi di questo tipo, la funzione CVErr consente di impostare la restituzione di un numero di errore che indichi l'azione da intraprendere.

Si noti che non è consentito eseguire una conversione implicita di dati di tipo Error Non è possibile, ad esempio, assegnare direttamente a una variabile di tipo non Variant il valore restituito dalla funzione CVErr. È tuttavia possibile eseguire una conversione esplicita (con CInt, CDbl, ecc.) del valore restituito da CVErr e assegnare il risultato a una variabile con tipo di dati appropriato.


Funzione Val

Restituisce i numeri inclusi in una stringa sotto forma di valore numerico di tipo appropriato.

Sintassi

Val(stringa)

L'argomento obbligatorio stringa può essere una qualsiasi espressione stringa valida.

Osservazioni

La funzione Val interrompe la lettura della stringa in corrispondenza del primo carattere non riconosciuto come parte di un numero. I simboli e i caratteri spesso riconosciuti come facenti parte di un valore numerico, quali il segno di valuta e le virgole, non vengono riconosciuti. La funzione riconosce tuttavia i prefissi di radice &O (per ottale) e &H (per esadecimale). Gli spazi, le tabulazioni e i caratteri di avanzamento riga vengono eliminati dall'argomento.

In questo esempio la funzione restituirà il valore 1615198:

Val("    1615 198th Street N.E.")

Nel seguente codice Val restituisce il valore decimale -1 per il valore esadecimale visualizzato:

Val("&HFFFF")

Nota   La funzione Val riconosce solo il punto (.) come separatore decimale valido. Se si utilizzano separatori diversi (ad esempio in applicazioni internazionali) per convertire una stringa in numero è consigliabile utilizzare la funzione CDbl.


Funzioni di conversione del tipo

Ciascuna funzione converte un'espressione in un tipo di dati specifico.

Sintassi

CBool(espressione)

CByte(espressione)

CCur(espressione)

CDate(espressione)

CDbl(espressione)

CDec(espressione)

CInt(espressione)

CLng(espressione)

CSng(espressione)

CStr(espressione)

CVar(espressione)

L'argomento obbligatorio espressione può essere una qualsiasi espressione stringa o espressione numerica.

Tipo di valori restituiti

Il nome della funzione determina il tipo di valore restituito come illustrato nella tabella seguente:

Funzione	Tipo restituito	Intervallo per l'argomento espressione
CBool	Boolean	Qualsiasi espressione numerica o stringa valida.
CByte	Byte	Da 0 a 255.
CCur	Currency	Da -922.337.203.685.477,5808 a 922.337.203.685.477,5807.
CDate	Date	Qualsiasi espressione di data valida.
CDbl	Double	Da -1.79769313486231E308 a -4,94065645841247E-324 per valori negativi; da 4,94065645841247E-324 a 1,79769313486232E308 per quelli positivi.
CDec	Decimal	+/-79.228.162.514.264.337.593.543.950.335 per numeri con fattore di divisione zero, ovvero numeri senza decimali. Per i numeri con 28 decimali l'intervallo è  +/-7,9228162514264337593543950335. Il numero minore possibile diverso da zero è 0,0000000000000000000000000001.
CInt	Integer	Da -32.768 a 32.767; le frazioni vengono arrotondate.
CLng	Long	Da -2.147.483.648 a 2.147.483.647; le frazioni vengono arrotondate.
CSng	Single	Da -3,402823E38 a -1,401298E-45 per valori negativi; da 1,401298E-45 a 3,402823E38 per valori positivi.
CStr	String	I valori restituiti da CStr dipendono dall'argomento espressione.
CVar	Variant	Lo stesso intervallo di Double per valori numerici. Lo stesso intervallo di String per valori non numerici.
Osservazioni

Se l'espressione passata alla funzione non è compresa nell'intervallo del tipo di dati in cui si sta eseguendo la conversione, verrà generato un errore.

È consigliabile inserire nel codice le funzioni di conversione tra tipi di dati per indicare che il risultato di alcune operazioni deve essere espresso come un tipo di dati specifico anziché un tipo di dati predefinito. Utilizzare, ad esempio, CCur per eseguire calcoli aritmetici su valori di valuta nei casi in cui verrebbero utilizzati in genere calcoli in precisione singola, in precisione doppia o con interi.

Le funzioni di conversione tra tipi di dati dovrebbero essere utilizzate al posto di Val per eseguire conversioni che tengano in considerazione le impostazioni internazionali. Se si utilizza CCur, ad esempio, verranno identificati correttamente i diversi separatori decimali e delle migliaia e le varie opzioni di valuta a seconda delle impostazioni internazionali del computer.

Se la parte frazionaria è esattamente uguale a 0,5, le funzioni CInt e CLng la arrotonderanno al numero pari più prossimo. Il valore 0,5 verrà arrotondato ad esempio a 0 e il valore 1,5 a 2. A differenza di CInt e CLng, le funzioni Fix e Int non arrotondano, bensì troncano la parte frazionaria di un numero. Fix e Int, inoltre, restituiscono sempre un valore dello stesso tipo di quello passato.

Utilizzare la funzione IsDate per determinare se l'argomento data può essere convertito in data o ora. La funzione CDate riconosce i valori letterali di data e ora e anche alcuni numeri che rientrano nell'intervallo di date accettabili. Quando si converte un numero in data, la parte intera del numero verrà convertita in data. Eventuali parti frazionarie verranno convertite in ora, partendo dalla mezzanotte.

La funzione CDate riconosce i formati di data corrispondenti alle impostazioni internazionali del sistema. È possibile che l'ordine corretto di giorno, mese e anno non possa essere determinato se espresso in un formato diverso dalle impostazioni valide. Il formato di data estesa potrebbe non essere riconosciuto se include anche la stringa del giorno della settimana.

La funzione CVDate è inoltre disponibile per motivi di compatibilità con le versioni precedenti di Visual Basic. La sintassi della funzione CVDate è identica a quella della funzione CDate. A differenza della funzione CDate il risultato sarà un tipo di dati Variant il cui sottotipo è Date invece di un effettivo tipo Date. Tale funzione non è comunque più necessaria, in quanto è ora disponibile un tipo Date intrinseco. Lo stesso risultato si potrà ottenere convertendo un'espressione in Date e quindi assegnandola a un tipo di dati Variant. Questa procedura presenta caratteristiche analoghe alla conversione di tutti gli altri tipi intrinseci nei sottotipi Variant equivalenti.

Nota   La funzione CDec non restituisce un tipo di dati discreto ma un tipo Variant il cui valore è stato convertito in un sottotipo Decimal.


Valori restituiti da CStr

Se espressione è	CStr restituisce
Boolean	Una stringa contenente True o False
Date	Una stringa contenente una data nel formato breve impostato nel sistema
Null	Un errore di run-time
Empty	Una stringa di lunghezza zero ("")
Error	Una stringa contenente la parola Error seguita dal numero di errore
Altro valore numerico	Una stringa contenente il numero.


Tipo di dati Boolean

Le variabili di tipo Boolean sono memorizzate come numeri a 16 bit (2 byte) e possono essere solo True o False. Le variabili di tipo Boolean sono visualizzate come Vero o Falso quando si utilizza Print, oppure #TRUE# o #FALSE# quando si utilizza Write #. Utilizzare le parole chiave True e False per assegnare alle variabili di tipo Boolean uno dei due stati.

Quando si convertono in Boolean dati numerici, 0 diventa False e tutti gli altri valori diventano True. Quando i valori di tipo Boolean vengono convertiti in altri tipi di dati, False diventa 0 e True diventa -1.


Tipo di dati Byte

Le variabili di tipo Byte sono archiviate come unità da 8 bit (1 byte) singole e senza segno in un intervallo compreso tra 0 e 255.

Il tipo di dati Byte risulta utile per l'archiviazione di dati binari.


Tipo di dati Currency

Le variabili di tipo Currency sono memorizzate come numeri a 64 bit (8 byte) in formato intero, divise per 10.000 in modo da ottenere un numero a virgola fissa con 15 cifre alla sinistra della virgola decimale e 4 cifre alla sua destra. Con questa rappresentazione è possibile specificare un intervallo compreso tra -922.337.203.685.477,5808 e 922.337.203.685.477,5807. Il carattere di dichiarazione del tipo per Currency è il simbolo di chiocciola (@).

Il tipo di dati Currency è utile per i calcoli monetari e per calcoli a virgola fissa in cui la precisione riveste un'importanza particolare.


Riepilogo dei tipi di dati

La tabella che segue elenca i tipi di dati supportati e indica lo spazio su disco e l'intervallo valido per ciascun tipo di dati.

Tipo di dati	Spazio su disco	Intervallo
Byte	1 byte	Da 0 a 255
Boolean	2 byte	True o False
Integer	2 byte	Da -32.768 a 32.767
Long (intero lungo)	4 byte	Da -2.147.483.648 a 2.147.483.6477
Single (virgola mobile a precisione semplice)	4 byte	Da -3,402823E38 a -1,401298E-45 per valori negativi; da 1,401298E-45 a 3,402823E38 per valori positivi
Double (virgola mobile a precisione doppia)	8 byte	Da -1.79769313486231E308 a  -4,94065645841247E-324 per valori negativi; da 4,94065645841247E-324 a 1,79769313486232E308 per valori positivi.
Currency (intero diviso)	8 byte	Da -922.337.203.685.477,5808 a 922.337.203.685.477,5807
Decimal	14 byte	+/-79.228.162.514.264.337.593.543.950.335 senza virgola;  +/-7,9228162514264337593543950335 con 28 decimali; il numero minore diverso da zero è  +/-0,0000000000000000000000000001
Date	8 byte	Dall'1 gennaio 100 al 31 dicembre 9999
Object	4 byte	Qualsiasi riferimento Object
String  (lunghezza variabile)	10 byte + lunghezza stringa	Da 0 a circa 2 miliardi
String (lunghezza fissa)	Lunghezza stringa	Da 1 a circa 65.400
Variant (con numeri)	16 byte	Qualsiasi valore numerico fino all'intervallo di un Double
Variant (con caratteri)	22 byte + lunghezza stringa	Stesso intervallo di String a lunghezza variabile
Definito dall'utente (utilizzando Type)	Numero richiesto dagli elementi	L'intervallo di ciascun elemento è identico a quello del relativo tipo di dati sopraelencato.
Nota   Le matrici di qualsiasi tipo di dati richiedono 20 byte di memoria più quattro byte per ogni dimensione della matrice più il numero di byte occupati dai dati stessi. La memoria occupata dai dati può essere calcolata moltiplicando il numero di elementi dei dati per le dimensioni di ciascun elemento. I dati in una matrice unidimensionale composti da quattro elementi di dati Integer di due byte ciascuno, ad esempio, occupano otto byte. Gli otto byte richiesti dai dati più i 24 byte di overhead portano a 32 byte la memoria complessiva richiesta per la matrice.

Un tipo di dati Variant contenente una matrice richiede 12 byte in più rispetto al numero di byte richiesti dalla matrice da sola.

Nota   Utilizzare la funzione StrConv per la conversione del tipo di una stringa di dati in un altro tipo.


Tipo di dati Date

Le variabili di tipo Date sono memorizzate come numeri IEEE di 64 bit (8 byte) che rappresentano date comprese nell'intervallo fra l'1 gennaio 100 e il 31 dicembre 9999 e orari compresi fra le 0.00.00 e le 23.59.59. È possibile assegnare alle variabili Date qualsiasi valore letterale di data riconoscibile. I valori letterali di data devono essere indicate fra caratteri cancelletto (#), ad esempio #January 1, 1993# oppure #1 Jan 93#.

Le variabili Date visualizzano le date sulla base del formato di data breve riconosciuto dal sistema in uso. Gli orari vengono visualizzati, analogamente, sulla base del formato di ora riconosciuto dal sistema in uso (12 o 24 ore).

Quando altri tipi di dati numerici vengono convertiti in Date, i valori a sinistra della virgola decimale rappresentano le informazioni relative alla data, mentre i valori a destra della virgola rappresentano l'orario. Mezzanotte corrisponde a 0 e mezzogiorno a 0,5. I numeri interi negativi rappresentano le date antecedenti al 30 dicembre 1899.


Tipo di dati Decimal

Le variabili di tipo Decimal sono memorizzate come numeri interi senza segno di 96 bit (12 byte) divisi per una potenza di 10 variabile. La potenza di 10 per cui viene diviso il numero corrisponde al numero di cifre a destra della virgola ed è compresa nell'intervallo fra 0 e 28. Se il fattore di divisione è 0 (nessun decimale), il valore maggiore possibile è +/-79.228.162.514.264.337.593.543.950.335. Con 28 decimali, il valore maggiore è +/-7,9228162514264337593543950335 e il valore minore, diverso da zero, è +/-0,0000000000000000000000000001.

Nota   Attualmente il tipo di dati Decimal può essere utilizzato solo con valori Variant, ovvero non è possibile dichiarare il tipo Decimal per una variabile. È tuttavia possibile creare una Variant con sottotipo Decimal tramite la funzione CDec.


Tipo di dati Double

Le variabili di tipo Double (con virgola mobile a precisione doppia)sono memorizzate come numeri IEEE a 64 bit (8 byte) compresi nell'intervallo fra -1.79769313486231E308 e -4,94065645841247E-324 per i valori negativi, e fra 4,94065645841247E-324 e 1,79769313486232E308 per quelli positivi. Il carattere di dichiarazione del tipo per Double è il simbolo di numero (#).


Tipo di dati Integer

Le variabili di tipo Integersono memorizzate come numeri a 16 bit (2 byte) compresi nell'intervallo fra -32.768 e 32.767. Il carattere di dichiarazione del tipo per Integer è il segno di percentuale (%).

Le variabili di tipo Integer possono inoltre essere utilizzate per indicare valori enumerati. Un valore enumerato può contenere un gruppo finito di numeri interi univoci, ognuno dei quali possiede un significato specifico nel contesto in cui viene utilizzato. I valori enumerati consentono di eseguire una selezione in modo rapido all'interno di un numero noto di scelte diverse. Quando, ad esempio, viene richiesto all'utente di selezionare un colore da un elenco, è possibile definire 0 = nero, 1 = bianco e così via. Nella programmazione, è consigliabile definire le costanti utilizzando l'istruzione Const per ciascun valore enumerato.


Tipo di dati Long

Le variabili di tipo Long (a intero lungo) sono memorizzate come numeri con segno a 32 bit (4 byte) compresi nell'intervallo fra -2.147.483.648 e 2.147.483.647. Il carattere di dichiarazione del tipo per Long è la "e" commerciale (&).


Tipo di dati Object

Le variabili di tipo Object sono memorizzate come indirizzi di 32 bit (4 byte) riferiti a oggetti. A una variabile dichiarata come Object è possibile assegnare qualsiasi riferimento a un oggetto mediante l'istruzione Set.

Nota   Sebbene una variabile dichiarata di tipo Object sia sufficientemente flessibile per contenere un riferimento a qualsiasi oggetto, l'associazione all'oggetto a cui fa riferimento la variabile è sempre tardiva (associazione in fase di esecuzione). Per ottenere un'associazione anticipata (associazione in fase di compilazione), assegnare il riferimento all'oggetto a una variabile dichiarata con un nome di classe specifico.


Tipo di dati Single

Le variabili di tipo Single (con virgola mobile a precisione singola) sono memorizzate come numeri IEEE di 32 bit (4 byte) compresi nell'intervallo fra -3,402823E38 e -1,401298E-45 per i valori negativi e fra 1,401298E-45 e 3,402823E38 per quelli positivi. Il carattere di dichiarazione del tipo per Single è il punto esclamativo (!).


Tipo di dati String

Esistono due tipi di stringa:

•	Stringhe di lunghezza variabile, che possono contenere fino a circa 2 miliardi (2^31) di caratteri.

•	Stringhe di lunghezza fissa, che possono contenere da 1 a circa 64 KB (2^16) di caratteri.

Nota   Una stringa di lunghezza fissa di tipo Public non può essere utilizzata in un modulo di classe.

I codici per i caratteri String sono compresi fra 0 e 255. I primi 128 caratteri (0-127) del set di caratteri corrispondono alle lettere e ai simboli di una tastiera standard americana. Questi primi 128 caratteri sono gli stessi definiti dal set di caratteri ASCII. I successivi 128 caratteri (128-255) sono caratteri speciali, quali lettere di alfabeti internazionali, accenti, simboli di valuta e frazioni.Il carattere di dichiarazione del tipo per String è il simbolo del dollaro ($).


Tipi di dati definiti dall'utente

Qualsiasi tipo di dati definito utilizzando l'istruzione Type. I tipi di dati definiti dall'utente possono contenere uno o più elementi di qualsiasi tipo di dati, tipo di matrice o di un tipo di dati precedentemente definito dall'utente, ad esempio:

Type MyType

MyName As String	' La variabile String memorizza un nome.

MyBirthDate As Date	' La variabile Date memorizza un compleanno.

MySex As Integer	' La variabile Integer memorizza il sesso

End Type	' (0 per femminile, 1 per maschile).


Tipo di dati Variant

Il tipo di dati Variant è il tipo di dati in cui vengono trasformate tutte le variabili se non sono dichiarate esplicitamente come tipo diverso utilizzando istruzioni quali Dim, Private, Public o Static. Il tipo di dati Variant non ha un carattere di dichiarazione del tipo specifico.

Variant è un tipo di dati speciale che può contenere qualsiasi tipo di dati a eccezione dei dati String a lunghezza fissa e dei dati di tipo definito dall'utente. Variant può inoltre contenere i valori speciali Empty, Error, Nothing e Null. Utilizzando la funzione VarType o TypeName è possibile determinare come vengono gestiti i dati nel tipo Variant.

I dati numerici possono essere valori numerici interi o reali compresi nell'intervallo fra -1,797693134862315E308 e -4,94066E-324 per i valori negativi, e fra 4,94066E-324 e 1,797693134862315E308 per quelli positivi. Per i dati numerici di tipo Variant viene in genere conservato il relativo tipo di dati originale all'interno di Variant. Se, ad esempio, si assegna un Integer a un tipo di dati Variant, le operazioni successive tratteranno Variant come se fosse un Integer. Tuttavia, se viene eseguita un'operazione aritmetica in un tipo Variant contenente dati di tipo Byte, Integer, Long o Single e il risultato non rientra nell'intervallo normale del tipo di dati originale, all'interno di Variant il risultato verrà trasformato nel successivo tipo di dati di maggiori dimensioni. Byte verrà trasformato in Integer, Integer verrà trasformato in Long, mentre Long e Single verranno trasformati in Double. Se le variabili di tipo Variant contenenti valori Currency, Decimal e Double non rientrano nei rispettivi intervalli, verrà generato un errore.

È possibile utilizzare il tipo di dati Variant al posto di qualsiasi tipo di dati per gestire i dati in modo più flessibile. Se il contenuto di una variabile Variant è rappresentato da cifre, queste possono essere una rappresentazione in forma di stringa delle cifre o il loro effettivo valore, a seconda del contesto. Ad esempio:

Dim MyVar As Variant

MyVar = 98052

Nell'esempio, MyVar contiene una rappresentazione numerica, ovvero il valore effettivo 98052. Gli operatori aritmetici funzionano nel modo previsto con le variabili di tipo Variant che contengono valori numerici o dati di stringa interpretabili come numeri. Utilizzando l'operatore + per aggiungere MyVar a un'altra Variant contenente un numero oppure a una variabile di un tipo di dati numerico, il risultato sarà una somma aritmetica.

Il valore Empty denota una variabile Variant che non è stata inizializzata, ovvero a cui non è stato assegnato un valore iniziale. Un tipo di dati Variant che contiene Empty è 0 se utilizzato in un contesto numerico, è invece una stringa di lunghezza zero ("") se utilizzato all'interno di una stringa.

Non confondere Empty con Null. Null indica che la variabile Variant non contiene volutamente dati validi.

In un tipo di dati Variant, Error è un valore speciale utilizzato per indicare che in una routine si è verificata una condizione di errore. Tuttavia, diversamente da altri tipi di errore, non è prevista una normale gestione degli errori a livello di applicazione. Questo consente al programmatore o all'applicazione stessa di scegliere un'alternativa basata sul valore di errore. I valori di Error vengono creati convertendo numeri reali in valori di errore tramite la funzione CVErr.


Esempio di funzione Date

In questo esempio la funzione Date viene utilizzata per restituire la data corrente di sistema.

Dim MyDate

MyDate = Date	' MyDate contiene la data corrente di sistema.


Esempio di istruzione Date

In questo esempio l'istruzione Date viene utilizzata per impostare la data di sistema. Nella programmazione, il valore letterale di data verrà visualizzato in formato breve sulla base delle impostazioni internazionali del codice.

Dim MyDate

MyDate = #Febbraio 12, 1985#	' Assegna una data.

Date = MyDate	' Cambia la data di sistema.


Esempio di funzione DateAdd

In questo esempio la funzione DateAdd viene utilizzata per visualizzare una data successiva ad una data specificata del numero di mesi indicato.

Dim FirstDate As Date	' Dichiara le variabili.

Dim IntervalType As String

Dim Number As Integer

Dim Msg

IntervalType = "m"	' "m" specifica i mesi come intervallo.

FirstDate = InputBox("Digitare una data")

Number = InputBox("Digitare il numero di mesi da aggiungere")

Msg = "Nuova data: " & DateAdd(IntervalType, Number, FirstDate)

MsgBox Msg


Esempio di funzione DateDiff

In questo esempio la funzione DateDiff viene utilizzata per visualizzare il numero di giorni che intercorre tra una data e la data odierna.

Dim TheDate As Date	' Dichiara le variabili.

Dim Msg

TheDate = InputBox("Digitare una data")

Msg = "Giorni dalla data odierna: " & DateDiff("d", Now, TheDate)

MsgBox Msg


Esempio di funzione DatePart

In questo esempio la funzione DatePart viene utilizzata per determinare in quale trimestre cade una determinata data.

Dim TheDate As Date	' Dichiara le variabili.

Dim Msg

TheDate = InputBox("Digitare una data:")

Msg = "Trimestre: " & DatePart("q", TheDate)

MsgBox Msg


Esempio di funzione DateSerial

In questo esempio la funzione DateSerial viene utilizzata per restituire la data relativa all'anno, al mese e al giorno specificati.

Dim MyDate

' MyDate contiene la data corrispondente

' al 12 febbraio 1969.

MyDate = DateSerial(1969, 2, 12)	' Restituisce una data.


Esempio di funzione DateValue

In questo esempio la funzione DateValue viene utilizzata per convertire una stringa in data. È inoltre possibile utilizzare valori letterali di data per assegnare direttamente una data ad una variabile Variant o Date, ad esempio, MyDate = #2/12/69#.

Dim MyDate

MyDate = DateValue("12 febbraio 1969")	' Restituisce una data.


Esempio di funzione Day

In questo esempio la funzione Day viene utilizzata per ottenere il giorno del mese da una data specificata. Nella programmazione, il valore letterale di data verrà visualizzato in formato breve sulla base delle impostazioni internazionali del codice.

Dim MyDate, MyDay

MyDate = #Febbraio 12, 1969#	' Assegna una data.

MyDay = Day(MyDate)	' MyDay contiene 12.


Esempio di funzione Hour

In questo esempio la funzione Hour viene utilizzata per ottenere l'ora da un orario specificato. Nella programmazione, il valore letterale di orario verrà visualizzato in formato breve sulla base delle impostazioni internazionali del codice.

Dim MyTime, MyHour

MyTime = #4:35:17 PM#	' Assegna un orario.

MyHour = Hour(MyTime)	' MyHour contiene 16.


Esempio di funzione Minute

In questo esempio la funzione Minute viene utilizzata per ottenere i minuti dell'ora da un orario specificato. Nella programmazione, il valore letterale di orario verrà visualizzato in formato breve sulla base delle impostazioni internazionali del codice.

Dim MyTime, MyMinute

MyTime = #4:35:17 PM#	' Assegna un orario.

MyMinute = Minute(MyTime)	' MyMinute contiene 35.


Esempio di funzione Month

In questo esempio la funzione Month viene utilizzata per ottenere il mese da una data specificata. Nella programmazione, il valore letterale di data verrà visualizzato in formato breve sulla base delle impostazioni internazionali del codice.

Dim MyDate, MyMonth

MyDate = #Febbraio 12, 1969#	' Assegna una data.

MyMonth = Month(MyDate)	' MyMonth contiene 2.


Esempio di funzione Now

In questo esempio la funzione Now viene utilizzata per restituire la data e l'ora correnti di sistema.

Dim Today

Today = Now	' Restituisce la data e l'ora correnti.


Esempio di funzione Second

In questo esempio la funzione Second viene utilizzata per ottenere i secondi del minuto da un orario specificato. Nella programmazione, il valore letterale di orario verrà visualizzato in formato breve sulla base delle impostazioni internazionali del codice.

Dim MyTime, MySecond

MyTime = #4:35:17 PM#	' Assegna un orario.

MySecond = Second(MyTime)	' MySecond contiene 17.


Esempio di funzione Time

In questo esempio la funzione Time viene utilizzata per restituire l'ora corrente di sistema.

Dim MyTime

MyTime = Time	' Restituisce l'ora corrente di sistema.


Esempio di istruzione Time

In questo esempio l'istruzione Time viene utilizzata per impostare l'ora di sistema su un'ora definita dall'utente.

Dim MyTime

MyTime = #4:35:17 PM#	' Assegna un orario.

Time = MyTime	' Imposta l'ora di sistema su MyTime.


Esempio di funzione Timer

In questo esempio la funzione Timer viene utilizzata per interrompere temporaneamente l'applicazione. Viene inoltre utilizzata la funzione DoEvents per passare il controllo dall'applicazione ad altri processi durante la pausa.

Dim PauseTime, Start, Finish, TotalTime

If (MsgBox("Scegliere Sì per interrompere l'applicazione per 5 secondi", 4)) = vbYes Then

PauseTime = 5	' Imposta la durata.

Start = Timer	' Imposta l'ora di inizio.

Do While Timer < Start + PauseTime

DoEvents	' Passa il controllo ad altri processi.

Loop

Finish = Timer	' Imposta l'ora di fine della pausa.

TotalTime = Finish - Start	' Calcola il tempo totale.

MsgBox "Interruzione di " & TotalTime & " secondi"

Else

End

End If


Esempio di funzione TimeSerial

In questo esempio la funzione TimeSerial viene utilizzata per restituire un orario per l'ora, i minuti e i secondi specificati.

Dim MyTime

MyTime = TimeSerial(16, 35, 17)	' MyTime contiene una rappresentazione

' seriale dell'orario 16.35.17.


Esempio di funzione TimeValue

In questo esempio la funzione TimeValue viene utilizzata per convertire una stringa in orario. È inoltre possibile utilizzare valori letterali di data per assegnare direttamente un'ora ad una variabile di tipo Variant o Date, ad esempio MyTime = #4:35:17 PM#.

Dim MyTime

MyTime = TimeValue("16.35.17")	' Restituisce l'orario.


Esempio di funzione Weekday

In questo esempio la funzione Weekday viene utilizzata per ottenere il giorno della settimana da una data specificata.

Dim MyDate, MyWeekDay

MyDate = #Febbraio 12, 1969#	' Assegna una data.

MyWeekDay = Weekday(MyDate)	' MyWeekDay contiene 4, valore

' che corrisponde a mercoledì.


Esempio di funzione Year

In questo esempio la funzione Year viene utilizzata per ottenere l'anno da una data specificata. Nella programmazione, il valore letterale di data verrà visualizzato in formato breve sulla base delle impostazioni internazionali del codice.

Dim MyDate, MyYear

MyDate = #Febbraio 12, 1969#	' Assegna una data.

MyYear = Year(MyDate)	' MyYear contiene 1969.


Funzione Date

Restituisce un valore Variant (Date) che contiene la data corrente di sistema.

Sintassi

Date

Osservazioni

Per impostare la data di sistema, utilizzare l'istruzione Date.

La funzionalità dell'istruzione Date, e se è in uso il calendario Gregoriano, di Date$ non viene modificato dall'impostazione della proprietà Calendar. Se è in uso il calendario Hijri, Date$ restituisce una stringa di 10 caratteri nel formato mm-dd-yyyy, dove mm (da 01 a 12), dd (da 01 a 30) e yyyy (da 1400 a 1523) corrispondono al mese, giorno e anno Hijri. L'intervallo equivalente nel calendario Gregoriano è dall'1 gennaio 1980 al 31 dicembre 2099.


Istruzione Date

Imposta la data di sistema corrente.

Sintassi

Date = data

Nei computer che eseguono Microsoft Windows 95 l’argomento data deve essere una data compresa tra l’1 gennaio 1980 e il 31 dicembre 2099. Nei computer che eseguono Microsoft Windows NT, l'argomento data deve essere una data compresa tra l'1 gennaio 1980 e il 31 dicembre 2079. In Macintosh, l'argomento data deve essere una data compresa tra l'1 gennaio 1904 e il 5 febbraio 2040.


Funzione DateAdd

Restituisce un valore Variant (Date) contenente una data alla quale è stato aggiunto un intervallo di tempo specificato.

Sintassi

DateAdd(interval, number, date)

La sintassi della funzione DateAdd è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
interval	Obbligatoria. Espressione stringa corrispondente all'intervallo di tempo che si desidera aggiungere.
number	Obbligatoria. Espressione numerica corrispondente al numero di intervalli da aggiungere. Può essere positiva, per ottenere date future, oppure negativa, per ottenere date passate.
date	Obbligatoria. Valore Variant (Date) o stringa che rappresenta una data a cui viene aggiunto l'intervallo.
Impostazioni

Le possibili impostazioni dell’argomento interval sono:

Impostazione	Descrizione
yyyy	Anno
q	Trimestre
m	Mese
y	Giorno dell’anno
d	Giorno
w	Giorno della settimana
ww	Settimana
h	Ora
n	Minuti
s	Secondi
Osservazioni

La funzione DateAdd consente di aggiungere o sottrarre da una data un intervallo di tempo specificato. È, ad esempio, possibile utilizzare DateAdd per determinare la data risultante dall'aggiunta di 30 giorni alla data odierna oppure l'orario risultante dall'aggiunta di 45 minuti all'ora corrente.

Per aggiungere giorni a date, è possibile utilizzare l'impostazione per il giorno dell'anno ("y"), per il giorno ("d") o per il giorno della settimana ("w").

La funzione DateAdd non restituisce una data non valida. In questo esempio, alla data 31 gennaio viene aggiunto un mese:

DateAdd("m", 1, "31-gen-95")

In questo caso, DateAdd restituirà 28-feb-95 e non 31-feb-95. Se date è 31-gen-96, la funzione restituirà 29-feb-96, in quanto il 1996 è un anno bisestile.

Se la data calcolata precede l'anno 100, vale a dire se si sottrae un numero di anni maggiore di quello presente in date, verrà generato un errore.

Se number non è un valore Long, prima di essere valutato verrà arrotondato al numero intero più vicino.

Nota   Il formato del valore restituito dalla funzione DateAdd dipende dalle impostazioni del Pannello di controllo e non dal formato passato dall'argomento date.

Nota   Per data, se la proprietà Calendar è impostata sul calendario Gregoriano, è necessario specificare una data Gregoriana. Se invece la proprietà è impostata sul calendario Hijri, è necessario specificare una data Hijri. Se per i valori dei mesi vengono utilizzati nomi, questi devono essere appropriati per l'impostazione della proprietà Calendar. Per ridurre al minimo il rischio di conflitti tra nomi con l'impostazione corrente della proprietà Calendar, specificare il mese utilizzando valori numerici (formato di data breve).


Funzione DateDiff

Restituisce un valore Variant (Long) corrispondente al numero di intervalli di tempo tra due date specificate.

Sintassi

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

La sintassi della funzione DateDiff è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
interval	Obbligatoria. Espressione stringa corrispondente all'intervallo di tempo utilizzato per calcolare la differenza tra date1 e date2.
date1, date2	Obbligatoria. Variant (Date). Date da utilizzare nel calcolo.
firstdayofweek	Facoltativa. Costante che specifica il primo giorno della settimana. Se non è specificata, verrà utilizzata Domenica.
firstweekofyear	Facoltativa. Costante che specifica la prima settimana dell'anno. Se non è specificata, verrà utilizzata la settimana nella quale cade il 1 gennaio.
Impostazioni

Le possibili impostazioni dell’argomento interval sono:

Impostazione	Descrizione
yyyy	Anno
q	Trimestre
m	Mese
y	Giorno dell’anno
d	Giorno
w	Giorno della settimana
ww	Settimana
h	Ora
n	Minuti
s	Secondi
Le possibili impostazioni dell’argomento firstdayofweek sono le seguenti:

Costante	Valore	Descrizione
vbUseSystem	0	Utilizza l'impostazione dell'API NLS.
vbSunday	1	Domenica (predefinita)
vbMonday	2	Lunedì
vbTuesday	3	Martedì
vbWednesday	4	Mercoledì
vbThursday	5	Giovedì
vbFriday	6	Venerdì
vbSaturday	7	Sabato
Costante	Valore	Descrizione
vbUseSystem	0	Utilizza l'impostazione dell'API NLS.
vbFirstJan1	1	Inizia con la settimana comprendente il 1 gennaio (predefinita).
vbFirstFourDays	2	Inizia con la prima settimana di almeno quattro giorni.
vbFirstFullWeek	3	Inizia con la prima settimana completa dell'anno.
Osservazioni

È possibile utilizzare la funzione DateDiff per determinare quanti intervalli di tempo specificati esistono tra due date. È, ad esempio, possibile utilizzare DateDiff per calcolare il numero di giorni che intercorrono tra due date oppure il numero di settimane tra la data odierna e la fine dell'anno.

Per ottenere il numero di giorni tra date1 e date2 è possibile utilizzare sia l'impostazione del giorno dell'anno ("y") che quella del giorno ("d"). Quando per interval viene impostato il giorno della settimana ("w"), DateDiff restituisce il numero di settimane che intercorrono tra le due date. Se date1 cade di lunedì, DateDiff conterà il numero di lunedì fino a date2, includendo nel conteggio date2 ma non date1. Se per interval viene invece impostata la settimana ("ww"), la funzione DateDiff restituirà il numero di settimane del calendario comprese tra le due date. La funzione conterà il numero di domeniche che intercorrono tra date1 e date2, includendo nel conteggio date2 se cade di domenica, ma non date1, anche se cade di domenica.

Se date1 è successiva a date2, la funzione DateDiff restituirà un numero negativo.

L’argomento firstdayofweek ha effetto sui calcoli che utilizzano i simboli di intervallo "w" e "ww".

Se date1 o date2 è un valore letterale di data, l'anno, se specificato, diventa parte permanente della data. Se tuttavia date1 o date2 è racchiuso tra virgolette doppie ("") e si omette l'anno, ogni volta che l'espressione date1 o date2 viene valutata verrà inserito nel codice l'anno corrente. Ciò rende possibile la scrittura di codice utilizzabile per anni diversi.

Quando si esegue il confronto tra il 31 dicembre e l'1 gennaio dell'anno immediatamente successivo, DateDiff utilizzata con l'impostazione dell'anno ("yyyy") restituisce 1 anche se è trascorso un solo giorno.

Nota   Per date1 e date2, se la proprietà Calendar è impostata sul calendario Gregoriano, è necessario specificare una data Gregoriana. Se invece è impostata sul calendario Hijri, è necessario specificare una data Hijri.


Funzione DatePart

Restituisce un valore Variant (Integer) contenente la parte specificata di una data.

Sintassi

DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

La sintassi della funzione DatePart è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
interval	Obbligatoria. Espressione stringa corrispondente all'intervallo di tempo che si desidera restituire.
date	Obbligatoria. Valore Variant (Date) che si desidera valutare.
firstdayofweek	Facoltativa. Costante che specifica il primo giorno della settimana. Se non è specificata, verrà utilizzata Domenica.
firstweekofyear	Facoltativa. Costante che specifica la prima settimana dell'anno. Se non è specificata, verrà utilizzata la settimana nella quale cade l'1 gennaio.
Impostazioni

Le possibili impostazioni dell’argomento interval sono:

Impostazione	Descrizione
yyyy	Anno
q	Trimestre
m	Mese
y	Giorno dell’anno
d	Giorno
w	Giorno della settimana
ww	Settimana
h	Ora
n	Minuti
s	Secondi
Le possibili impostazioni dell’argomento firstdayofweek sono le seguenti:

Costante	Valore	Descrizione
vbUseSystem	0	Utilizza l'impostazione dell'API NLS.
vbSunday	1	Domenica (predefinita)
vbMonday	2	Lunedì
vbTuesday	3	Martedì
vbWednesday	4	Mercoledì
vbThursday	5	Giovedì
vbFriday	6	Venerdì
vbSaturday	7	Sabato
Le possibili impostazioni dell’argomento firstweekofyear sono le seguenti:

Costante	Valore	Descrizione
vbUseSystem	0	Utilizza l'impostazione dell'API NLS.
vbFirstJan1	1	Inizia con la settimana comprendente l'1 gennaio (predefinita).
vbFirstFourDays	2	Inizia con la prima settimana di almeno quattro giorni.
vbFirstFullWeek	3	Inizia con la prima settimana completa dell'anno.
Osservazioni

La funzione DatePart consente di valutare una data e di restituire un intervallo di tempo specifico. Tale funzione è utilizzabile, ad esempio, per calcolare il giorno della settimana o l'ora corrente.

L’argomento firstdayofweek ha effetto sui calcoli che utilizzano i simboli di intervallo "w" e "ww".

Se la data è un valore letterale di data, l'anno, se specificato, diventa parte permanente della data. Se tuttavia la data è racchiusa tra virgolette doppie ("") e si omette l'anno, ogni volta che l'espressione della data viene valutata verrà inserito nel codice l'anno corrente. Ciò rende possibile la scrittura di codice utilizzabile per anni diversi.

Nota   Per data, se la proprietà Calendar è impostata sul calendario Gregoriano, è necessario specificare una data Gregoriana. Se invece la proprietà è impostata sul calendario Hijri, è necessario specificare una data Hijri.

La parte di data restituita corrisponde alle unità di tempo del calendario corrente. Se, ad esempio, il calendario corrente è il calendario Hijri e la parte di data da restituire è l'anno, il valore dell'anno sarà un anno Hijri.


Funzione DateSerial

Restituisce un valore Variant (Date) relativo a un anno, mese e giorno specificati.

Sintassi

DateSerial(year, month, day)

La sintassi della funzione DateSerial è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
year	Obbligatoria. Integer. Numero compreso tra 100 e 9999 inclusi, oppure un'espressione numerica.
month	Obbligatoria. Integer. Qualsiasi espressione numerica.
day	Obbligatoria. Integer. Qualsiasi espressione numerica.
Osservazioni

Per indicare una data specifica, ad esempio il 31 dicembre 1991, ciascun argomento DateSerial dovrà essere rappresentato da un numero incluso nell'intervallo di valori validi per quell'argomento. I valori validi per i giorni vanno da 1 a 31, per i mesi da 1 a 12. È inoltre possibile specificare date relative per ciascun argomento utilizzando un'espressione numerica che rappresenti un certo numero di giorni, mesi o anni prima o dopo una certa data.

In questo esempio vengono utilizzate espressioni numeriche al posto di numeri di data assoluti. La funzione DateSerial visualizzerà la data di un giorno precedente il primo giorno (1 - 1), di un mese, che precede agosto di due mesi (8 - 2), di un anno che precede il 1990 di 10 anni (1990 - 10). In altre parole, il 31 maggio 1980.

DateSerial(1990 - 10, 8 - 2, 1 - 1)

In Windows 98 o Windows 2000 gli anni a due cifre per l'argomento year vengono interpretati in base alle impostazioni definite dall'utente nel computer. In base alle impostazioni predefinite, i valori tra 0 e 29 inclusi vengono interpretati come 2000-2029. I valori predefiniti tra 30 e 99 vengono interpretati come 1930-1999. Per tutti gli altri argomenti year, utilizzare il formato a quattro cifre, ad esempio 1800.

Nelle versioni precedenti di Windows gli anni a due cifre vengono interpretati in base alle impostazioni predefinite sopraindicate. Per assicurarsi che la funzione restituisca il valore appropriato, specificare l'anno nel formato a quattro cifre.

Se un qualsiasi argomento non rientra nell'intervallo valido specifico dell'argomento, verrà incrementato all'unità superiore successiva in modo appropriato. Se, ad esempio, si specificano 35 giorni, tale valore verrà valutato come un mese e un numero di giorni variabile a seconda del momento dell’anno in cui viene applicato. Se, tuttavia, un solo argomento non rientra nell'intervallo compreso tra -32.768 e 32.767 o se i tre argomenti che specificano la data non rientrano nell'intervallo di date valide, verrà generato un errore.

Nota   Per year, month e day, se la proprietà Calendar è impostata sul calendario Gregoriano, viene presupposto che il valore specificato sia un valore Gregoriano. Se invece la proprietà è impostata sul calendario Hijri, viene presupposto che il valore specificato sia un valore Hijri.

La parte di data restituita corrisponde alle unità di tempo del calendario di Visual Basic corrente. Se, ad esempio, il calendario corrente è il calendario Hijri e la parte di data da restituire è l'anno, il valore dell'anno sarà un anno Hijri. Per l'argomento year, i valori compresi tra 0 e 99 inclusi vengono interpretati come anni compresi tra 1400 e 1499. Per tutti gli altri valori di year, specificare l'anno nel formato a quattro cifre, ad esempio 1520.


Funzione DateValue

Restituisce un valore Variant (Date).

Sintassi

DateValue(data)

L’argomento obbligatorio data è di solito un’espressione stringa che rappresenta una data compresa tra l'1 gennaio 100 e il 31 dicembre 9999. Data può essere tuttavia una qualsiasi espressione che rappresenta una data o un orario compresi in tale intervallo.

Osservazioni

Se data è una stringa che include solo numeri delimitati da separatori di data validi, DateValue interpreterà l'ordine di giorno, mese e anno in base al formato di data abbreviata impostato nel sistema. DateValue riconosce inoltre date inequivocabili che includono nomi dei mesi sia in formato esteso che in formato abbreviato. Oltre a date tipo 30/12/1991 e 30/12/91, la funzione DateValue riconosce ad esempio anche i formati 30 dicembre 1991 e 30 dic 1991.

Se nell’argomento data viene omesso l’anno, DateValue utilizza l'anno corrente della data di sistema.

Se l’argomento data include anche un orario, tale valore non verrà restituito da DateValue. Se l’argomento data include un orario errato, quale ad esempio "89.98", verrà generato un errore.

Nota   Per data, se la proprietà Calendar è impostata sul calendario Gregoriano, è necessario specificare una data Gregoriana. Se invece la proprietà è impostata sul calendario Hijri, è necessario specificare una data Hijri. Se si specifica una data Hijri, l'argomento data corrisponde a un valore String che rappresenta una data compresa tra 1/1/100 (2 agosto 718 nel calendario Gregoriano) a 4/3/9666 (31 dicembre 9999 nel calendario Gregoriano).


Funzione Day

Restituisce un valore Variant (Integer) che specifica un numero intero compreso tra 1 e 31 inclusi che rappresenta il giorno del mese.

Sintassi

Day(data)

L’argomento obbligatorio data può essere un qualsiasi valore Variant, espressione numerica o espressione stringa in una qualsiasi combinazione che rappresenti una data. Se data contiene Null, la funzione restituisce Null.

Nota   Se la proprietà Calendar è impostata sul calendario Gregoriano, l'intero restituito rappresenta il giorno del mese Gregoriano per l'argomento data. Se invece la proprietà è impostata sul calendario Hijri, l'intero restituito rappresenta il giorno del mese Hijri per l'argomento data.


Funzione Hour

Restituisce un valore di tipo Variant (Integer) che specifica un numero intero compreso tra 0 e 23 inclusi corrispondente a un'ora del giorno.

Sintassi

Hour(orario)

L’argomento obbligatorio orario può essere qualsiasi valore Variant, espressione numerica o espressione stringa in una qualsiasi combinazione che rappresenti un orario. Se orario contiene Null, la funzione restituisce Null.


Funzione Minute

Restituisce un valore Variant (Integer) che specifica un numero intero compreso tra 0 e 59 inclusi, corrispondente a un minuto dell’ora.

Sintassi

Minute(orario)

L’argomento obbligatorio orario può essere qualsiasi valore Variant, espressione numerica o espressione stringa in una qualsiasi combinazione che rappresenti un orario. Se orario contiene Null, la funzione restituisce Null.


Funzione Month

Restituisce un valore Variant (Integer) che specifica un numero intero compreso tra 1 e 12 inclusi, corrispondente al mese dell’anno.

Sintassi

Month(data)

L’argomento obbligatorio data può essere qualsiasi valore Variant, espressione numerica o espressione stringa, in una qualsiasi combinazione che rappresenti una data. Se data contiene Null, la funzione restituisce Null.

Nota   Se la proprietà Calendar è impostata sul calendario Gregoriano, l'intero restituito rappresenta il giorno della settimana Gregoriano per l'argomento data. Se invece la proprietà è impostata sul calendario Hijri, l'intero restituito rappresenta il giorno della settimana Hijri per l'argomento data. Nel caso di date Hijri, il numero dell'argomento è un'espressione numerica che rappresenta una data e/o ora compresa tra 1/1/100 (2 agosto 718 nel calendario Gregoriano) a 4/3/9666 (31 dicembre 9999 nel calendario Gregoriano).


Funzione Now

Restituisce un valore Variant (Date) che specifica la data e l’ora correnti in base all'impostazione dell’ora e della data di sistema.

Sintassi

Now


Funzione Second

Restituisce un valore Variant (Integer) che specifica un numero intero compreso tra 0 e 59 inclusi, corrispondente ai secondi di un minuto.

Sintassi

Second(orario)

L’argomento obbligatorio orario può essere qualsiasi valore Variant, espressione numerica o espressione stringa in una qualsiasi combinazione che rappresenti un orario. Se orario contiene Null, la funzione restituisce Null.


Funzione Time

Restituisce un valore Variant (Date) che indica l’ora di sistema corrente.

Sintassi

Time

Osservazioni

Per impostare l’ora di sistema, utilizzare l’istruzione Time.


Istruzione Time

Imposta l’ora di sistema.

Sintassi

Time = orario

L’argomento obbligatorio orario può essere qualsiasi espressione numerica o espressione stringa in una qualsiasi combinazione che rappresenti un orario.

Osservazioni

Se orario è una stringa, Time prova a convertirlo utilizzando i separatori di ora impostati nel sistema. Nel caso in cui non possa essere convertito in un orario valido, verrà generato un errore.


Funzione Timer

Restituisce un valore Single che rappresenta il numero di secondi trascorsi dalla mezzanotte.

Sintassi

Timer

Osservazioni

In Microsoft Windows, la funzione Timer restituisce frazioni di secondo. In Macintosh, la risoluzione del timer è pari a un secondo.


Funzione TimeSerial

Restituisce un valore Variant (Date) che contiene l’orario corrispondente a un’ora, minuto e secondo specifici.

Sintassi

TimeSerial(hour, minute, second)

La sintassi della funzione TimeSerial è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
hour	Obbligatoria. Variant (Integer). Numero compreso tra 0 (12.00) e 23 (23.00) inclusi oppure un'espressione numerica.
minute	Obbligatoria. Variant (Integer). Qualsiasi espressione numerica.
second	Obbligatoria. Variant (Integer). Qualsiasi espressione numerica.
Osservazioni

Per indicare un'ora specifica, quale 11.59.59, ciascun argomento della funzione TimeSerial dovrà essere rappresentato da un numero incluso nell'intervallo di valori validi per quell'argomento. I valori validi per le ore vanno da 0 a 23, per i minuti e per i secondi da 0 a 59. È inoltre possibile specificare ore relative per ciascun argomento utilizzando un'espressione numerica che rappresenti il numero delle ore, dei minuti o dei secondi prima o dopo una certa ora. In questo esempio vengono utilizzate espressioni anziché numeri assoluti. La funzione TimeSerial restituisce un'ora che corrisponde a sei ore (12 - 6) e a 15 minuti (0 - 15) prima di mezzogiorno, ovvero le 5.45.00.

TimeSerial(12 - 6, -15, 0)

Se un qualsiasi argomento non rientra nell'intervallo valido specifico dell'argomento, verrà incrementato all'unità superiore successiva in modo appropriato. Se si specifica, ad esempio, 75 minuti, l'argomento verrà valutato come 1 ora e 15 minuti. Se, tuttavia, un solo argomento non rientra nell'intervallo compreso tra -32.768 e 32.767 o se i tre argomenti che specificano l'orario non rientrano nell'intervallo di orari validi, verrà generato un errore.


Funzione TimeValue

Restituisce un valore Variant (Date) contenente un orario.

Sintassi

TimeValue(orario)

L'argomento obbligatorio orario è in genere un'espressione stringa che rappresenta un'ora compresa fra 0.00.00 e 23.59.59. L'argomento orario può comunque essere una qualsiasi espressione che rappresenta un orario compreso in tale intervallo. Se orario contiene Null, la funzione restituisce Null.

Osservazioni

È possibile inserire ore valide utilizzando il formato a 12 o a 24 ore. I valori "2:24PM" e "14:24" sono entrambi validi.

Se l'argomento orario contiene anche la data, la funzione TimeValue non la visualizza. Se invece l'argomento orario include una data non valida, verrà generato un errore.


Funzione Weekday

Restituisce un valore Variant (Integer) che contiene un numero intero corrispondente al giorno della settimana.

Sintassi

Weekday(date, [firstdayofweek])

La sintassi della funzione Weekday è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
date	Obbligatoria. Variant, espressione numerica o espressione stringa, in una qualsiasi combinazione che rappresenti una data. Se date contiene Null, la funzione restituisce Null.
firstdayofweek	Facoltativa. Costante che specifica il primo giorno della settimana. Se l'argomento viene omesso, verrà utilizzata la costante vbSunday.
Impostazioni

Le possibili impostazioni dell'argomento firstdayofweek sono:

Costante	Valore	Descrizione
vbUseSystem	0	Utilizza l'impostazione NLS API.
vbSunday	1	Domenica (predefinita)
vbMonday	2	Lunedì
vbTuesday	3	Martedì
vbWednesday	4	Mercoledì
vbThursday	5	Giovedì
vbFriday	6	Venerdì
vbSaturday	7	Sabato
Valori restituiti

I valori restituiti dalla funzione Weekday possono essere i seguenti:

Costante	Valore	Descrizione
vbSunday	1	Domenica
vbMonday	2	Lunedì
vbTuesday	3	Martedì
vbWednesday	4	Mercoledì
vbThursday	5	Giovedì
vbFriday	6	Venerdì
vbSaturday	7	Sabato
Osservazioni

Se la proprietà Calendar è impostata sul calendario Gregoriano, l'intero restituito rappresenta il giorno della settimana Gregoriano per l'argomento data. Se invece la proprietà è impostata sul calendario Hijri, l'intero restituito rappresenta il giorno della settimana Hijri per l'argomento data. Nel caso di date Hijri, il numero dell'argomento è un'espressione numerica che rappresenta una data e/o ora compresa tra 1/1/100 (2 agosto 718 nel calendario Gregoriano) a 4/3/9666 (31 dicembre 9999 nel calendario Gregoriano).


Funzione Year

Restituisce un valore Variant (Integer) che contiene un numero intero corrispondente a un anno.

Sintassi

Year(data)

L'argomento obbligatorio data può essere qualsiasi valore Variant, espressione numerica o espressione stringa, in una qualsiasi combinazione che rappresenti una data. Se data contiene Null, la funzione restituisce Null.

Nota   Se la proprietà Calendar è impostata sul calendario Gregoriano, l'intero restituito rappresenta l'anno Gregoriano per l'argomento data. Se invece la proprietà è impostata sul calendario Hijri, l'intero restituito rappresenta l'anno Hijri per l'argomento data. Nel caso di date Hijri, il numero dell'argomento è un'espressione numerica che rappresenta una data e/o ora compresa tra 1/1/100 (2 agosto 718 nel calendario Gregoriano) a 4/3/9666 (31 dicembre 9999 nel calendario Gregoriano).


Funzione Array

Restituisce un valore di tipo Variant contenente una matrice.

Sintassi

Array(elencoargomenti)

L'argomento obbligatorio elencoargomenti è composto da un elenco delimitato da virgole di valori assegnati agli elementi della matrice inclusa nel valore di tipo Variant. Se non vengono specificati argomenti, verrà creata una matrice di lunghezza zero.

Osservazioni

La notazione utilizzata per fare riferimento a un qualsiasi elemento di una matrice è composta dal nome della variabile seguito da parentesi che racchiudono un numero di indice assegnato all'elemento desiderato. Nell'esempio che segue, la prima istruzione consente di creare una variabile A di tipo Variant. La seconda istruzione assegna una matrice alla variabile A. L'ultima istruzione assegna il valore contenuto nel secondo elemento della matrice a un'altra variabile.

Dim A As Variant

A = Array(10,20,30)

B = A(2)

Il limite inferiore di una matrice creata utilizzando la funzione Array è determinato dal limite inferiore specificato con l'istruzione Option Base, a meno che Array non venga qualificato dal nome della libreria dei tipi (ad esempio VBA.Array). In tal caso, Option Base non influisce su Array.

Nota   Una variabile di tipo Variant non dichiarata come matrice può comunque includere una matrice. Una variabile di tipo Variant può includere una matrice di qualsiasi tipo, a eccezione di stringhe di lunghezza fissa e tipi definiti dall'utente. Sebbene una variabile di tipo Variant che include una matrice sia diversa concettualmente da una matrice i cui elementi sono di tipo Variant, la modalità di accesso agli elementi della matrice è identica.


Funzione CallByName

Esegue un metodo di un oggetto oppure imposta o restituisce una proprietà di un oggetto.

Sintassi

CallByName(oggetto, procname, calltype,[args()])

La sintassi della funzione CallByName è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
Oggetto	Obbligatoria. Variant (Object). Nome dell'oggetto sul quale verrà eseguita la funzione.
procname	Obbligatoria. Variant (String). Espressione stringa contenente il nome di una proprietà o di un metodo dell'oggetto.
calltype	Obbligatoria. Constant. Costante di tipo vbCallType che rappresenta il tipo di routine da richiamare .
args ()	Facoltativa. Variant (Array).
Osservazioni

La funzione CallByName consente di ottenere o impostare una proprietà oppure di richiamare un metodo in fase di esecuzione utilizzando un nome di stringa.

Nell'esempio seguente, nella prima riga la funzione CallByName viene utilizzata per impostare la proprietà MousePointer di una casella di testo, nella seconda riga si ottiene il valore della proprietà MousePointer e nella terza riga il metodo Move viene richiamato per spostare la casella di testo :

CallByName Text1, "MousePointer", vbLet, vbCrosshair

Result = CallByName (Text1, "MousePointer", vbGet)

CallByName Text1, "Move", vbMethod, 100, 100


Istruzione Const

Dichiara delle costanti da utilizzare al posto di valori letterali.

Sintassi

[Public | Private] Const nomecostante [As tipo] = espressione

La sintassi dell'istruzione Const è composta dalle seguenti parti:

Parte	Descrizione
Public	Facoltativa. Parola chiave utilizzata a livello di modulo per dichiarare costanti disponibili per tutte le routine in tutti i moduli. Non ammessa a livello di routine.
Private	Facoltativa. Parola chiave utilizzata a livello di modulo per dichiarare costanti che sono disponibili solo all'interno del modulo in cui viene impostata la dichiarazione. Non ammessa a livello di routine.
nomecostante	Obbligatoria. Nome della costante, espresso in base alle convenzioni standard di denominazione delle variabili.
tipo	Facoltativa. Tipo di dati della costante che può essere Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String oppure Variant. Utilizzare una proposizione As tipo distinta per ogni tipo di costante da dichiarare.
espressione	Obbligatoria. Può essere rappresentata da un valore letterale, da altre costanti oppure da qualsiasi operatore aritmetico o logico, ad eccezione di Is.
Osservazioni

Le costanti sono private per impostazione predefinita. Nelle routine, le costanti sono sempre private e la loro visibilità non può essere modificata. Nei moduli standard, la visibilità predefinita delle costanti a livello di modulo può essere modificata utilizzando la parola chiave Public. Nei moduli di classe, tuttavia, le costanti possono essere solo private e la loro visibilità non può essere modificata utilizzando la parola chiave Public.

È possibile indicare più dichiarazioni di costanti sulla stessa riga separando ogni assegnazione con una virgola. Se le dichiarazioni di costanti vengono indicate in questo modo, le parole chiave Public o Private eventualmente utilizzate verranno applicate a tutte le costanti.

Nelle espressioni assegnate a costanti non è possibile utilizzare variabili, funzioni definite dall'utente o funzioni intrinseche di Visual Basic (come Chr).

Nota   Le costanti consentono di rendere il codice più leggibile e ne agevolano le operazioni di modifica. A differenza delle variabili, le costanti non possono essere modificate inavvertitamente durante l'esecuzione del programma.

Se il tipo di costante non viene dichiarato in modo esplicito (utilizzando As tipo), alla costante verrà assegnato il tipo di dati più appropriato a seconda dell'espressione indicata.

Le costanti dichiarate nelle routine Sub, Function o Property sono locali per tali routine. Le costanti dichiarate esternamente a una routine sono valide in tutto il modulo in cui sono state dichiarate. È possibile utilizzare le costanti nelle stesse posizioni in cui vengono utilizzate le espressioni.


Funzione CreateObject

Crea e restituisce un riferimento a un oggetto ActiveX.

Sintassi

CreateObject(classe,[nomeserver])

La sintassi della funzione CreateObject è composta dalle seguenti parti:

Parte	Descrizione
classe	Obbligatoria. Variant (String). Nome dell'applicazione e classe dell'oggetto da creare.
nomeserver	Facoltativa. Variant (String). Nome del server di rete su cui verrà creato l'oggetto. Se è una stringa vuota (""), viene utilizzato il nome del computer locale.
L'argomento classe utilizza la sintassi nomeapp.tipooggetto ed è composto dalle seguenti parti:

Parte	Descrizione
nomeapp	Obbligatoria. Variant (String). Nome dell'applicazione che fornisce l'oggetto.
tipooggetto	Obbligatoria. Variant (String). Tipo o classe di oggetto da creare.
Osservazioni

Ogni applicazione che supporta l'automazione fornisce almeno un tipo di oggetto. Un'applicazione di elaborazione testi, ad esempio, può fornire un oggetto Application, un oggetto Document e un oggetto Toolbar.

Per creare un oggetto ActiveX, assegnare l'oggetto restituito dalla funzione CreateObject a una variabile oggetto:

' Dichiara una variabile oggetto che conterrà il

' riferimento all'oggetto. La dichiarazione Dim As

' Object causa un'associazione tardiva.

Dim ExcelSheet As Object

Set ExcelSheet = CreateObject("Excel.Sheet")

Quando viene eseguito questo codice, viene avviata l'applicazione che crea l'oggetto, in questo caso un foglio di calcolo di Microsoft Excel. Dopo la creazione dell'oggetto, è possibile farvi riferimento nel codice utilizzando la variabile oggetto precedentemente definita. Nell'esempio seguente si accede alle proprietà e ai metodi del nuovo oggetto utilizzando la variabile oggetto ExcelSheet e altri oggetti di Microsoft Excel, compresi l'oggetto Application e l'insieme Cells.

' Rende visibile Excel tramite l'oggetto Application.

ExcelSheet.Application.Visible = True

' Inserisce del testo nella prima cella del foglio.

ExcelSheet.Application Cells(1, 1).Value = "Questa è la colonna A, riga 1"

' Salva il foglio nella directory C:\test.xls.

ExcelSheet.SaveAs "C:\TEST.XLS"

' Chiude Excel applicando il metodo Quit all'oggetto

' Application.

ExcelSheet.Application.Quit

' Libera la variabile oggetto

Set ExcelSheet = Nothing

Quando si dichiara una variabile oggetto tramite la proposizione As Object, viene creata una variabile in grado di contenere un riferimento a qualsiasi tipo di oggetto. Per accedere all'oggetto tramite tale variabile, viene tuttavia utilizzata l'associazione tardiva, ovvero l'associazione avviene quando il programma viene eseguito. Per creare una variabile oggetto che supporti l'associazione anticipata, ovvero per fare in modo che l'associazione avvenga durante la compilazione del programma, è necessario dichiarare tale variabile utilizzando un ID di classe specifico. È possibile, ad esempio, dichiarare e creare i seguenti riferimenti a Microsoft Excel:

Dim xlApp As Excel.Application

Dim xlBook As Excel.Workbook

Dim xlSheet As Excel.WorkSheet

Set xlApp = CreateObject("Excel.Application")

Set xlBook = xlApp.Workbooks.Add

Set xlSheet = xlBook.Worksheets(1)

Quando si fa riferimento a un oggetto tramite una variabile che supporta l'associazione anticipata si ottengono prestazioni migliori, ma è possibile impostare solo un riferimento alla classe specificata nella dichiarazione. È possibile passare un oggetto restituito dalla funzione CreateObject a una funzione che prevede come argomento un oggetto. In questo esempio viene creato e passato un riferimento a un oggetto Excel.Application:

Call MySub (CreateObject("Excel.Application"))

È possibile creare un oggetto su un computer remoto connesso alla rete. A tale scopo, passare il nome del computer all'argomento nomeserver di CreateObject. Il nome corrisponde al nome del computer riportato nel nome di condivisione. Ad esempio, per una condivisione con nome "\\MioServer\Public", nomeserver sarà "MioServer".

Nota   Per ulteriori informazioni su come rendere visibile un'applicazione in un computer in rete remoto, consultare la documentazione COM (vedere Microsoft Developer Network). Potrebbe essere necessario aggiungere una chiave per l'applicazione nel registro di configurazione.

Il codice seguente restituisce il numero di versione di un'istanza di Excel eseguita su un computer remoto denominato MioServer:

Dim xlApp As Object

Set xlApp = CreateObject("Excel.Application", "MioServer")

Debug.Print xlApp.Version

Se il server remoto non esiste o non è disponibile, verrà generato un errore di run-time.

Nota   Utilizzare la funzione CreateObject quando non esiste un'istanza corrente dell'oggetto. Se un'istanza dell'oggetto è già in esecuzione verrà avviata una nuova istanza e verrà creato un oggetto di tipo uguale a quello specificato. Per utilizzare l'istanza corrente o per avviare l'applicazione e caricare un file, utilizzare la funzione GetObject.

Se un oggetto è stato registrato come oggetto a istanza singola, verrà creata una sola istanza dell'oggetto, indipendentemente dal numero di esecuzioni della funzione CreateObject.


Istruzione Declare

Utilizzata a livello di modulo per dichiarare riferimenti a routine esterne in una libreria a collegamento dinamico (DLL).

Sintassi 1

[Public | Private] Declare Sub nome Lib "nomelibreria" [Alias "nomealias"] [([elencoargomenti])]

Sintassi 2

[Public | Private] Declare Function nome Lib "nomelibreria" [Alias "nomealias"] [([elencoargomenti])] [As tipo]

La sintassi dell'istruzione Declare è composta dalle seguenti parti:

Parte	Descrizione
Public	Facoltativa. Dichiara le routine disponibili per tutte le altre routine in tutti i moduli.
Private	Facoltativa. Dichiara le routine disponibili solo nei moduli in cui viene fatta la dichiarazione.
Sub	Facoltativa (è comunque necessario specificare Sub o Function). Indica che la routine non restituisce alcun valore.
Function	Facoltativa (è comunque necessario specificare Sub o Function). Indica che la routine restituisce un valore che può essere utilizzato in una espressione.
nome	Obbligatoria. Qualsiasi nome di routine valido. Si noti che i punti di ingresso delle DLL distinguono tra maiuscole e minuscole.
Lib	Obbligatoria. Indica che una DLL o una risorsa codice contiene la routine da dichiarare. La proposizione Lib è obbligatoria in tutte le dichiarazioni.
nomelibreria	Obbligatoria. Nome della DLL o della risorsa codice che contiene la routine dichiarata.
Alias	Facoltativa. Indica che la routine da richiamare ha un nome diverso nella DLL. Questo risulta utile se il nome della routine esterna corrisponde a una parola chiave. È inoltre possibile utilizzare l'argomento Alias se una routine in una DLL ha lo stesso nome di una variabile pubblica, di una costante o di qualsiasi altra routine nella stessa area di validità. Alias risulta utile inoltre quando qualsiasi carattere nel nome della routine nella DLL non è un carattere valido per le convenzioni di denominazione della DLL.
nomealias	Facoltativa. Nome della routine nella DLL o nella risorsa codice. Se il primo carattere non è #, nomealias è il nome del punto di ingresso nella routine nella DLL. Se # è il primo carattere, tutti i caratteri che seguono devono indicare il numero ordinale del punto di ingresso nella routine.
elencoargomenti	Facoltativa. Elenco di variabili che rappresentano argomenti passati alla routine quando questa viene richiamata.
tipo	Facoltativa. Tipo di dati del valore restituito dalla routine Function. L'argomento può essere Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (solo di lunghezza variabile), Variant oppure un tipo definito dall'utente o un tipo di oggetto.
La sintassi dell'argomento elencoargomenti è composta dalle seguenti parti:

[Optional] [ByVal | ByRef] [ParamArray] nomevariabile[( )] [As tipo]

Parte	Descrizione
Optional	Facoltativa. Indica che un argomento non è obbligatorio. Se viene utilizzata, anche tutti gli argomenti successivi in elencoargomenti devono essere facoltativi e dichiarati con la parola chiave Optional. La parola chiave Optional non può essere utilizzata per nessun argomento se si utilizza ParamArray.
ByVal	Facoltativa. Indica che l'argomento viene passato per valore.
ByRef	Indica che l'argomento viene passato per riferimento. Impostazione predefinita in Visual Basic.
ParamArray	Facoltativa. Utilizzata solo come ultimo argomento di elencoargomenti, indica che l'ultimo argomento è una matrice Optional di elementi di tipo Variant. La parola chiave ParamArray consente di indicare un numero arbitrario di argomenti. Non può essere utilizzata con ByVal, ByRef oppure Optional.
nomevariabile	Obbligatoria. Nome della variabile che rappresenta l'argomento passato alla routine, espresso in base alle convenzioni di denominazione standard delle variabili.
( )	Obbligatoria per le variabili matrice. Indica che nomevariabile è una matrice.
tipo	Facoltativa. Tipo di dati dell'argomento passato alla routine: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (solo di lunghezza variabile), Object, Variant, di tipo definito dall'utente oppure un tipo di oggetto.
Osservazioni

Nelle routine Function il tipo di dati della routine determina il tipo di dati del risultato. È possibile utilizzare una proposizione As dopo elencoargomenti per specificare il tipo di risultato della funzione. È inoltre possibile utilizzare una proposizione As all'interno di elencoargomenti per specificare il tipo di dati dei singoli argomenti passati alla routine. Oltre a specificare uno dei tipi di dati standard, è possibile indicare As Any in elencoargomenti per disattivare il controllo dei tipi e consentire il passaggio di qualsiasi tipo di dati alla routine.

Le parentesi vuote indicano che la routine Sub o Function non include argomenti e che pertanto verranno eseguiti dei controlli automatici in Visual Basic per verificare che nessun argomento sia stato passato. Nell'esempio che segue, First non richiede alcun argomento. Se viene utilizzato un argomento per richiamare First, verrà generato un errore:

Declare Sub First Lib "MiaLib" ()

Se si include un elenco di argomenti, il numero e il tipo di argomenti verranno controllati a ogni chiamata della routine. Nell'esempio che segue, First include un argomento Long:

Declare Sub First Lib "MiaLib" (X As Long)

Nota   L'elenco degli argomenti di un'istruzione Declare non può includere stringhe di lunghezza fissa in quanto alle routine possono essere passate soltanto stringhe di lunghezza variabile. Le stringhe di lunghezza fissa possono essere utilizzate come argomenti di routine ma, prima di essere passate, verranno convertite in stringhe di lunghezza variabile.

Nota   La costante vbNullString può essere utilizzata per richiamare routine esterne quando la routine esterna richiede una stringa di valore zero, che non equivale a una stringa di lunghezza zero ("").


Istruzioni Deftipo

Utilizzate a livello di modulo per impostare il tipo di dati predefinito per le variabili, gli argomenti passati alle routine e il tipo di risultato di routine Function e Property Get i cui nomi iniziano con caratteri specificati.

Sintassi

DefBool intervallolettere[, intervallolettere] . . .

DefByte intervallolettere[, intervallolettere] . . .

DefInt intervallolettere[, intervallolettere] . . .

DefLng intervallolettere[, intervallolettere] . . .

DefCur intervallolettere[, intervallolettere] . . .

DefSng intervallolettere[, intervallolettere] . . .

DefDbl intervallolettere[, intervallolettere] . . .

DefDec intervallolettere[, intervallolettere] . . .

DefDate intervallolettere[, intervallolettere] . . .

DefStr intervallolettere[, intervallolettere] . . .

DefObj intervallolettere[, intervallolettere] . . .

DefVar intervallolettere[, intervallolettere] . . .

L'argomento obbligatorio intervallolettere ha la seguente sintassi:

lettera1[-lettera2]

Gli argomenti lettera1 e lettera2 specificano l'intervallo di nomi per il quale sarà impostato un tipo di dati predefinito. Ciascun argomento rappresenta la prima lettera del nome della variabile, dell'argomento, della routine Function o Property Get e può essere rappresentato da qualsiasi lettera dell'alfabeto e non distingue tra maiuscole e minuscole.

Osservazioni

Il nome dell'istruzione determina il tipo di dati:

Istruzione	Tipo Di Dati
DefBool	Boolean
DefByte	Byte
DefInt	Integer
DefLng	Long
DefCur	Currency
DefSng	Single
DefDbl	Double
DefDec	Decimal (non ancora supportato)
DefDate	Date
DefStr	String
DefObj	Object
DefVar	Variant
Nella parte di codice seguente, ad esempio, Message è una variabile stringa:

DefStr A-Q

. . .

Message = "Spazio dello stack esaurito."

Un'istruzione Deftipo ha effetto soltanto sul modulo nel quale viene utilizzata. Un'istruzione DefInt di un modulo influisce, ad esempio, solo sul tipo di dati predefinito per le variabili, sugli argomenti passati alle routine e sul tipo di risultato di routine Function e Property Get dichiarate in tale modulo. Il tipo di dati predefinito di variabili, argomenti e tipi restituiti in altri moduli rimane invariato. Se non viene dichiarato in modo esplicito con un'istruzione Deftipo, il tipo di dati predefinito per tutte le variabili, per tutti gli argomenti, per tutte le routine Function e tutte le routine Property Get sarà Variant.

Se viene specificato un intervallo di lettere, viene definito in genere il tipo di dati delle variabili la cui lettera iniziale è inclusa tra i primi 128 caratteri del set di caratteri. Se, tuttavia, viene specificato l'intervallo di lettere A–Z, verrà impostato come predefinito il tipo di dati specificato per tutte le variabili, incluse quelle che hanno come lettera iniziale uno dei caratteri internazionali elencati nella parte estesa del set di caratteri (128–255).

Dopo aver specificato l'intervallo A–Z , non è possibile definire un ulteriore sotto-intervallo di variabili utilizzando le istruzioni Deftipo. Dopo aver specificato un intervallo infatti, se viene inclusa una lettera definita precedentemente in un'altra istruzione Deftipo , verrà generato un errore. È tuttavia possibile assegnare in modo esplicito il tipo di dati di qualsiasi variabile, sia essa definita o meno, utilizzando un'istruzione Dim con una proposizione As tipo. È possibile utilizzare, ad esempio, il seguente codice a livello di modulo per definire una variabile di tipo Double anche se il tipo di dati predefinito è Integer:

DefInt A-Z

Dim TaxRate As Double

Le istruzioni Deftipo non influiscono sugli elementi dei tipi definiti dall'utente in quanto questi devono essere dichiarati in modo esplicito.


Istruzione Dim

Dichiara le variabili e assegna lo spazio di archiviazione.

Sintassi

Dim [WithEvents] nomevariabile[([indici])] [As [New] tipo] [, [WithEvents] nomevariabile[([indici])] [As [New] tipo]] . . .

La sintassi dell'istruzione Dim è composta dalle seguenti parti:

Parte	Descrizione
WithEvents	Facoltativa. Parola chiave che specifica che nomevariabile è una variabile oggetto utilizzata per rispondere agli eventi generati da un oggetto ActiveX. Valida solo nei moduli di classe. È possibile dichiarare il numero desiderato di variabili con WithEvents, ma non è possibile creare matrici con WithEvents. Non è consentito utilizzare New con WithEvents.
nomevariabile	Obbligatoria. Nome della variabile, espresso in base alle convenzioni di denominazione standard delle variabili.
indici	Facoltativa. Dimensioni di una variabile matrice. È possibile dichiarare fino a 60 dimensioni multiple. La sintassi dell'argomento indici è descritta di seguito: [inferiore To] superiore [, [inferiore To] superiore] . . . Se non specificato in modo esplicito con inferiore, il limite inferiore di una matrice viene controllato dall'istruzione Option Base. Se non è presente un'istruzione Option Base il limite inferiore sarà zero.
New	Facoltativa. Parola chiave che consente di creare un oggetto in modo implicito. Se si utilizza New per la dichiarazione della variabile oggetto, verrà creata una nuova istanza dell'oggetto in occasione del primo riferimento a tale oggetto e pertanto non è necessario utilizzare l'istruzione Set per assegnare il riferimento all'oggetto. La parola chiave New non può essere utilizzata per dichiarare variabili di qualsiasi tipo di dati intrinseco, per dichiarare istanze di oggetti dipendenti e con WithEvents.
tipo	Facoltativa. Tipo di dati della variabile; può essere Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (per stringhe di lunghezza variabile), String * lunghezza (per stringhe di lunghezza fissa), Object, Variant, un tipo definito dall'utente oppure un tipo di oggetto. Utilizzare una proposizione As tipo distinta per ciascuna variabile da dichiarare.
Osservazioni

Le variabili dichiarate con Dim a livello di modulo sono disponibili per tutte le routine incluse in tale modulo. A livello di routine, le variabili sono disponibili solo all'interno della routine.

Utilizzare un'istruzione Dim a livello di modulo o di routine per dichiarare il tipo di dati di una variabile. L'istruzione che segue, ad esempio, dichiara una variabile di tipo Integer.

Dim NumberOfEmployees As Integer

L'istruzione Dim può essere inoltre utilizzata per dichiarare il tipo di oggetto di una variabile. L'istruzione che segue dichiara una variabile per una nuova istanza di un foglio di lavoro (Worksheet).

Dim X As New Worksheet

Se la parola chiave New non viene utilizzata nella dichiarazione di una variabile oggetto, alla variabile che fa riferimento all'oggetto deve essere assegnato un oggetto esistente tramite l'istruzione Set prima di poter essere utilizzata. Fino a quando non le viene assegnato un oggetto, la variabile oggetto dichiarata avrà il valore speciale Nothing, che indica che tale variabile non si riferisce a nessuna istanza particolare di un oggetto.

È inoltre possibile utilizzare l'istruzione Dim con parentesi vuote per dichiarare matrici dinamiche. Dopo aver dichiarato una matrice dinamica, utilizzare l'istruzione ReDim all'interno di una routine per definire il numero di dimensioni e di elementi della matrice. Se si prova a ridichiarare una dimensione di una variabile matrice di cui sono già state dichiarate le dimensioni con un'istruzione Private, Public o Dim, verrà generato un errore.

Se non si specifica un tipo di dati o un tipo di oggetto e il modulo non include un'istruzione Deftipo, la variabile sarà di tipo Variant per impostazione predefinita.

Le variabili numeriche vengono inizializzate su 0. Le stringhe di lunghezza variabile vengono inizializzate come stringhe di lunghezza zero e le stringhe di lunghezza fissa vengono riempite con zeri. Le variabili Variant vengono inizializzate su Empty. Gli elementi di tipo definito dall'utente vengono inizializzati come se fossero variabili distinte.

Nota   Quando si utilizza l'istruzione Dim in una routine, in genere l'istruzione Dim viene inserita all'inizio della routine stessa.


Istruzione Enum

Dichiara un tipo di enumerazione.

Sintassi

 [Public | Private] Enum nome

nomemembro [= espressionecostante]

nomemembro [= espressionecostante]

. . .

End Enum

La sintassi dell'istruzione Enum è composta dalle seguenti parti:

Parte	Descrizione
Public	Facoltativa. Specifica che il tipo Enum è visibile in tutto il progetto. Per impostazione predefinita, i tipi Enum sono Public.
Private	Facoltativa. Specifica che il tipo Enum è visibile solo nel modulo in cui compare.
nome	Obbligatoria. Il nome del tipo Enum. L'argomento nome deve essere un identificatore valido di Visual Basic e viene specificato come tipo quando si dichiarano variablili o parametri del tipo Enum.
nomemembro	Obbligatoria. Identificatore valido di Visual Basic che specifica il nome che verrà assegnato a un elemento costitutivo del tipo Enum.
espressionecostante	Facoltativa. Valore dell'elemento (definisce un valore Long). Se l'argomento espressionecostante viene omesso, potrà essere assegnato il valore 0 (se si tratta del primo nomemembro), oppure un valore maggiore di 1 rispetto al valore del nomemembro che lo precede.
Osservazioni

Le variabili di enumerazione vengono dichiarate con un tipo Enum. Sia le variabili che i parametri possono essere dichiarati con un tipo Enum. Gli elementi del tipo Enum vengono inizializzati su valori costanti nell'istruzione Enum. I valori assegnati non possono essere modificati in fase di esecuzione e possono includere sia numeri positivi che negativi, ad esempio:

Enum SecurityLevel

IllegalEntry = -1

SecurityLevel1 = 0

SecurityLevel2 = 1

End Enum

Un'istruzione Enum può comparire solo a livello di modulo. Dopo aver definito il tipo Enum, è possibile utilizzarlo per dichiarare variabili, parametri o routine che restituiscono tale tipo. Non è possibile classificare il nome di un tipo Enum con il nome di un modulo. I tipi Public Enum inclusi in un modulo di classe non sono membri di tale classe, ma vengono scritti nella libreria dei tipi, mentre i tipi Enum definiti nei moduli standard non vengono scritti nelle librerie dei tipi. Non è possibile definire tipi Public Enum con lo stesso nome sia in moduli standard che in moduli di classe, in quanto questi tipi condividono lo stesso spazio riservato al nome. Se due tipi Enum inclusi in librerie dei tipi diverse hanno lo stesso nome ma contengono elementi diversi, il riferimento a una variabile del tipo varia a seconda della libreria dei tipi che ha la priorità più elevata in References.

Non è possibile utilizzare un tipo Enum come obiettivo di un blocco With.


Istruzione Erase

Reinizializza gli elementi delle matrici fisse e modifica l'assegnazione di spazio di archiviazione per matrici dinamiche.

Sintassi

Erase elencomatrici

L'argomento obbligatorio elencomatrici è composto da una o più variabili matrice, separate da virgole, da cancellare.

Osservazioni

È importante sapere se una matrice è fissa o dinamica in quanto l'istruzione Erase funziona diversamente a seconda del tipo di matrice. Nel caso di matrici fisse, non viene recuperata memoria. L'istruzione Erase imposta gli elementi di una matrice fissa nel modo seguente:

Tipo di matrice	Effetto dell'istruzione Erase sugli elementi della matrice fissa
Matrice numerica fissa	Imposta ciascun elemento su zero.
Matrice fissa di stringhe (lunghezza variabile)	Imposta ciascun elemento su una stringa di lunghezza zero ("").
Matrice fissa di stringhe (lunghezza fissa)	Imposta ciascun elemento su zero.
Matrice fissa di tipo Variant	Imposta ciascun elemento su Empty.
Tipi di matrice definiti dall'utente	Imposta ciascun elemento come se fosse una variabile distinta.
Matrice di oggetti	Imposta ciascun elemento sul valore speciale Nothing.
L'istruzione Erase consente di liberare la memoria utilizzata dalle matrici dinamiche. Prima che il programma possa di nuovo fare riferimento alla matrice dinamica, è necessario dichiarare nuovamente le dimensioni delle variabili matrice tramite l'istruzione ReDim.


Istruzione Event

Dichiara un evento definito dall'utente.

Sintassi

[Public] Event nomeroutine [(elencoargomenti)]

La sintassi dell'istruzione Event è composta dalle seguenti parti:

Parte	Descrizione
Public	Facoltativa. Indica che una routine di eventi è visibile in tutto il progetto. Per impostazione predefinita, le routine di eventi sono Public. Si noti che è possibile generare eventi solo nel modulo in cui sono stati dichiarati.
nomeroutine	Obbligatoria. Nome dell'evento, espresso in base alle convenzioni di denominazione standard delle variabili.
La sintassi dell'argomento elencoargomenti è composta dalle seguenti parti:

[ByVal | ByRef] nomevariabile[( )] [As tipo]

Parte	Descrizione
ByVal	Facoltativa. Indica che l'argomento viene passato per valore.
ByRef	Facoltativa. Indica che l'argomento viene passato per riferimento. Impostazione predefinita in Visual Basic.
nomevariabile	Obbligatoria. Nome della variabile che rappresenta l'argomento passato alla routine. Il nome è espresso in base alle convenzioni di denominazione standard delle variabili.
tipo	Facoltativa. Tipo di dati dell'argomento passato alla routine; può essere Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (solo di lunghezza variabile), Object, Variant, un tipo definito dall'utente oppure un tipo di oggetto.
Osservazioni

Dopo aver dichiarato l'evento, utilizzare l'istruzione RaiseEvent per generarlo. Se la dichiarazione di una routine di eventi appare in un modulo standard si verificherà un errore di sintassi. Non è possibile dichiarare una routine di eventi che restituisca un valore. Nel codice che segue vengono indicate le normali modalità utilizzate per dichiarare e generare un evento:

' Dichiara un evento a livello di modulo in un modulo

' di classe

Event LogonCompleted (UserName as String)

Sub

RaiseEvent LogonCompleted("Giovanni")

End Sub

Nota   Gli argomenti degli eventi possono essere dichiarati nello stesso modo di quelli delle routine con le seguenti eccezioni: gli eventi non possono includere argomenti predefiniti, argomenti Optional o argomenti ParamArray. Gli eventi non restituiscono valori.


Istruzione Function

Dichiara il nome, gli argomenti e il codice che costituiscono il corpo di una routine Function.

Sintassi

[Public | Private | Friend] [Static] Function nome [(elencoargomenti)] [As tipo]
[istruzioni]
[nome = espressione]
[Exit Function]
[istruzioni]
[nome = espressione]

End Function

La sintassi dell'istruzione Function è composta dalle seguenti parti:

Parte	Descrizione
Public	Facoltativa. Indica che la routine Function è accessibile per tutte le altre routine in tutti i moduli. Se utilizzata in un modulo che include un'istruzione Option Private, la routine non sarà disponibile esternamente al progetto.
Private	Facoltativa. Indica che la routine Function è accessibile solo per le altre routine incluse nel modulo in cui è stata dichiarata.
Friend	Facoltativa. Utilizzata solo nei moduli di classe. Indica che la routine Function è visibile in tutto il progetto, ma non per il controller di un'istanza di un oggetto.
Static	Facoltativa. Indica che le variabili locali della routine Function vengono conservate durante le chiamate. L'attributo Static non influisce sulle variabili dichiarate al di fuori della routine Function, anche se vengono utilizzate nella routine stessa.
nome	Obbligatoria. Nome della routine Function, espresso in base alle convenzioni di denominazione standard delle variabili.
elencoargomenti	Facoltativa. Elenco delle variabili che rappresentano gli argomenti passati alla routine Function quando questa viene richiamata. Le variabili multiple sono separate da virgole.
tipo	Facoltativa. Tipo di dati restituito dalla routine Function; può essere Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (non di lunghezza fissa), Object, Variant o di tipo definito dall'utente.
istruzioni	Facoltativa. Qualsiasi gruppo di istruzioni da eseguire nel corpo della routine Function.
espressione	Facoltativa. Valore restituito da Function.
La sintassi dell'argomento elencoargomenti è composta dalle seguenti parti:

[Optional] [ByVal | ByRef] [ParamArray] nomevariabile[( )] [As tipo] [= valorepredefinito]

Parte	Descrizione
Optional	Facoltativa. Indica che un argomento non è obbligatorio. Se viene utilizzata, anche tutti gli argomenti successivi in elencoargomenti devono essere facoltativi e dichiarati con la parola chiave Optional. La parola chiave Optional non può essere utilizzata per nessun argomento se si utilizza ParamArray.
ByVal	Facoltativa. Indica che l'argomento viene passato per valore.
ByRef	Facoltativa. Indica che l'argomento viene passato per riferimento. Impostazione predefinita in Visual Basic.
ParamArray	Facoltativa. Utilizzata solo come ultimo argomento di elencoargomenti, indica che l'ultimo argomento è una matrice Optional di elementi di tipo Variant. La parola chiave ParamArray consente di indicare un numero arbitrario di argomenti. Non può essere utilizzata con ByVal, ByRef oppure Optional.
nomevariabile	Obbligatoria. Nome della variabile che rappresenta l'argomento passato alla routine, espresso in base alle convenzioni di denominazione standard delle variabili.
tipo	Facoltativa. Dichiara il tipo di dati dell'argomento passato alla routine: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato) Date, String (solo di lunghezza variabile), Object, Variant o un tipo di oggetto specifico. Se il parametro non è Optional, è inoltre possibile specificare un tipo definito dall'utente.
valorepredefinito	Facoltativa. Qualsiasi costante o espressione costante. Valida solo per i parametri Optional. Se il tipo è Object, un valore predefinito esplicito può essere solo Nothing.
Osservazioni

Le routine Function sono Public per impostazione predefinita, se non diversamente specificato in modo esplicito con Public, Private o Friend. Se non si utilizza Static, il valore delle variabili locali non viene conservato tra le chiamate. La parola chiave Friend può essere utilizzata solo nei moduli di classe. Alle routine Friend, tuttavia, possono accedere le routine di qualsiasi modulo di un progetto. Una routine Friend non compare nella libreria dei tipi della classe superiore e non supporta l'associazione tardiva.

Attenzione   Le routine Function possono essere ricorsive, ovvero possono richiamare se stesse per eseguire un'operazione specifica. Si noti che la ricorsione può causare problemi di overflow dello stack. La parola chiave Static in genere non viene utilizzata con le routine Function ricorsive.

Tutto il codice eseguibile deve essere incluso in routine. Non è possibile definire una routine Function all'interno di un'altra routine Function, Sub o Property.

L'istruzione Exit Function consente di uscire immediatamente da una routine Function. Il programma continuerà con l'istruzione successiva all'istruzione che ha richiamato la routine Function. In una routine Function è possibile inserire un qualsiasi numero di istruzioni Exit Function in qualsiasi posizione.

Analogamente a una routine Sub, una routine Function è una routine distinta che può includere argomenti, eseguire una serie di istruzioni e modificare i valori degli argomenti in essa inclusi. Diversamente dalla routine Sub, una routine Function può essere utilizzata a destra di un'espressione nello stesso modo in cui si utilizzano le funzioni intrinseche, quali Sqr, Cos o Chr, quando si desidera utilizzare il valore risultante dalla funzione.

È possibile richiamare una routine Function utilizzandone il nome in un'espressione, seguito dall'elenco degli argomenti tra parentesi. Per informazioni dettagliate su come richiamare le routine Function, vedere l'istruzione Call.

Per ottenere un valore come risultato di una funzione, è necessario assegnare il valore al nome della funzione. È possibile inserire un qualsiasi numero di assegnazioni di questo tipo in qualsiasi posizione all'interno della routine. Se a nome non viene assegnato alcun valore, la routine restituirà un valore predefinito. Una funzione numerica restituirà 0 (zero), una funzione stringa restituirà una stringa di lunghezza zero ("") e una funzione Variant restituirà Empty. Una funzione che restituisce un riferimento a un oggetto restituirà Nothing, se non si è assegnato alcun riferimento a un oggetto a nome all'interno di Function utilizzando Set.

Nell'esempio che segue vengono descritte le modalità di assegnazione di un valore restituito a una funzione denominata BinarySearch. In questo caso al nome viene assegnato False per indicare che alcuni valori non sono stati trovati.

Function BinarySearch(. . .) As Boolean

. . .

' Valore non trovato. Restituisce il valore False.

If lower > upper Then

BinarySearch = False

Exit Function

End If

. . .

End Function

Le variabili utilizzate nelle routine Function rientrano in due categorie, ovvero le variabili dichiarate in modo esplicito all'interno della routine o le variabili non dichiarate in modo esplicito. Le variabili dichiarate utilizzando l'istruzione Dim o istruzioni equivalenti sono sempre locali rispetto alla routine. Le altre variabili utilizzate ma non dichiarate in una routine sono locali se non dichiarate in modo esplicito a un livello superiore esternamente alla routine.

Attenzione   In una routine è possibile utilizzare una variabile non dichiarata in modo esplicito nella routine, ma è possibile che si verifichi un conflitto di nome se un qualsiasi altro elemento definito a livello di modulo ha lo stesso nome. Se la routine si riferisce a una variabile non dichiarata che ha lo stesso nome di un'altra routine, costante o variabile, si presuppone che la routine faccia riferimento a tale nome a livello di modulo. È consigliabile dichiarare le variabili in modo esplicito per evitare conflitti di questo tipo. Per fare in modo che la dichiarazione delle variabili sia sempre esplicita è possibile utilizzare l'istruzione Option Explicit.

Attenzione   Le espressioni aritmetiche possono essere riorganizzate automaticamente allo scopo di aumentare l'efficienza interna. È opportuno evitare di utilizzare una routine Function in un'espressione aritmetica, se la funzione modifica il valore delle variabili nella stessa espressione.


Funzione GetObject

Restituisce un riferimento a un oggetto fornito da un componente ActiveX.

Sintassi

GetObject([pathname] [, class])

La sintassi della funzione GetObject è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
pathname	Facoltativa. Variant (String). Percorso completo e il nome del file contenente l'oggetto da recuperare. Se pathname viene omesso, è necessario indicare l'argomento class.
class	Facoltativa. Variant (String). Stringa che rappresenta la classe dell'oggetto.
L'argomento class utilizza la sintassi nomeapp.tipooggetto composta dalle seguenti parti:

Parte	Descrizione
nomeapp	Obbligatoria. Variant (String). Nome dell'applicazione che espone l'oggetto.
tipooggetto	Obbligatoria. Variant (String). Tipo o classe dell'oggetto da creare.
Osservazioni

Utilizzare la funzione GetObject per accedere a un oggetto ActiveX da un file e assegnarlo a una variabile oggetto. A tale scopo, utilizzare l'istruzione Set per assegnare l'oggetto restituito da GetObject alla variabile oggetto. Ad esempio:

Dim CADObject As Object

Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

Quando viene eseguito questo codice, viene avviata l'applicazione associata all'argomento pathname specificato e l'oggetto nel file specificato viene attivato.

Se l'argomento pathname è una stringa di lunghezza zero (""), la funzione GetObject restituisce una nuova istanza dell'oggetto del tipo specificato. Se l'argomento pathname viene omesso, la funzione GetObject restituisce l'oggetto attivo del tipo specificato. Se non esiste nessun oggetto del tipo specificato, verrà generato un errore.

Alcune applicazioni consentono di attivare solo parte di un file. A tale scopo aggiungere un punto esclamativo (!) al termine del nome del file, seguito da una stringa che identifica la parte del file che si desidera attivare. Per informazioni su come creare tale stringa, vedere la documentazione relativa all'applicazione con la quale è stato creato l'oggetto.

In un'applicazione di grafica, ad esempio, è possibile che un disegno memorizzato in un file sia composto da più livelli. È possibile utilizzare il codice dell'esempio seguente per attivare un livello di un disegno chiamato SCHEMA.CAD:

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

Se non si specifica l'argomento class dell'oggetto, l'automazione determina quale applicazione richiamare e quale oggetto attivare sulla base del nome di file specificato. Alcuni file, tuttavia, possono supportare più classi di oggetti. Un disegno, ad esempio, potrebbe supportare un oggetto Application, un oggetto Drawing e un oggetto Toolbar, tutti appartenenti allo stesso file. Per specificare quale oggetto di un file si desidera attivare, utilizzare l'argomento facoltativo class. Ad esempio:

Dim MyObject As Object

Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

Nell'esempio, FIGMENT è il nome di un'applicazione di disegno e DRAWING è uno dei tipi di oggetto da essa supportati.

Dopo aver attivato un oggetto, nel codice ci si riferisce a esso utilizzando la variabile oggetto precedentemente definita. Nell'esempio sopra riportato si accede alle proprietà e ai metodi del nuovo oggetto utilizzando la variabile oggetto MyObject. Ad esempio:

MyObject.Line 9, 90

MyObject.InsertText 9, 100, "Salve gente."

MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

Nota   Utilizzare la funzione GetObject quando esiste un'istanza corrente dell'oggetto o se si desidera creare l'oggetto con un file già caricato, altrimenti utilizzare la funzione CreateObject.

Se un oggetto è registrato come oggetto a singola istanza, viene creata solo un'istanza dell'oggetto, indipendentemente dal numero di esecuzioni di CreateObject. Con gli oggetti a singola istanza, GetObject restituisce sempre la stessa istanza quando viene richiamata con la sintassi con stringa di lunghezza zero (""). Se si omette l'argomento pathname, viene generato un errore. Non è possibile utilizzare la funzione GetObject per ottenere un riferimento a una classe creata con Visual Basic.


Istruzione Implements

Specifica un'interfaccia o una classe che verrà implementata nel modulo di classe in cui compare.

Sintassi

Implements [nomeinterfaccia | classe]

L'argomento nomeinterfaccia o classe obbligatorio corrisponde al nome di un'interfaccia o di una classe inclusa in una libreria dei tipi, i cui metodi verranno implementati dai corrispondenti metodi della classe di Visual Basic.

Osservazioni

Un'interfaccia è un insieme di prototipi che rappresentano i membri, ovvero i metodi e le proprietà, inclusi nell'interfaccia stessa. In altri termini, l'interfaccia contiene solo le dichiarazioni delle routine che ne fanno parte. Una classe fornisce l'implementazione di tutti i metodi e le proprietà di una o più interfacce. Le classi forniscono il codice che viene utilizzato quando ciascuna funzione viene richiamata da un controller della classe. Tutte le classi implementano almeno un'interfaccia, che viene considerata l'interfaccia predefinita di tale classe. In Visual Basic, qualsiasi membro che non appartiene esplicitamente a un'interfaccia implementata appartiene implicitamente all'interfaccia predefinita.

Quando una classe di Visual Basic implementa un'interfaccia, tale classe fornisce la propria versione di tutte le routine Public specificate nella libreria dei tipi di tale interfaccia. Oltre a fornire un'associazione tra i prototipi dell'interfaccia e le routine, l'istruzione Implements consente alla classe di accettare le chiamate COM QueryInterface per l'ID dell'interfaccia specificata.

Nota   In Visual Basic le classi o interfacce derivate non sono implementate.

Quando si implementa un'interfaccia o una classe, è necessario includere tutte le routine Public interessate. Se durante l'implementazione manca un membro dell'interfaccia, verrà generato un errore. Se non si inserisce il codice in una delle routine della classe implementata, è possibile generare l'errore corrispondente (Const E_NOTIMPL = &H80004001) in modo da segnalare a chi utilizza l'implementazione stessa che uno dei membri non è implementato.

L'istruzione Implements non può essere utilizzata in un modulo standard.


Funzione LBound

Restituisce un valore Long che contiene l'indice minore disponibile per la dimensione indicata di una matrice.

Sintassi

LBound(nomematrice[, dimensione])

La sintassi dell'istruzione LBound è composta dalle seguenti parti:

Parte	Descrizione
nomematrice	Obbligatoria. Nome di una variabile matrice, espresso in base alle convenzioni di denominazione standard delle variabili.
dimensione	Facoltativa. Variant (Long). Numero intero che indica il limite inferiore della dimensione restituito. Utilizzare 1 per la prima dimensione, 2 per la seconda e così via. Se l'argomento dimensione viene omesso, verrà utilizzato il valore 1.
Osservazioni

La funzione LBound viene utilizzata insieme alla funzione UBound per determinare le dimensioni di una matrice. Utilizzare la funzione UBound per trovare il limite superiore di una dimensione di una matrice.

La funzione LBound restituisce i valori elencati nella tabella che segue per una matrice con le seguenti dimensioni:

Dim A(1 To 100, 0 To 3, -3 To 4)

Istruzione	Valore restituito
LBound(A, 1)	1
LBound(A, 2)	0
LBound(A, 3)	-3
Il limite inferiore predefinito di ciascuna dimensione può essere 0 oppure 1, a seconda dell'impostazione dell'istruzione Option Base. La base di una matrice creata con la funzione Array è zero e non è influenzata da Option Base.

Il limite inferiore delle matrici con dimensioni impostate tramite la proposizione To in un'istruzione Dim, Private, Public, ReDim o Static può essere rappresentato da qualsiasi valore intero.


Istruzione Let

Assegna il valore di un'espressione a una variabile o a una proprietà.

Sintassi

[Let] nomevariabile = espressione

La sintassi dell'istruzione Let è composta dalle seguenti parti:

Parte	Descrizione
Let	Facoltativa. L'uso esplicito della parola chiave Let è una questione di stile; viene in genere omessa.
nomevariabile	Obbligatoria. Nome della variabile o della proprietà, espresso in base alle convenzioni di denominazione standard delle variabili.
espressione	Obbligatoria. Valore assegnato alla variabile o alla proprietà.
Osservazioni

Il valore di un'espressione può essere assegnato a una variabile o a una proprietà soltanto se il tipo di dati è compatibile con la variabile. Non è possibile assegnare un'espressione stringa alle variabili numeriche, né assegnare espressioni numeriche alle variabili stringa. In caso di assegnazione errata, in fase di compilazione verrà generato un errore.

Alle variabili di tipo Variant possono essere assegnate espressioni sia di tipo stringa che numeriche. Non sempre è possibile eseguire l'operazione inversa. A una variabile di tipo stringa può essere assegnato qualsiasi tipo di Variant a eccezione di Null, mentre a una variabile numerica può essere assegnata soltanto una variabile di tipo Variant che contiene un valore che può essere interpretato come numero. Utilizzare la funzione IsNumeric per determinare se il tipo di dati Variant può essere convertito in numero.

Attenzione   Se si assegna un'espressione di un tipo di dati numerico a una variabile di un diverso tipo di dati numerico, il valore dell'espressione assumerà il tipo di dati della variabile risultante.

Le istruzioni Let possono essere utilizzate per assegnare una variabile record a un'altra soltanto se entrambe le variabili sono dello stesso tipo definito dall'utente. Utilizzare l'istruzione LSet per assegnare variabili record di tipi definiti dall'utente diversi. Utilizzare l'istruzione Set per assegnare riferimenti di oggetto a variabili.


Istruzione Option Base

Utilizzata a livello di modulo per dichiarare il limite inferiore predefinito per gli indici delle matrici.

Sintassi

Option Base {0 | 1}

Osservazioni

Dato che la base predefinita delle matrici è 0, l'istruzione Option Base non è mai obbligatoria. Se tale istruzione viene utilizzata, deve essere inserita in un modulo prima di qualsiasi altra routine. Option Base può essere inserita solo una volta in un modulo e deve precedere le dichiarazioni di matrice che includono le dimensioni.

Nota   Per controllare in modo più flessibile l'intervallo degli indici di una matrice, è possibile utilizzare la proposizione To nelle istruzioni Dim, Private, Public, ReDim e Static. Se il limite inferiore non viene impostato in modo esplicito con una proposizione To, è possibile utilizzare l'istruzione Option Base per impostare il limite inferiore predefinito su 1. La base di una matrice creata con la parola chiave ParamArray è zero. Option Base non influisce su ParamArray (o la funzione Array, se qualificata con il nome della relativa libreria dei tipi, ad esempio VBA.Array).

L'istruzione Option Base influisce solo sul limite inferiore delle matrici nel modulo in cui è inclusa l'istruzione.


Istruzione Option Compare

Utilizzata a livello di modulo per dichiarare la modalità di confronto predefinita da utilizzare per confrontare i dati di una stringa.

Sintassi

Option Compare {Binary | Text | Database}

Osservazioni

Se si utilizza l'istruzione Option Compare, è necessario inserirla in un modulo prima di qualsiasi altra routine.

L'istruzione Option Compare specifica il metodo di confronto di stringhe (Binary, Text o Database) per un modulo. Se un modulo non include un'istruzione Option Compare, il metodo di confronto testuale predefinito è Binary.

L'istruzione Option Compare Binary consente di eseguire confronti testuali sulla base di un tipo di ordinamento derivato dalla rappresentazione binaria interna dei caratteri. In Microsoft Windows l'ordinamento è determinato dalla tabella codici. Nell'esempio che segue viene illustrato un tipico ordinamento binario:

A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

L'istruzione Option Compare Text consente di eseguire confronti di stringhe sulla base di un ordinamento testuale indipendente dalla combinazione di maiuscole e minuscole determinato dalle impostazioni internazionali del sistema in uso. Gli stessi caratteri dell'esempio precedente, se ordinati utilizzando l'istruzione Option Compare Text producono il risultato seguente:

(A=a) < ( À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)

L’istruzione Option Compare Database può essere utilizzata solo in Microsoft Access e consente di eseguire confronti di stringhe sulla base di un ordinamento determinato dall’ID di paese del database in cui viene eseguito il confronto.


Istruzione Option Explicit

Utilizzata a livello di modulo per fare in modo che tutte le variabili del modulo vengano dichiarate in modo esplicito.

Sintassi

Option Explicit

Osservazioni

Se si utilizza l'istruzione Option Explicit, è necessario inserirla in un modulo prima di qualsiasi altra routine.

Quando si utilizza l'istruzione Option Explicit tutte le variabili devono essere dichiarate in modo esplicito utilizzando le istruzioni Dim, Private, Public, ReDim o Static . Se si prova a utilizzare un nome di una variabile non dichiarata, verrà generato un errore in fase di compilazione.

Se non si utilizza l'istruzione Option Explicit, tutte le variabili non dichiarate saranno di tipo Variant, a meno che non sia stato specificato un tipo predefinito diverso con un'istruzione Deftipo.

Nota   È consigliabile utilizzare l'istruzione Option Explicit per evitare di digitare in maniera errata il nome di una variabile esistente oppure di creare confusione nel codice nel quale l'area di validità della variabile non è chiara.


Istruzione Option Private

Se viene utilizzata in applicazioni host che consentono di impostare riferimenti fra più progetti, Option Private Module consente di evitare che si faccia riferimento al contenuto di un modulo all'esterno del progetto di appartenenza. Nelle applicazioni host in cui tali riferimenti non sono ammessi, ad esempio nelle versioni autonome di Visual Basic, Option Private non produce alcun effetto.

Sintassi

Option Private Module

Osservazioni

Se si utilizza l'istruzione Option Private è necessario inserirla a livello di modulo, prima di qualsiasi altra routine.

Le parti pubbliche (variabili, oggetti, e tipi definiti dall'utente dichiarati a livello di modulo) di moduli dichiarati privati con l'istruzione Option Private Module saranno disponibili all'interno del progetto che contiene il modulo, ma non saranno disponibili per altri progetti o altre applicazioni.

Nota   L'istruzione Option Private risulta utile solo per applicazioni host che supportano il caricamento simultaneo di più progetti e riferimenti tra progetti caricati. Microsoft Excel, ad esempio, consente di caricare più progetti e Option Private Module può essere utilizzata per limitare la visibilità tra progetti. Sebbene Visual Basic consenta di caricare più progetti, i riferimenti tra progetti non sono mai ammessi.


Istruzione Private

Utilizzata a livello di modulo per dichiarare variabili private e assegnare lo spazio di archiviazione.

Sintassi

Private [WithEvents] nomevariabile[([indici])] [As [New] tipo] [,[WithEvents] nomevariabile[([indici])] [As [New] tipo]] . . .

La sintassi dell'istruzione Private è composta dalle seguenti parti:

Parte	Descrizione
WithEvents	Facoltativa. Parola chiave che specifica che nomevariabile è una variabile oggetto utilizzata per rispondere agli eventi generati da un oggetto ActiveX. Valida solo nei moduli di classe. È possibile dichiarare il numero desiderato di variabili con WithEvents, ma non è possibile creare matrici con WithEvents. Non è consentito utilizzare New con WithEvents.
nomevariabile	Obbligatoria. Nome della variabile, espresso in base alle convenzioni di denominazione standard delle variabili.
indici	Facoltativa. Dimensioni di una variabile matrice. È possibile dichiarare fino a 60 dimensioni multiple. La sintassi dell'argomento indici è descritta di seguito:
	[inferiore To] superiore [,[inferiore To] superiore] . . .
	Se non specificato in modo esplicito con inferiore, il limite inferiore di una matrice viene controllato dall'istruzione Option Base. Se non è presente un'istruzione Option Base il limite inferiore sarà zero.
New	Facoltativa. Parola chiave che consente di creare un oggetto in modo implicito. Se si utilizza New per la dichiarazione della variabile oggetto, verrà creata una nuova istanza dell'oggetto in occasione del primo riferimento a tale oggetto e pertanto non è necessario utilizzare l'istruzione Set per assegnare il riferimento all'oggetto. La parola chiave New non può essere utilizzata per dichiarare variabili di qualsiasi tipo di dati, intrinseco, per dichiarare istanze di oggetti dipendenti e con WithEvents.
tipo	Facoltativa. Tipo di dati della variabile che potrebbe essere Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (per stringhe di lunghezza variabile), String * lunghezza (per stringhe di lunghezza fissa), Object, Variant, un tipo definito dall'utente o un tipo di oggetto. Utilizzare una proposizione As tipo distinta per ciascuna variabile da dichiarare.
Osservazioni

Le variabili Private sono disponibili solo nel modulo in cui vengono dichiarate.

Utilizzare l'istruzione Private per dichiarare il tipo di dati di una variabile. L'istruzione che segue, ad esempio, dichiara una variabile di tipo Integer:

Private NumberOfEmployees As Integer

Utilizzare inoltre l'istruzione Private per dichiarare il tipo di oggetto di una variabile. L'istruzione che segue dichiara una variabile per una nuova istanza di un foglio di lavoro.

Private X As New Worksheet

Se la parola chiave New non viene utilizzata nella dichiarazione di una variabile oggetto, alla variabile che fa riferimento all'oggetto deve essere assegnato un oggetto esistente tramite l'istruzione Set prima di poter essere utilizzata. Fino a quando non le viene assegnato un oggetto, la variabile oggetto dichiarata avrà il valore speciale Nothing, che indica che tale variabile non si riferisce a nessuna istanza particolare di un oggetto.

Se non si specifica un tipo di dati o un tipo di oggetto e il modulo non include un'istruzione Deftipo , la variabile sarà di tipo Variant per impostazione predefinita.

È inoltre possibile utilizzare l'istruzione Private con parentesi vuote per dichiarare matrici dinamiche. Dopo aver dichiarato una matrice dinamica, utilizzare l'istruzione ReDim all'interno di una routine per definire il numero di dimensioni e di elementi della matrice. Se si prova a ridichiarare una dimensione di una variabile matrice di cui sono già state dichiarate le dimensioni con un'istruzione Private, Public o Dim, verrà generato un errore.

Le variabili numeriche vengono inizializzate su 0. Le stringhe di lunghezza variabile vengono inizializzate come stringhe di lunghezza zero e le stringhe di lunghezza fissa vengono riempite con zeri. Le variabili Variant vengono inizializzate su Empty. Gli elementi di tipo definito dall'utente vengono inizializzati come se fossero variabili distinte.

Nota   Quando si utilizza l'istruzione Private in una routine, in genere l'istruzione viene inserita all'inizio della routine stessa.


Istruzione Property Get

Dichiara il nome, gli argomenti e il codice che costituiscono il corpo di una routine Property Get che consente di ottenere il valore di una proprietà.

Sintassi

[Public | Private | Friend] [Static] Property Get nome [(elencoargomenti)] [As tipo]
[istruzioni]
[nome = espressione]
[Exit Property]
[istruzioni]
[nome = espressione]

End Property

La sintassi dell'istruzione Property Get è composta dalle seguenti parti:

Parte	Descrizione
Public	Facoltativa. Indica che la routine Property Get è accessibile per tutte le altre routine in tutti i moduli. Se utilizzata in un modulo che include un'istruzione Option Private, la routine non sarà disponibile esternamente al progetto.
Private	Facoltativa. Indica che la routine Property Get è accessibile solo per le altre routine incluse nel modulo in cui è stata dichiarata.
Friend	Facoltativa. Utilizzata solo nei moduli di classe. Indica che la routine Property Get è visibile in tutto il progetto, ma non per il controller di un'istanza di un oggetto.
Static	Facoltativa. Indica che le variabili locali della routine Property Get vengono conservate durante le chiamate. L'attributo Static non influisce sulle variabili dichiarate al di fuori della routine Property Get, anche se vengono utilizzate nella routine stessa.
nome	Obbligatoria. Nome della routine Property Get , espresso in base alle convenzioni di denominazione standard delle variabili. L'unica eccezione è rappresentata dal fatto che il nome può essere uguale a quello assegnato a una routine Property Let o Property Set nello stesso modulo.
elencoargomenti	Facoltativa. Elenco delle variabili che rappresentano gli argomenti passati alla routine Property Get quando questa viene richiamata. Gli argomenti multipli sono separati da virgole. Il nome e il tipo di dati di ciascun argomento nella routine Property Get devono essere uguali a quelli degli argomenti corrispondenti nella routine Property Let (se esiste).
tipo	Facoltativa. Tipo di dati risultato della routine Property Get; può essere Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (non di lunghezza fissa), Object, tipo definito dall'utente Variant e Arrays. Il tipo restituito da una routine Property Get deve essere lo stesso tipo di dati dell'ultimo argomento (a volte dell'unico argomento) in una routine Property Let corrispondente (se esiste) che definisce il valore assegnato alla proprietà a destra di un'espressione.
istruzioni	Facoltativa. Qualsiasi gruppo di istruzioni da eseguire nel corpo della routine Property Get.
espressione	Facoltativa. Valore della proprietà restituita dalla routine definita con l'istruzione Property Get.
La sintassi dell'argomento elencoargomenti è composta dalle seguenti parti:

[Optional] [ByVal | ByRef] [ParamArray] nomevariabile[( )] [As tipo] [= valorepredefinito]

Parte	Descrizione
Optional	Facoltativa. Indica che un argomento non è obbligatorio. Se viene utilizzata, anche tutti gli argomenti successivi in elencoargomenti devono essere facoltativi e dichiarati con la parola chiave Optional.
ByVal	Facoltativa. Indica che l'argomento viene passato per valore.
ByRef	Facoltativa. Indica che l'argomento viene passato per riferimento. Impostazione predefinita in Visual Basic.
ParamArray	Facoltativa. Utilizzata solo come ultimo argomento in elencoargomenti per indicare che l'argomento finale è una matrice Optional di elementi Variant. La parola chiave ParamArray consente di fornire un numero arbitrario di argomenti. Può non essere utilizzata con ByVal, ByRef o Optional.
nomevariabile	Obbligatoria. Nome della variabile che rappresenta l'argomento passato alla routine, espresso in base alle convenzioni di denominazione standard delle variabili.
tipo	Facoltativa. Dichiara il tipo di dati dell'argomento passato alla routine: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (solo di lunghezza variabile), Object, Variant o un tipo di oggetto specifico. Se il parametro non è Optional, è inoltre possibile specificare un tipo definito dall'utente.
valorepredefinito	Facoltativa. Qualsiasi costante o espressione costante. Valida solo per i parametri Optional. Se il tipo è Object, un valore predefinito esplicito può essere solo Nothing.
Osservazioni

Le routine Property Get sono Public per impostazione predefinita, se non diversamente specificato in modo esplicito con Public, Private o Friend. Se non si utilizza Static, il valore delle variabili locali non viene conservato tra le chiamate. La parola chiave Friend può essere utilizzata solo nei moduli di classe. Alle routine Friend, tuttavia, possono accedere le routine di qualsiasi modulo di un progetto. Una routine Friend non compare nella libreria dei tipi della classe superiore e non supporta l'associazione tardiva.

Tutto il codice eseguibile deve essere incluso in una routine. Non è possibile definire una routine Property Get all'interno di un'altra routine Function, Sub o Property.

L'istruzione Exit Property consente di uscire immediatamente da una routine Property Get. Il programma continuerà con l'istruzione successiva all'istruzione che ha richiamato la routine Property Get. In una routine Property Get è possibile inserire un qualsiasi numero di istruzioni Exit Property in qualsiasi posizione.

Analogamente a una routine Sub e a una routine Property Let, una routine Property Get è una routine distinta che può includere argomenti, eseguire una serie di istruzioni e modificare i valori degli argomenti in essa inclusi. Diversamente dalla routine Sub o dalla routine Property Let, una routine Property Get può essere utilizzata solo a destra di un'espressione, nello stesso modo in cui viene utilizzata una routine Function o viene utilizzato un nome di proprietà, quando si desidera ottenere come risultato il valore di una proprietà.


Istruzione Property Let

Dichiara il nome, gli argomenti e il codice che costituiscono il corpo di una routine Property Let che consente di assegnare il valore a una proprietà.

Sintassi

[Public | Private | Friend] [Static] Property Let nome ([elencoargomenti,] valore)
[istruzioni]
[Exit Property]
[istruzioni]

End Property

La sintassi dell'istruzione Property Let è composta dalle seguenti parti:

Parte	Descrizione
Public	Facoltativa. Indica che la routine Property Let è accessibile per tutte le altre routine in tutti i moduli. Se utilizzata in un modulo che include un'istruzione Option Private, la routine non sarà disponibile esternamente al progetto.
Private	Facoltativa. Indica che la routine Property Let è accessibile solo per le altre routine incluse nel modulo in cui è stata dichiarata.
Friend	Facoltativa. Utilizzata solo nei moduli di classe. Indica che la routine Property Let è visibile in tutto il progetto, ma non per il controller di un'istanza di un oggetto.
Static	Facoltativa. Indica che le variabili locali della routine Property Let vengono conservate durante le chiamate. L'attributo Static non influisce sulle variabili dichiarate al di fuori della routine Property Let, anche se vengono utilizzate nella routine stessa.
nome	Obbligatoria. Nome della routine Property Let , espresso in base alle convenzioni di denominazione standard delle variabili. L'unica eccezione è rappresentata dal fatto che il nome può essere uguale a quello assegnato a una routine Property Get o Property Set nello stesso modulo.
elencoargomenti	Obbligatoria. Elenco delle variabili che rappresentano gli argomenti passati alla routine Property Let, quando questa viene richiamata. Gli argomenti multipli sono separati da virgole. Il nome e il tipo di dati di ciascun argomento in una routine Property Let (a eccezione dell'ultimo) devono essere uguali agli argomenti corrispondenti in una routine Property Get.
valore	Obbligatoria. Variabile che contiene il valore da assegnare alla proprietà. Quando la routine viene richiamata, questo argomento compare a destra dell'espressione chiamante. Il tipo di dati di valore deve essere lo stesso restituito dalla routine Property Get corrispondente.
istruzioni	Facoltativa. Qualsiasi gruppo di istruzioni da eseguire nel corpo della routine Property Let.
La sintassi dell'argomento elencoargomenti è composta dalle seguenti parti:

[Optional] [ByVal | ByRef] [ParamArray] nomevariabile[( )] [As tipo] [= valorepredefinito]

Parte	Descrizione
Optional	Facoltativa. Indica che un argomento non è obbligatorio. Se viene utilizzata, anche tutti gli argomenti successivi in elencoargomenti devono essere facoltativi e dichiarati con la parola chiave Optional. Si noti che la parte destra di un'espressione Property Let non può essere Optional.
ByVal	Facoltativa. Indica che l'argomento viene passato per valore.
ByRef	Facoltativa. Indica che l'argomento viene passato per riferimento. Impostazione predefinita in Visual Basic.
ParamArray	Facoltativa. Utilizzata solo come ultimo argomento in elencoargomenti per indicare che l'argomento finale è una matrice Optional di elementi Variant. La parola chiave ParamArray consente di fornire un numero arbitrario di argomenti. Può non essere utilizzata con ByVal, ByRef o Optional.
nomevariabile	Obbligatoria. Nome della variabile che rappresenta l'argomento passato alla routine, espresso in base alle convenzioni di denominazione standard delle variabili.
tipo	Facoltativa. Dichiara il tipo di dati dell'argomento passato alla routine: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (solo di lunghezza variabile), Object, Variant o un tipo di oggetto specifico. Se il parametro non è Optional, è inoltre possibile specificare un tipo definito dall'utente.
valorepredefinito	Facoltativa. Qualsiasi costante o espressione costante. Valida solo per i parametri Optional. Se il tipo è Object, un valore predefinito esplicito può essere solo Nothing.
Nota   In ogni istruzione Property Let è necessario definire almeno uno degli argomenti per la routine che viene definita tramite l'istruzione. Tale argomento, oppure l'ultimo argomento se ve ne sono diversi, conterrà il valore effettivo da assegnare alla proprietà quando viene richiamata la routine definita con l'istruzione Property Let. Tale argomento è indicato con il segnaposto valore nella sintassi precedente.

Osservazioni

Le routine Property Let sono Public per impostazione predefinita, se non diversamente specificato in modo esplicito con Public, Private o Friend. Se non si utilizza Static, il valore delle variabili locali non viene conservato tra le chiamate. La parola chiave Friend può essere utilizzata solo nei moduli di classe. Alle routine Friend, tuttavia, possono accedere le routine di qualsiasi modulo di un progetto. Una routine Friend non compare nella libreria dei tipi della classe superiore e non supporta l'associazione tardiva.

Tutto il codice eseguibile deve essere incluso in una routine. Non è possibile definire una routine Property Let all'interno di un'altra routine Property, Sub o Function.

L'istruzione Exit Property consente di uscire immediatamente da una routine Property Let. Il programma continuerà con l'istruzione successiva all'istruzione che ha richiamato la routine Property Let. In una routine Property Let è possibile inserire un qualsiasi numero di istruzioni Exit Property in qualsiasi posizione.

Analogamente a una routine Sub e a una routine Property Get, una routine Property Let è una routine distinta che può includere argomenti, eseguire una serie di istruzioni e modificare i valori degli argomenti in essa inclusi. Diversamente dalle routine Function e Property Get che restituiscono un valore, una routine Property Let può essere utilizzata solo a sinistra di un'espressione di assegnazione di proprietà o di un'istruzione Let.


Istruzione Property Set

Dichiara il nome, gli argomenti e il codice che costituiscono il corpo di una routine Property che consente di impostare un riferimento a un oggetto.

Sintassi

[Public | Private | Friend] [Static] Property Set nome ([elencoargomenti,] riferimento)
[istruzioni]
[Exit Property]
[istruzioni]

End Property

La sintassi dell'istruzione Property Set è composta dalle seguenti parti:

Parte	Descrizione
Optional	Facoltativa. Indica che l'argomento può o non può essere fornito dal chiamante.
Public	Facoltativa. Indica che la routine Property Set è accessibile per tutte le altre routine in tutti i moduli. Se utilizzata in un modulo che include un'istruzione Option Private, la routine non sarà disponibile esternamente al progetto.
Private	Facoltativa. Indica che la routine Property Set è accessibile solo per le altre routine incluse nel modulo in cui è stata dichiarata.
Friend	Facoltativa. Utilizzata solo nei moduli di classe. Indica che la routine Function è visibile in tutto il progetto, ma non per il controller di un'istanza di un oggetto.
Static	Facoltativa. Indica che le variabili locali della routine Property Set vengono conservate durante le chiamate. L'attributo Static non influisce sulle variabili dichiarate al di fuori della routine Property Set, anche se vengono utilizzate nella routine stessa.
nome	Obbligatoria. Nome della routine Property Set , espresso in base alle convenzioni di denominazione standard delle variabili. L'unica eccezione è rappresentata dal fatto che il nome può essere uguale a quello assegnato a una routine Property Get o Property Let nello stesso modulo.
elencoargomenti	Obbligatoria. Elenco delle variabili che rappresentano gli argomenti passati alla routine Property Set quando questa viene richiamata. Gli argomenti multipli sono separati da virgole.
riferimento	Obbligatoria. Variabile che contiene il riferimento all'oggetto utilizzato a destra dell'assegnazione di un riferimento all'oggetto.
istruzioni	Facoltativa. Qualsiasi gruppo di istruzioni da eseguire nel corpo della routine Property.
La sintassi dell'argomento elencoargomenti è composta dalle seguenti parti:

[Optional] [ByVal | ByRef] [ParamArray] nomevariabile[( )] [As tipo] [= valorepredefinito]

Parte	Descrizione
Optional	Facoltativa. Indica che un argomento non è obbligatorio. Se viene utilizzata, anche tutti gli argomenti successivi in elencoargomenti devono essere facoltativi e dichiarati con la parola chiave Optional. Si noti che la parte destra di un'espressione Property Set non può essere Optional.
ByVal	Facoltativa. Indica che l'argomento viene passato per valore.
ByRef	Facoltativa. Indica che l'argomento viene passato per riferimento. Impostazione predefinita in Visual Basic.
ParamArray	Facoltativa. Utilizzata solo come ultimo argomento in elencoargomenti per indicare che l'argomento finale è una matrice Optional di elementi Variant. La parola chiave ParamArray consente di fornire un numero arbitrario di argomenti. Può non essere utilizzata con ByVal, ByRef o Optional.
nomevariabile	Obbligatoria. Nome della variabile che rappresenta l'argomento passato alla routine, espresso in base alle convenzioni di denominazione standard delle variabili.
tipo	Facoltativa. Dichiara il tipo di dati dell'argomento passato alla routine: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (solo di lunghezza variabile), Object, Variant o un tipo di oggetto specifico. Se il parametro non è Optional, è inoltre possibile specificare un tipo definito dall'utente.
valorepredefinito	Facoltativa. Qualsiasi costante o espressione costante. Valida solo per i parametri Optional. Se il tipo è Object, un valore predefinito esplicito può essere solo Nothing.
Nota   In ogni istruzione Property Set è necessario definire almeno uno degli argomenti per la routine che viene definita tramite l'istruzione. Tale argomento, oppure l'ultimo argomento se ve ne sono diversi, conterrà il riferimento all'oggetto effettivo per la proprietà quando viene richiamata la routine definita con l'istruzione Property Set. Tale argomento è rappresentato dal segnaposto riferimento nella sintassi precedente. Non può essere Optional.

Osservazioni

Le routine Property Set sono Public per impostazione predefinita, se non diversamente specificato in modo esplicito con Public, Private o Friend. Se non si utilizza Static, il valore delle variabili locali non viene conservato tra le chiamate. La parola chiave Friend può essere utilizzata solo nei moduli di classe. Alle routine Friend, tuttavia, possono accedere le routine di qualsiasi modulo di un progetto. Una routine Friend non compare nella libreria dei tipi della classe superiore e non supporta l'associazione tardiva.

Tutto il codice eseguibile deve essere incluso in una routine. Non è possibile definire una routine Property Set all'interno di un'altra routine Function, Sub o Property.

L'istruzione Exit Property consente di uscire immediatamente da una routine Property Set. Il programma continuerà con l'istruzione successiva all'istruzione che ha richiamato la routine Property Set. In una routine Property Set è possibile inserire un qualsiasi numero di istruzioni Exit Property in qualsiasi posizione.

Analogamente a una routine Sub e a una routine Property Get, una routine Property Set è una routine distinta che può includere argomenti, eseguire una serie di istruzioni e modificare i valori degli argomenti in essa inclusi. Diversamente dalle routine Function e Property Get che restituiscono un valore, una routine Property Set può essere utilizzata solo a sinistra di un'espressione di assegnazione di riferimento a un oggetto (istruzione Set).


Istruzione Public

Utilizzata a livello di modulo per dichiarare variabili pubbliche e assegnare lo spazio di archiviazione.

Sintassi

Public [WithEvents] nomevariabile[([indici])] [As [New] tipo] [,[WithEvents] nomevariabile[([indici])] [As [New] tipo]] . . .

La sintassi dell'istruzione Public è composta dalle seguenti parti:

Parte	Descrizione
WithEvents	Facoltativa. Parola chiave che specifica che nomevariabile è una variabile oggetto utilizzata per rispondere agli eventi generati da un oggetto ActiveX. Valida solo nei moduli di classe. È possibile dichiarare il numero desiderato di variabili con WithEvents, ma non è possibile creare matrici con WithEvents. Non è consentito utilizzare New con WithEvents.
nomevariabile	Obbligatoria. Nome della variabile, espresso in base alle convenzioni di denominazione standard delle variabili.
indici	Facoltativa. Dimensioni di una variabile matrice. È possibile dichiarare fino a 60 dimensioni multiple. La sintassi dell'argomento indici è descritta di seguito:
	[inferiore To] superiore [,[inferiore To] superiore] . . .
	Se non specificato in modo esplicito con inferiore, il limite inferiore di una matrice viene controllato dall'istruzione Option Base. Se non è presente un'istruzione Option Base il limite inferiore sarà zero.
New	Facoltativa. Parola chiave che consente di creare un oggetto in modo implicito. Se si utilizza New per la dichiarazione della variabile oggetto, verrà creata una nuova istanza dell'oggetto in occasione del primo riferimento a tale oggetto e pertanto non è necessario utilizzare l'istruzione Set per assegnare il riferimento all'oggetto. La parola chiave New non può essere utilizzata per dichiarare variabili di qualsiasi tipo di dati intrinseco, per dichiarare istanze di oggetti dipendenti e con WithEvents.
tipo	Facoltativa. Tipo di dati della variabile che potrebbe essere Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String, (per stringhe di lunghezza variabile), String * lunghezza (per stringhe di lunghezza fissa), Object, Variant, un tipo definito dall'utente oppure un tipo di oggetto. Utilizzare una proposizione As tipo distinta per ciascuna variabile da dichiarare.
Osservazioni

Le variabili dichiarate utilizzando l'istruzione Public sono disponibili per tutte le routine in tutti i moduli e in tutte le applicazioni, se non diversamente specificato con l'istruzione Option Private Module. In questo caso, le variabili saranno pubbliche solo all'interno del progetto in cui si trovano.

Attenzione   L'istruzione Public non può essere utilizzata in un modulo di classe per dichiarare una variabile stringa di lunghezza fissa.

Utilizzare l'istruzione Public per dichiarare il tipo di dati di una variabile. L'istruzione che segue, ad esempio, dichiara una variabile di tipo Integer:

Public NumberOfEmployees As Integer

Utilizzare inoltre l'istruzione Public per dichiarare il tipo di oggetto di una variabile. L'istruzione che segue dichiara una variabile per una nuova istanza di un foglio di lavoro.

Public X As New Worksheet

Se la parola chiave New non viene utilizzata nella dichiarazione di una variabile oggetto, alla variabile che fa riferimento all'oggetto deve essere assegnato un oggetto esistente tramite l'istruzione Set prima di poter essere utilizzata. Fino a quando non le viene assegnato un oggetto, la variabile oggetto dichiarata avrà il valore speciale Nothing, che indica che tale variabile non si riferisce a nessuna istanza particolare di un oggetto.

È inoltre possibile utilizzare l'istruzione Public con parentesi vuote per dichiarare matrici dinamiche. Dopo aver dichiarato una matrice dinamica, utilizzare l'istruzione ReDim all'interno di una routine per definire il numero di dimensioni e di elementi della matrice. Se si prova a ridichiarare una dimensione di una variabile matrice di cui sono già state dichiarate le dimensioni con un'istruzione Private, Public o Dim, verrà generato un errore.

Se non si specifica un tipo di dati o un tipo di oggetto e il modulo non include un'istruzione Deftipo la variabile sarà di tipo Variant per impostazione predefinita.

Le variabili numeriche vengono inizializzate su 0. Le stringhe di lunghezza variabile vengono inizializzate come stringhe di lunghezza zero ("") e le stringhe di lunghezza fissa vengono riempite con zeri. Le variabili Variant vengono inizializzate su Empty. Gli elementi di tipo definito dall'utente vengono inizializzati come se fossero variabili distinte.


Istruzione ReDim

Utilizzata a livello di routine per riassegnare lo spazio di archiviazione per variabili di matrici dinamiche.

Sintassi

ReDim [Preserve] nomevariabile(indici) [As tipo] [, nomevariabile(indici) [As tipo]] . . .

La sintassi dell'istruzione ReDim è composta dalle seguenti parti:

Parte	Descrizione
Preserve	Facoltativa. Parola chiave utilizzata per mantenere i dati di una matrice esistente quando se ne modifica l'ultima dimensione.
nomevariabile	Obbligatoria. Nome della variabile, espresso in base alle convenzioni di denominazione standard delle variabili.
indici	Obbligatoria. Dimensioni di una variabile matrice. È possibile dichiarare fino a 60 dimensioni multiple. La sintassi dell'argomento indici è descritta di seguito: [inferiore To] superiore [,[inferiore To] superiore] . . . Se non specificato in modo esplicito con inferiore, il limite inferiore di una matrice viene controllato dall'istruzione Option Base. Se non è presente un'istruzione Option Base il limite inferiore sarà zero.
tipo	Facoltativa. Tipo di dati della variabile che potrebbe essere Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (per stringhe di lunghezza variabile), String * lunghezza (per stringhe di lunghezza fissa), Object, Variant, un tipo definito dall'utente o un tipo di oggetto. Utilizzare una proposizione As tipo distinta per ciascuna variabile da dichiarare. Per una variabile di tipo Variant che contiene una matrice, tipo descrive il tipo di ciascun elemento della matrice ma non modifica il tipo di Variant.
Osservazioni

L'istruzione ReDim viene in genere utilizzata per dimensionare e ridimensionare una matrice dinamica che è già stata formalmente dichiarata tramite l'istruzione Private, Public o Dim con le parentesi vuote (senza indici di dimensione).

È possibile utilizzare l'istruzione ReDim ripetutamente per cambiare il numero di elementi e dimensioni di una matrice. Non è possibile, tuttavia, dichiarare una matrice di un tipo e quindi utilizzare ReDim per cambiare il tipo della matrice, a meno che la matrice non sia inclusa in una variabile di tipo Variant. In questo caso il tipo di elementi potrà essere modificato utilizzando una proposizione As tipo, a meno che non venga utilizzata la parola chiave Preserve per impedire le modifiche al tipo di dati.

Se si utilizza la parola chiave Preserve, è possibile modificare solo l'ultima dimensione della matrice e non il numero di dimensioni. Ad esempio, se la matrice ha una sola dimensione, la modifica è possibile, in quando si tratta dell'unica e ultima dimensione. Se la matrice ha due o più dimensioni, è possibile modificare solo l'ultima dimensione e mantenere il contenuto della matrice. L'esempio che segue illustra come aumentare l'ultima dimensione di una matrice dinamica senza cancellare i dati nella matrice.

ReDim X(10, 10, 10)

. . .

ReDim Preserve X(10, 10, 15)

In modo analogo, quando si utilizza Preserve, è possibile modificare le dimensioni della matrice modificando solo il limite superiore. Se si modifica il limite inferiore verrà generato un errore.

Riducendo le dimensioni di una matrice si perdono i dati contenuti negli elementi eliminati. Se una matrice viene passata a una routine per riferimento, non è possibile ridimensionare la matrice all'interno di tale routine.

Le variabili numeriche vengono inizializzate su 0. Le stringhe di lunghezza variabile vengono inizializzate come stringhe di lunghezza zero e le stringhe di lunghezza fissa vengono riempite con zeri. Le variabili Variant vengono inizializzate su Empty. Gli elementi di tipo definito dall'utente vengono inizializzati come se fossero variabili distinte. A una variabile che si riferisce a un oggetto deve essere assegnato un oggetto esistente utilizzando l'istruzione Set prima di poter essere utilizzata. Fino a quando non vi viene assegnato un oggetto, la variabile oggetto dichiarata avrà il valore speciale Nothing, che indica che tale variabile non si riferisce a nessuna istanza particolare di un oggetto.

Attenzione   L'istruzione ReDim funge da istruzione di dichiarazione se la variabile che dichiara non esiste a livello di modulo o a livello di routine. Se in seguito viene creata un'altra variabile con lo stesso nome, anche con area di validità più estesa, ReDim farà riferimento all'ultima variabile creata e non verrà generato necessariamente un errore di compilazione anche in presenza di Option Explicit. Per evitare questo tipo di conflitti, ReDim non dovrebbe essere utilizzata come istruzione di dichiarazione ma solo per ridimensionare le matrici.

Nota   Per poter ridimensionare una matrice contenuta in una variabile di tipo Variant, è necessario dichiarare la variabile Variant in modo esplicito prima di poterne ridimensionare la matrice.


Istruzione Rem

Utilizzata per includere commenti esplicativi in un programma.

Sintassi

Rem commento

È inoltre possibile utilizzare la seguente sintassi:

' commento

L'argomento facoltativo commento è il testo di qualsiasi commento si desideri includere in un programma. È necessario inserire uno spazio dopo la parola chiave Rem e prima di commento.

Osservazioni

Se vengono utilizzati numeri di riga o etichette di riga, è possibile passare da un'istruzione GoTo o GoSub a una riga che contiene un'istruzione Rem. L'esecuzione continua con la prima istruzione eseguibile che segue l'istruzione Rem. Se la parola chiave Rem segue altre istruzioni su una riga, è necessario separarla con i due punti (:).

È possibile utilizzare un apostrofo (') anziché la parola chiave Rem. Se si utilizza un apostrofo, non è necessario immettere i due punti dopo le altre istruzioni.


Istruzione Set

Assegna un riferimento a un oggetto a una variabile o a una proprietà.

Sintassi

Set variabileoggetto = {[New] espressioneoggetto | Nothing}

La sintassi dell'istruzione Set è composta dalle seguenti parti:

Parte	Descrizione
variabileoggetto	Obbligatoria. Nome della variabile o proprietà, espresso in base alle convenzioni di denominazione standard delle variabili.
New	Facoltativa. New viene in genere utilizzata nelle dichiarazioni per consentire la creazione di oggetti in modo implicito. Quando si utilizza New in combinazione con Set, viene creata una nuova istanza della classe. Se variabileoggetto contiene un riferimento a un oggetto, il riferimento viene liberato quando ne viene assegnato uno nuovo. La parola chiave New non può essere utilizzata per dichiarare variabili di qualsiasi tipo di dati intrinseco e per creare oggetti dipendenti.
espressioneoggetto	Obbligatoria. Espressione composta dal nome di un oggetto, di un'altra variabile dichiarata dello stesso tipo di oggetto, oppure una funzione o un metodo che restituisce un oggetto dello stesso tipo.
Nothing	Facoltativa. Interrompe il collegamento di variabileoggetto con qualsiasi oggetto specifico. Se si assegna Nothing a variabileoggetto, diventeranno disponibili tutte le risorse di sistema e memoria associate all'oggetto di riferimento precedente se non vi sono altre variabili che si riferiscono a tale oggetto.
Osservazioni

Per essere valido, variabileoggetto deve essere un tipo di oggetto conforme all'oggetto che gli è stato assegnato.

Le istruzioni Dim, Private, Public, ReDim e Static dichiarano soltanto la variabile che si riferisce a un oggetto. Non esisterà un effettivo riferimento all'oggetto finché non si utilizzerà l'istruzione Set per assegnare un oggetto specifico.

Nell'esempio che segue, l'istruzione Dim viene utilizzata per dichiarare una matrice di tipo Form1. Non esiste in effetti alcuna istanza di Form1. L'istruzione Set assegna quindi i riferimenti alle nuove istanze di Form1 alla variabile myChildForms. Questo codice potrebbe essere utilizzato, ad esempio, per creare form secondari in un'applicazione MDI.

Dim myChildForms(1 to 4) As Form1

Set myChildForms(1) = New Form1

Set myChildForms(2) = New Form1

Set myChildForms(3) = New Form1

Set myChildForms(4) = New Form1

In genere, se viene utilizzata l'istruzione Set per assegnare a una variabile un riferimento a un oggetto, per tale variabile non verrà creata nessuna copia dell'oggetto. Verrà invece creato un riferimento all'oggetto. Più variabili oggetto possono fare riferimento allo stesso oggetto. Dato che queste variabili sono dei riferimenti e non copie dell'oggetto, qualsiasi modifica dell'oggetto verrà apportata anche alle variabili che si riferiscono all'oggetto. Se si utilizza la parola chiave New nell'istruzione Set, tuttavia, viene di fatto creata un'istanza dell'oggetto.


Istruzione Static

Utilizzata a livello di routine per dichiarare variabili e assegnare lo spazio di archiviazione. Le variabili dichiarate con l'istruzione Static mantengono il loro valore finché il codice è in esecuzione.

Sintassi

Static nomevariabile[([indici])] [As [New] tipo] [, nomevariabile[([indici])] [As [New] tipo]] . . .

La sintassi dell'istruzione Static è composta dalle seguenti parti:

Parte	Descrizione
nomevariabile	Obbligatoria. Nome della variabile, espresso in base alle convenzioni di denominazione standard delle variabili.
indici	Facoltativa. Dimensioni di una variabile matrice. È possibile dichiarare fino a 60 dimensioni multiple. La sintassi dell'argomento indici è descritta di seguito: [inferiore To] superiore [,[inferiore To] superiore] . . . Se non specificato in modo esplicito con inferiore, il limite inferiore di una matrice viene controllato dall'istruzione Option Base. Se non è presente un'istruzione Option Base il limite inferiore sarà zero.
New	Facoltativa. Parola chiave che consente di creare un oggetto in modo implicito. Se si utilizza New per la dichiarazione della variabile oggetto, verrà creata una nuova istanza dell'oggetto in occasione del primo riferimento a tale oggetto e pertanto non è necessario utilizzare l'istruzione Set per assegnare il riferimento all'oggetto. La parola chiave New non può essere utilizzata per dichiarare variabili di qualsiasi tipo di dati intrinseco e per dichiarare istanze di oggetti dipendenti.
tipo	Facoltativa. Tipo di dati della variabile che potrebbe essere Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String, (per stringhe di lunghezza variabile), String * lunghezza (per stringhe di lunghezza fissa), Object, Variant, un tipo definito dall'utente oppure un tipo di oggetto. Utilizzare una proposizione As tipo distinta per ciascuna variabile da dichiarare.
Osservazioni

Quando il codice del modulo è in esecuzione, le variabili dichiarate con l'istruzione Static manterranno il loro valore finché il modulo non viene ripristinato o riavviato. Nei moduli di classe, le variabili dichiarate con l'istruzione Static conservano il proprio valore in ciascuna istanza della classe fino a quando l'istanza non viene eliminata. Nei moduli di form, le variabili statiche conservano il proprio valore finché il form non viene chiuso. Utilizzare l'istruzione Static all'interno di una routine non statica per dichiarare in modo esplicito variabili che sono visibili solo all'interno della routine, ma la cui durata equivale a quella del modulo in cui è definita la routine.

Utilizzare l'istruzione Static all'interno di una routine per dichiarare il tipo di dati di una variabile che conserva il proprio valore tra le chiamate. L'istruzione che segue, ad esempio, dichiara una matrice di interi a dimensione fissa:

Static EmployeeNumber(200) As Integer

L'istruzione che segue dichiara una variabile per una nuova istanza di un foglio di lavoro:

Static X As New Worksheet

Se non si utilizza la parola chiave New per dichiarare una variabile oggetto, alla variabile che si riferisce all'oggetto deve essere assegnato un oggetto esistente utilizzando l'istruzione Set prima di poter essere utilizzata. Fino a quando non le viene assegnato un oggetto, la variabile oggetto dichiarata avrà il valore speciale Nothing, che indica che tale variabile non si riferisce a nessuna istanza particolare di un oggetto. Se si utilizza New per la dichiarazione, verrà creata una nuova istanza dell'oggetto in occasione del primo riferimento a tale oggetto.

Se non si specifica un tipo di dati o un tipo oggetto e il modulo non include un'istruzione Deftipo, la variabile sarà di tipo Variant per impostazione predefinita.

Nota   L'istruzione Static e la parola chiave Static sono simili ma vengono utilizzate per scopi diversi. Se si dichiara una routine tramite la parola chiave Static (as in Static Sub CountSales ()), lo spazio di archiviazione per tutte le variabili locali all'interno della routine verrà assegnato una volta sola e il valore delle variabili verrà mantenuto per tutta la durata dell'esecuzione del programma. Nel caso di routine non statiche, lo spazio di archiviazione per le variabili verrà assegnato a ogni chiamata della routine e liberato all'uscita dalla routine. L'istruzione Static viene utilizzata per dichiarare variabili specifiche all'interno di routine non statiche e mantenere il loro valore durante l'esecuzione del programma.

Le variabili numeriche vengono inizializzate su 0. Le stringhe di lunghezza variabile vengono inizializzate come stringhe di lunghezza zero ("") e le stringhe di lunghezza fissa vengono riempite con zeri. Le variabili di tipo Variant vengono inizializzate su Empty. Gli elementi di tipo definito dall'utente vengono inizializzati come se fossero variabili distinte.

Nota   Quando si utilizza l'istruzione Static in una routine, l'istruzione Static deve essere inserita all'inizio della routine insieme alle altre istruzioni di dichiarazione, ad esempio Dim.


Istruzione Sub

Dichiara il nome, gli argomenti e il codice che costituiscono il corpo di una routine Sub.

Sintassi

[Private | Public | Friend] [Static] Sub nome [(elencoargomenti)]
[istruzioni]
[Exit Sub]
[istruzioni]

End Sub

La sintassi dell'istruzione Sub è composta dalle seguenti parti:

Parte	Descrizione
Public	Facoltativa. Indica che la routine Sub è accessibile per tutte le altre routine in tutti i moduli. Se utilizzata in un modulo che include un'istruzione Option Private, la routine non sarà disponibile esternamente al progetto.
Private	Facoltativa. Indica che la routine Sub è accessibile solo per le altre routine incluse nel modulo in cui è stata dichiarata.
Friend	Facoltativa. Utilizzata solo nei moduli di classe. Indica che la routine Sub è visibile in tutto il progetto, ma non per il controller di un'istanza di un oggetto.
Static	Facoltativa. Indica che le variabili locali della routine Sub vengono conservate durante le chiamate. L'attributo Static non influisce sulle variabili dichiarate al di fuori della routine Sub, anche se vengono utilizzate nella routine stessa.
nome	Obbligatoria. Nome della routine Sub, espresso in base alle convenzioni di denominazione standard delle variabili.
elencoargomenti	Facoltativa. Elenco delle variabili che rappresentano gli argomenti passati alla routine Sub , quando questa viene richiamata. Le variabili multiple sono separate da virgole.
istruzioni	Facoltativa. Qualsiasi gruppo di istruzioni da eseguire nel corpo della routine Sub.
La sintassi dell'argomento elencoargomenti è composta dalle seguenti parti:

[Optional] [ByVal | ByRef] [ParamArray] nomevariabile[( )] [As tipo] [= valorepredefinito]

Parte	Descrizione
Optional	Facoltativa. Parola chiave che indica che un argomento non è obbligatorio. Se viene utilizzata, anche tutti gli argomenti successivi in elencoargomenti devono essere facoltativi e dichiarati con la parola chiave Optional. La parola chiave Optional non può essere utilizzata per nessun argomento se si utilizza ParamArray.
ByVal	Facoltativa. Indica che l'argomento viene passato per valore.
ByRef	Facoltativa. Indica che l'argomento viene passato per riferimento. Impostazione predefinita in Visual Basic.
ParamArray	Facoltativa. Utilizzata solo come ultimo argomento di elencoargomenti, indica che l'ultimo argomento è una matrice Optional di elementi Variant. La parola chiave ParamArray consente di indicare un numero arbitrario di argomenti. Non può essere utilizzata con ByVal, ByRef oppure Optional.
nomevariabile	Obbligatoria. Nome della variabile che rappresenta l'argomento passato alla routine, espresso in base alle convenzioni di denominazione standard delle variabili.
tipo	Facoltativa. Tipo di dati dell'argomento passato alla routine: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (solo di lunghezza variabile), Object, Variant o un tipo di oggetto specifico. Se il parametro non è Optional, è inoltre possibile specificare un tipo definito dall'utente.
valorepredefinito	Facoltativa. Qualsiasi costante o espressione. Valida solo per i parametri Optional. Se il tipo è Object, un valore predefinito esplicito può essere solo Nothing.
Osservazioni

Le routine Sub sono Public per impostazione predefinita, se non diversamente specificato in modo esplicito con Public, Private o Friend. Se non si utilizza Static, il valore delle variabili locali non viene conservato tra le chiamate. La parola chiave Friend può essere utilizzata solo nei moduli di classe. Alle routine Friend, tuttavia, possono accedere le routine di qualsiasi modulo di un progetto. Una routine Friend non compare nella libreria dei tipi della classe superiore e non supporta l'associazione tardiva.

Attenzione   Le routine Sub possono essere ricorsive, ovvero possono richiamare se stesse per eseguire un'operazione specifica. Si noti che la ricorsione può causare problemi di overflow dello stack. La parola chiave Static in genere non viene utilizzata con le routine Sub ricorsive.

Tutto il codice eseguibile deve essere incluso in una routine. Non è possibile definire una routine Sub all'interno di un'altra routine Function, Sub o Property.

L'istruzione Exit Sub consente di uscire immediatamente da una routine Sub. Il programma continuerà con l'istruzione successiva all'istruzione che ha richiamato la routine Sub. In una routine Sub è possibile inserire qualsiasi numero di istruzioni Exit Sub in qualsiasi posizione.

Analogamente a una routine Function, una routine Sub è una routine distinta che può includere argomenti, eseguire una serie di istruzioni e modificare i valori degli argomenti in essa inclusi. Diversamente dalla routine Function, che restituisce un valore, una routine Sub non può essere utilizzata in un'espressione.

È possibile richiamare una routine Sub utilizzandone il nome, seguito dall'elenco degli argomenti. Per informazioni dettagliate su come richiamare le routine Sub, vedere l'istruzione Call.

Le variabili utilizzate nelle routine Sub rientrano in due categorie, ovvero le variabili dichiarate in modo esplicito all'interno della routine o le variabili non dichiarate. Le variabili dichiarate utilizzando l'istruzione Dim o istruzioni equivalenti sono sempre locali rispetto alla routine. Le altre variabili utilizzate ma non dichiarate in una routine sono locali se non vengono dichiarate in modo esplicito a un livello superiore esternamente alla routine.

Attenzione   In una routine è possibile utilizzare una variabile non dichiarata in modo esplicito nella routine, ma è possibile che si verifichi un conflitto di nome se un qualsiasi altro elemento definito a livello di modulo ha lo stesso nome. Se la routine si riferisce a una variabile non dichiarata che la lo stesso nome di un'altra routine, costante o variabile, si presuppone che la routine faccia riferimento a tale nome a livello di modulo. È consigliabile dichiarare le variabili in modo esplicito per evitare conflitti di questo tipo. Per fare in modo che la dichiarazione delle variabili sia sempre esplicita è possibile utilizzare l'istruzione Option Explicit.

Nota   Non è possibile utilizzare GoSub, GoTo o Return per entrare o uscire da una routine Sub.


Istruzione Type

Utilizzata a livello di modulo per definire un tipo di dati definito dall'utente che contiene uno o più elementi.

Sintassi

[Private | Public] Type nomevariabile
 nomeelemento [([indici])] As tipo
[nomeelemento [([indici])] As tipo]
. . .

End Type

La sintassi dell'istruzione Type è composta dalle seguenti parti:

Parte	Descrizione
Public	Facoltativa. Utilizzata per dichiarare tipi definiti dall'utente disponibili per tutte le routine in tutti i moduli di tutti i progetti.
Private	Facoltativa. Utilizzata per dichiarare tipi definiti dall'utente disponibili solo nel modulo in cui viene eseguita la dichiarazione.
nomevariabile	Obbligatoria. Nome del tipo definito dall'utente, espresso in base alle convenzioni di denominazione standard delle variabili.
nomeelemento	Obbligatoria. Nome di un elemento di un tipo definito dall'utente. Anche i nomi degli elementi vengono espressi in base alle convenzioni di denominazione standard delle variabili e inoltre possono essere utilizzate parole chiave.
indici	Se non specificato in modo esplicito con inferiore, il limite inferiore di una matrice viene controllato dall'istruzione Option Base. Se non è presente un'istruzione Option Base il limite inferiore sarà zero.
tipo	Obbligatoria. Dichiara il tipo di dati dell'elemento: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (non ancora supportato), Date, String (per stringhe di lunghezza variabile), String * lunghezza (per stringhe di lunghezza fissa), Object, Variant, un altro tipo definito dall'utente oppure un tipo di oggetto.
Osservazioni

L'istruzione Type può essere utilizzata soltanto a livello di modulo. Dopo aver dichiarato un tipo di dati definito dall'utente tramite l'istruzione Type, è possibile dichiarare una variabile di tale tipo all'interno dell'area di validità della dichiarazione. Utilizzare le istruzioni Dim, Private, Public, ReDim o Static per dichiarare una variabile di tipo definito dall'utente.

Nei moduli standard e nei moduli di classe, i tipi definiti dall'utente sono pubblici per impostazione predefinita. Questa impostazione può essere modificata utilizzando la parola chiave Private.

I numeri di riga e le etichette di riga non sono ammessi nei blocchi Type...End Type.

I tipi definiti dall'utente vengono spesso utilizzati con record di dati in quanto spesso i record consistono di un numero di elementi correlati di tipi di dati diversi.

L'esempio seguente illustra l'utilizzo di matrici fisse in un tipo definito dall'utente:

Type StateData

CityCode (1 To 100) As Integer	' Dichiara una matrice fissa.

County As String * 30

End Type

Dim Washington(1 To 100) As StateData

Nell'esempio precedente, StateData include la matrice fissa CityCode e il record Washington ha la stessa struttura di StateData.

Quando si dichiara una matrice fissa all'interno di un tipo definito dall'utente, le dimensioni devono essere dichiarate con valori letterali numerici o costanti anziché con variabili.

L'impostazione dell'istruzione Option Base determina il limite inferiore delle matrici.


Funzione UBound

Restituisce un valore Long che contiene l'indice maggiore disponibile per la dimensione indicata di una matrice.

Sintassi

UBound(nomematrice[, dimensione])

La sintassi della funzione UBound è composta dalle seguenti parti:

Parte	Descrizione
nomematrice	Obbligatoria. Nome di una variabile matrice, espresso in base alle convenzioni di denominazione standard delle variabili.
dimensione	Optional; Variant (Long). Numero intero che indica il limite superiore della dimensione restituito. Utilizzare 1 per la prima dimensione, 2 per la seconda e così via. Se l'argomento dimensione viene omesso, verrà utilizzato il valore 1.
Osservazioni

La funzione UBound viene utilizzata insieme alla funzione LBound per determinare le dimensioni di una matrice. Utilizzare la funzione LBound per trovare il limite inferiore di una dimensione di una matrice.

La funzione UBound restituisce i valori elencati nella tabella che segue per una matrice con le seguenti dimensioni:

Dim A(1 To 100, 0 To 3, -3 To 4)

Istruzione	Valore restituito
UBound(A, 1)	100
UBound(A, 2)	3
UBound(A, 3)	4


Esempio di funzione Array

In questo esempio la funzione Array viene utilizzata per restituire un valore Variant contenente una matrice.

Dim MyWeek, MyDay

MyWeek = Array("lun", "mar", "mer", "gio", "ven", "sab", "dom")

' I valori restituiti presuppongono che il limite

' inferiore sia impostato su 1 (utilizzando

' l'istruzione Option Base).

MyDay = MyWeek(2)	' MyDay contiene "mar".

MyDay = MyWeek(4)	' MyDay contiene "gio".


Esempio di istruzione Const

In questo esempio l'istruzione Const viene utilizzata per dichiarare le costanti da utilizzare al posto di valori letterali. Le costanti di tipo Public vengono dichiarate nella sezione Generale di un modulo standard anziché in un modulo di classe. Le costanti di tipo Private vengono dichiarate nella sezione Generale di qualsiasi tipo di modulo.

' Le costanti sono di tipo Private per impostazione

' predefinita.

Const MyVar = 459

' Dichiara una costante di tipo Public.

Public Const MyString = "GUIDA"

' Dichiara una costante di tipo Private Integer.

Private Const MyInt As Integer = 5

' Dichiara più costanti sulla stessa riga.

Const MyStr = "Salve", MyDouble As Double = 3.4567


Esempio di funzione CreateObject

In questo esempio la funzione CreateObject viene utilizzata per impostare un riferimento (xlApp) a Microsoft Excel. Il riferimento viene utilizzato per accedere alla proprietà Visible di Microsoft Excel e quindi viene utilizzato il metodo Quit di Microsoft Excel per chiudere il programma. Infine viene rilasciato il riferimento stesso.

Dim xlApp As Object	' Dichiara la variabile in cui

' memorizzare il riferimento.

Set xlApp = CreateObject("excel.application")

' È necessario impostare la proprietà Visible

' su True per visualizzare l'applicazione.

xlApp.Visible = True

' Utilizza xlApp per accedere ad altri oggetti

' di Microsoft Excel.

xlApp.Quit	' Al termine, utilizzare il metodo Quit

' per chiudere

Set xlApp = Nothing	' l'applicazione, e quindi

' rilasciare il riferimento.


Esempio di istruzione Declare

In questo esempio l'istruzione Declare viene utilizzata a livello di modulo di un modulo standard per dichiarare un riferimento a una routine esterna in una DLL. È possibile inserire istruzioni Declare in moduli di classe se si tratta di istruzioni Declare di tipo Private.

' In Microsoft Windows (16-bit):

Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

' Presuppone che SomeBeep sia un alias del

' nome della routine.

Declare Sub MessageBeep Lib "User" Alias "SomeBeep"(ByVal N As Integer)

' Utilizza un ordinale nella proposizione Alias per

' chiamare GetWinFlags.

Declare Function GetWinFlags Lib "Kernel" Alias "#132"() As Long

' In sistemi Microsoft Windows a 32 bit specificare la

' libreria User32.dll, anziché User.dll. È possibile

' utilizzare la compilazione condizionale per scrivere

' codice eseguibile sia in Windows a 32 bit che

' a 16 bit.

#If Win32 Then

Declare Sub MessageBeep Lib "User32" (ByVal N As Long)

#Else

Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

#End If


Esempio di istruzione Deftipo

In questo esempio vengono illustrati diversi utilizzi delle istruzioni Deftipo per l'impostazione dei tipi di dati predefiniti delle variabili e delle routine di funzione i cui nomi iniziano con caratteri specificati. È possibile assegnare un tipo di dati diverso da quello predefinito soltanto utilizzando l'istruzione Dim per eseguire un'assegnazione esplicita. Le istruzioni Deftipo possono essere utilizzate solo a livello di modulo, ovvero non nelle routine.

' Il tipo predefinito di dati delle variabili il cui

' nome inizia da A a K verrà impostato su Integer.

DefInt A-K

' Il tipo predefinito di dati delle variabili il cui

' nome inizia da L a Z verrà impostato su String.

DefStr L-Z

CalcVar = 4	' Inizializza Integer.

StringVar = "Salve"	' Inizializza String.

AnyVar = "Salve" 	' Produce l'errore "Tipo non

' corrispondente".

Dim Calc As Double	' Imposta il tipo su Double in

' in modo esplicito.

Calc = 2.3455	' Assegna il tipo Double.

' Le istruzioni Deftipo possono essere applicate

' anche alle routine di funzione.

CalcNum = ATestFunction(4)	' Chiama una funzione

' definita dall'utente.

' Definizione della routine di funzione ATestFunction.

Function ATestFunction(INumber)

ATestFunction = INumber * 2	' Il valore restituito è un intero.

End Function


Esempio di istruzione Dim

In questo esempio viene illustrata l'istruzione Dim utilizzata per dichiarare le variabili. L'istruzione Dim viene inoltre utilizzata per dichiarare le matrici. Il limite inferiore predefinito per gli indici di matrice è 0 e può essere modificato a livello di modulo utilizzando l'istruzione Option Base.

' AnyValue e MyValue vengono dichiarate come

' Variant per impostazione predefinita con valori

' impostati su Empty.

Dim AnyValue, MyValue

' Dichiara in modo esplicito una variabile

' di tipo Integer.

Dim Number As Integer

' Più dichiarazioni sulla stessa riga. AnotherVar è di

' tipo Variant visto che non è indicato il suo tipo.

Dim AnotherVar, Choice As Boolean, BirthDate As Date

' DayArray è una matrice di valori Variant che include

' 51 elementi da 0 a 50. Si presuppone che per il

' modulo corrente Option Base sia impostato su 0

' (valore predefinito).

Dim DayArray(50)

' Matrix è una matrice bidimensionale di interi.

Dim Matrix(3, 4) As Integer

' MyMatrix è una matrice tridimensionale di valori

' Double con limiti espliciti.

Dim MyMatrix(1 To 5,  4 To 9,  3 To 5) As Double

' BirthDay è una matrice di date con indici da 1 a 10.

Dim BirthDay(1 To 10) As Date

' MyArray è una matrice dinamica di valori Variant.

Dim MyArray()


Esempio di istruzione Enum

In questo esempio l'istruzione Enum viene utilizzata per definire un insieme di costanti predefinite. In questo caso, le costanti sono i colori che è possibile scegliere per designare i moduli di immissione dei dati in un database.

Public Enum InterfaceColors

icMistyRose = &HE1E4FF&

icSlateGray = &H908070&

icDodgerBlue = &HFF901E&

icDeepSkyBlue = &HFFBF00&

icSpringGreen = &H7FFF00&

icForestGreen = &H228B22&

icGoldenrod = &H20A5DA&

icFirebrick = &H2222B2&

End Enum


Esempio di istruzione Erase

In questo esempio l'istruzione Erase viene utilizzata per reinizializzare gli elementi di matrici di dimensioni fisse e riallocare lo spazio di archiviazione della matrice dinamica.

' Dichiara le variabili di matrice.

Dim NumArray(10) As Integer	' Matrice di tipo Integer.

Dim StrVarArray(10) As String	' Matrice a stringa variabile.

Dim StrFixArray(10) As String * 10	' Matrice a stringa fissa.

Dim VarArray(10) As Variant	' Matrice di tipo Variant.

Dim DynamicArray() As Integer	' Matrice dinamica.

ReDim DynamicArray(10)	' Assegna spazio di archiviazione.

Erase NumArray	' Ogni elemento impostato su 0.

Erase StrVarArray	' Ogni elemento impostato su ("").

Erase StrFixArray	' Ogni elemento impostato su 0.

Erase VarArray	' Ogni elemento impostato su Empty.

Erase DynamicArray	' Memoria libera utilizzata dalla matrice.


Esempio di istruzione Event

In questo esempio vengono utilizzati eventi per conteggiare i secondi durante una dimostrazione del miglior tempo per una gara dei 100 metri. Il codice illustra tutti i metodi, le proprietà e le istruzioni correlati agli eventi, compresa l'istruzione Event.

La classe che genera un evento è la rispettiva origine dell'evento e le classi che realizzano l'evento sono le routine di elaborazione degli eventi. A un'origine di eventi possono corrispondere più routine di elaborazione degli eventi generati. Quando la classe genera l'evento, quest'ultimo verrà attivato in ciascuna classe in cui sono presenti routine di elaborazione degli eventi per quell'istanza dell'oggetto.

Nell'esempio viene inoltre utilizzato un modulo (Form1) con un pulsante (Command1), un'etichetta (Label1) e due caselle di testo (Text1 e Text2). Quando si fa clic sul pulsante, nella prima casella di testo verrà visualizzato "Da ora in poi" e nella seconda inizierà il conteggio dei secondi. Una volta trascorso il tempo completo, ovvero 9,84 secondi, nella prima casella verrà visualizzato "Fino ad ora" e nella seconda "9,84".

Il codice per Form1 specifica lo stato iniziale e finale del modulo e contiene il codice che verrà eseguito al momento della generazione degli eventi.

Option Explicit

Private WithEvents mText As TimerState

Private Sub Command1_Click()

Text1.Text = "Da ora in poi"

    Text1.Refresh

    Text2.Text = "0"

    Text2.Refresh

Call mText.TimerTask(9.84)

End Sub

Private Sub Form_Load()

    Command1.Caption = "Fare clic per avviare il timer"

    Text1.Text = ""

    Text2.Text = ""

    Label1.Caption = "Il miglior tempo della gara sui 100 metri è stato:"

    Set mText = New TimerState

    End Sub

Private Sub mText_ChangeText()

    Text1.Text = "Fino ad ora"

    Text2.Text = "9,84"

End Sub

Private Sub mText_UpdateTime(ByVal dblJump As Double)

    Text2.Text = Str(Format(dblJump, "0"))

    DoEvents

End Sub

Il restante codice è contenuto nel modulo di classe StatoTimer. Le istruzioni Event dichiarano le routine inizializzate al momento della generazione degli eventi.

Option Explicit

Public Event UpdateTime(ByVal dblJump As Double)

Public Event ChangeText()

Public Sub TimerTask(ByVal Duration As Double)

    Dim dblStart As Double

    Dim dblSecond As Double

    Dim dblSoFar As Double

    dblStart = Timer

    dblSoFar = dblStart

    Do While Timer < dblStart + Duration

        If Timer - dblSoFar >= 1 Then

            dblSoFar = dblSoFar + 1

            RaiseEvent UpdateTime(Timer - dblStart)

        End If

    Loop

    RaiseEvent ChangeText

End Sub


Esempio di istruzione Function

In questo esempio l'istruzione Function viene utilizzata per dichiarare il nome, gli argomenti e il codice che costituiscono il corpo di una routine Function. Nell'ultimo esempio vengono utilizzati argomenti Optional inizializzati con tipo fisso.

' La seguente funzione definita dall'utente restituisce

' la radice quadrata dell'argomento passato.

Function CalculateSquareRoot(NumberArg As Double) As Double

If NumberArg < 0 Then	' Valuta l'argomento.

Exit Function	' Esce dalla routine e torna alla routine chiamante.

Else

CalculateSquareRoot = Sqr(NumberArg)	' Restituisce la radice quadrata.

End If

End Function

Utilizzando la parola chiave ParamArray, una funzione accetta un numero variabile di argomenti. Nella seguente definizione, FirstArg viene passato per valore.

Function CalcSum(ByVal FirstArg As Integer, ParamArray OtherArgs())

Dim ReturnValue

' Se la funzione viene richiamata come:

ReturnValue = CalcSum(4, 3 ,2 ,1)

' Le variabili locali assumono i seguenti valori: FirstArg = 4,

' OtherArgs(1) = 3, OtherArgs(2) = 2, e così via,

' partendo dal presupposto che il limite inferiore

' predefinito delle matrici sia uguale a 1.

Per gli argomenti Optional è possibile impostare valori predefiniti di tipi diversi da Variant.

' Se gli argomenti di una funzione vengono definiti

' come:

Function MyFunc(MyStr As String, Optional MyArg1 As _ Integer = 5, Optional MyArg2 = "Dolly")

Dim RetVal

' La funzione può essere richiamata in uno

' dei seguenti modi:

RetVal = MyFunc("Salve", 2, "Gente")	' Tutti e tre gli argomenti.

RetVal = MyFunc("Test", , 5)	' Secondo argomento omesso.

' Argomenti uno e tre utilizzando argomenti

' predefiniti.

RetVal = MyFunc(MyStr:="Salve ", MyArg1:=7)


Esempio di funzione GetObject

In questo esempio la funzione GetObject viene utilizzata per ottenere un riferimento a un foglio di lavoro specifico di Microsoft Excel (MyXL). La proprietà Application del foglio di lavoro viene utilizzata per rendere visibile Microsoft Excel, per chiuderlo e così via. Utilizzando due chiamate API, la routine Sub DetectExcel ricerca Microsoft Excel e se è già in esecuzione lo immette nella tabella Running Object. La prima chiamata a GetObject genera un errore se Microsoft Excel non è già in esecuzione. In questo esempio, l'errore comporta l'impostazione del flag ExcelWasNotRunning su True. La seconda chiamata a GetObject specifica un file da aprire. Se Microsoft Excel non è già in esecuzione, la seconda chiamata lo avvia e restituisce un riferimento al foglio di lavoro rappresentato dal file specificato, prova.xls. Tale file deve esistere nella posizione specificata. In caso contrario verrà generato un errore di automazione Visual Basic. Il codice di esempio imposta quindi come visibili sia Microsoft Excel che la finestra che contiene il foglio di lavoro specificato. Infine, se non era in esecuzione una versione precedente di Microsoft Excel, il codice utilizza il metodo Quit dell'oggetto Application per chiudere Microsoft Excel. Se l'applicazione era già in esecuzione, non si tenta di chiuderla. Il riferimento viene rilasciato impostando l'oggetto su Nothing.

' Dichiara le routine API necessarie:

Declare Function FindWindow Lib "user32" Alias _

"FindWindowA" (ByVal lpClassName as String, _

ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _

"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _

ByVal wParam as Long, _

ByVal lParam As Long) As Long

Sub GetExcel()

Dim MyXL As Object	' Variabile in cui viene

' memorizzato il riferimento a Microsoft Excel.

Dim ExcelWasNotRunning As Boolean	' Flag per il rilascio finale.

' Prova per verificare se vi è già una copia di

' Microsoft Excel in esecuzione.

On Error Resume Next	' Rimanda l'intercettazione degli errori.

' La funzione Getobject chiamata senza il primo

' argomento restituisce un riferimento a un'istanza

' dell'applicazione. Se l'applicazione non è in

' esecuzione viene generato un errore.

Set MyXL = Getobject(, "Excel.Application")

If Err.Number <> 0 Then ExcelWasNotRunning = True

Err.Clear	' Cancella l'oggetto Err in presenza di errori.

' Ricerca Microsoft Excel. Se Microsoft Excel è in

' esecuzione, lo inserisce nella tabella Running

' Object.

DetectExcel

' Imposta la variabile oggetto in modo che faccia

' riferimento al file che si desidera visualizzare.

Set MyXL = Getobject("c:\vb4\MYTEST.XLS")

' Visualizza Microsoft Excel tramite la proprietà

' Application, quindi visualizza la finestra effettiva

' che contiene il file utilizzando l'insieme Windows

' del riferimento all'oggetto MyXL.

MyXL.Application.Visible = True

MyXL.Parent.Windows(1).Visible = True

' Posizione per operazioni di modifica

' del file.

' ...

' Se questa copia di Microsoft Excel non era già in

' esecuzione dall'inizio, la chiude utilizzando il

' metodo Quit della proprietà Application.

' Si noti che quando si cerca di uscire da Microsoft

' Excel, la barra del titolo

' lampeggia e viene visualizzato un messaggio

' per richiedere se si desidera salvare i file

' caricati.

If ExcelWasNotRunning = True Then

MyXL.Application.Quit

End IF

Set MyXL = Nothing	' Rilascia il riferimento alla

' applicazione e al foglio di lavoro.

End Sub

Sub DetectExcel()

' La routine individua un'istanza di Excel in

' esecuzione e la registra.

Const WM_USER = 1024

Dim hWnd As Long

' Se Excel è in esecuzione questa chiamata API

' restituisce l'handle corrispondente.

hWnd = FindWindow("XLMAIN", 0)

If hWnd = 0 Then	' 0 significa che Excel non

' è in esecuzione.

Exit Sub

Else

' Poiché Excel è in esecuzione è necessario

' utilizzare la funzione API SendMessage per

' inserirlo nella tabella Running Object.

SendMessage hWnd, WM_USER + 18, 0, 0

End If

End Sub


Esempio di istruzione Implements

In questo esempio l'istruzione Implements viene utilizzata per rendere disponibile una serie di dichiarazioni a più classi. Condividendo le dichiarazioni tramite l'istruzione Implements, nessuna classe dovrà eseguire dichiarazioni separate.

Si presume che esistano due moduli. Il modulo Selezione include due pulsanti, ovvero Dati cliente e Dati fornitore. Per specificare le informazioni relative al nome e all'indirizzo di un cliente o di un fornitore, l'utente farà clic sul pulsante Cliente o Fornitore nel modulo Selezione e quindi indicherà il nome e l'indirizzo utilizzando il modulo Immissione dati. Quest'ultimo contiene due campi di testo, ovvero Nome e Indirizzo.

Il seguente codice per le dichiarazioni condivise è incluso nella classe DatiPersonali:

Public Name As String

Public Address As String

Il codice che supporta i dati relativi al cliente è incluso nel modulo di classe Cliente:

Implements PersonalData

Private Property Get PersonalData_Address() As String

PersonalData_Address = "IndirizzoCliente"

End Property

Private Property Let PersonalData_Address(ByVal RHS As String)

'

End Property

Private Property Let PersonalData_Name(ByVal RHS As String)

'

End Property

Private Property Get PersonalData_Name() As String

PersonalData_Name = "NomeCliente"

End Property

Il codice che supporta i dati relativi al fornitore è incluso nel modulo di classe Fornitore:

Implements PersonalData

Private Property Get PersonalData_Address() As String

PersonalData_Address = "IndirizzoFornitore"

End Property

Private Property Let PersonalData_Address(ByVal RHS As String)

'

End Property

Private Property Let PersonalData_Name(ByVal RHS As String)

'

End Property

Private Property Get PersonalData_Name() As String

PersonalData_Name = "NomeFornitore"

End Property

Il seguente codice supporta il modulo Selezione:

Private cust As New Customer

Private sup As New Supplier

Private Sub Command1_Click()

Dim frm2 As New Form2

    Set frm2.PD = cust

    frm2.Show 1

End Sub

Private Sub Command2_Click()

Dim frm2 As New Form2

    Set frm2.PD = sup

    frm2.Show 1

End Sub

Il seguente codice supporta il modulo ImmissioneDati:

Private m_pd As PersonalData

Private Sub Form_Load()

    With m_pd

        Text1 = .Name

        Text2 = .Address

    End With

End Sub

Public Property Set PD(Data As PersonalData)

    Set m_pd = Data

End Property


Esempio di funzione LBound

In questo esempio la funzione LBound viene utilizzata per determinare l'indice minore disponibile per la dimensione indicata di una matrice. L'istruzione Option Base consente di impostare un valore diverso per il valore di indice predefinito di inizio matrice impostato su 0.

Dim Lower

Dim MyArray(1 To 10, 5 To 15, 10 To 20) 	' Dichiara le variabili di matrice.

Dim AnyArray(10)

Lower = Lbound(MyArray, 1) ' Restituisce 1.

Lower = Lbound(MyArray, 3)	' Restituisce 10.

Lower = Lbound(AnyArray)	' Restituisce 0 o 1, in base

' all'impostazione di Option Base.


Esempio di istruzione Let

In questo esempio il valore di un'espressione viene assegnato alle variabili utilizzando l'istruzione esplicita Let.

Dim MyStr, MyInt

' Le seguenti variabili vengono assegnate con

' l'istruzione Let.

Let MyStr = "Salve"

Let MyInt = 5

Le stesse variabili vengono assegnate senza l'istruzione Let.

Dim MyStr, MyInt

MyStr = "Salve"

MyInt = 5


Esempio di istruzione Option Base

In questo esempio l'istruzione Option Base viene utilizzata per modificare il valore di indice predefinito di inizio matrice impostato su 0. La funzione LBound restituisce il valore di indice inferiore disponibile per la dimensione indicata di una matrice. L'istruzione Option Base viene utilizzata solo a livello di modulo.

Option base 1	' Imposta gli indici predefiniti di

' matrice su 1.

Dim Lower

Dim MyArray(20), TwoDArray(3, 4)	' Dichiara le variabili di matrice.

Dim ZeroArray(0 To 5)	' Ignora l'indice di inizio

' matrice.

' Utilizza LBound per verificare i limiti inferiori

' delle matrici.

Lower = LBound(MyArray)	' Restituisce 1.

Lower = LBound(TwoDArray, 2)	' Restituisce 1.

Lower = LBound(ZeroArray)	' Restituisce 0.


Esempio di istruzione Option Compare

In questo esempio l'istruzione Option Compare viene utilizzata per impostare la modalità predefinita di confronto delle stringhe. L'istruzione Option Compare viene utilizzata solo a livello di modulo.

' Imposta il metodo di confronto stringhe su Binary.

Option compare Binary 	' Esempio: "AAA" minore di "aaa".

' Imposta il metodo di confronto stringhe su Text.

Option compare Text	' Esempio: "AAA" uguale a "aaa".


Esempio di istruzione Option Explicit

In questo esempio l'istruzione Option Explicit viene utilizzata per forzare la dichiarazione esplicita di tutte le variabili. Se si cerca di utilizzare una variabile non dichiarata, in fase di compilazione verrà generato un errore. L'istruzione Option Explicit viene utilizzata solo a livello di modulo.

Option explicit	' Forza la dichiarazione esplicita

' delle variabili.

Dim MyVar	' Dichiara la variabile.

MyInt = 10	' La variabile non dichiarata genera un errore.

MyVar = 10	' Non vengono generati errori.


Esempio di istruzione Option Private

In questo esempio l'istruzione Option Private viene utilizzata a livello di modulo per indicare che l'intero modulo è privato. Utilizzando Option Private Module, i simboli a livello di modulo non dichiarati come Private sono ancora disponibili per gli altri moduli del progetto, ma non per gli altri progetti o per le altre applicazioni.

Option private Module	' Indica che il modulo è privato.


Esempio di istruzione Private

In questo esempio l'istruzione Private viene utilizzata a livello di modulo per dichiarare le variabili come Private, ovvero disponibili solo nel modulo in cui sono dichiarate.

Private Number As Integer	' Variabile intera Private.

Private NameArray(1 To 5) As String	' Matrice Private di variabili.

' Più dichiarazioni, due Variant e una Integer, tutte

' Private.

Private MyVar, YourVar, ThisVar As Integer


Esempio di istruzione Property Get

In questo esempio l'istruzione Property Get viene utilizzata per definire una routine che consente di ottenere il valore di una proprietà. La proprietà identifica, in forma di stringa, il colore corrente di una penna.

Dim CurrentColor As Integer

Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3

' Restituisce il colore corrente della penna in

' forma di stringa

Property Get PenColor() As String

Select Case CurrentColor

Case RED

PenColor = "Rosso"

Case GREEN

PenColor = "Verde"

Case BLUE

PenColor = "Blu"

End Select

End Property

' La riga di codice seguente consente di ottenere il

' colore della penna chiamando la routine Property Get.

ColorName = PenColor


Esempio di istruzione Property Let

In questo esempio l'istruzione Property Let viene utilizzata per definire una routine per l'assegnazione di un valore ad una proprietà che identifica il colore della penna in un'applicazione di disegno.

Dim CurrentColor As Integer

Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3

' Imposta la proprietà di colore della penna per

' un'applicazione di disegno.

' La variabile a livello di modulo CurrentColor viene

' impostata su un valore numerico che identifica il

' colore usato per disegnare.

Property Let PenColor(ColorName As String)

Select Case ColorName	' Controlla la stringa del nome del colore.

Case "Rosso"

CurrentColor = RED	' Assegna un valore per Rosso.

Case "Verde"

CurrentColor = GREEN' Assegna un valore per Verde.

Case "Blu"

CurrentColor = BLUE	' Assegna un valore per Blu.

Case Else

CurrentColor = BLACK' Assegna il valore predefinito.

End Select

End Property

' La riga di codice seguente consente di impostare

' la proprietà PenColor per un'applicazione

' di disegno chiamando la routine Property Let.

PenColor = "Rosso"


Esempio di istruzione Property Set

In questo esempio l'istruzione Property Set viene utilizzata per definire una routine per l'impostazione di un riferimento ad un oggetto.

' La proprietà Pen può essere impostata per

' diverse implementazioni.

Property Set Pen(P As Object)

Set CurrentPen = P	' Assegna Pen a un oggetto.

End Property


Esempio di istruzione Public

L'istruzione Public viene utilizzata a livello di modulo nella sezione Generale di un modulo standard per dichiarare in modo esplicito le variabili come pubbliche, ovvero disponibili per tutte le routine in tutti i moduli di tutte le applicazioni se non diversamente specificato con l'istruzione Option Private Module.

Public Number As Integer	' Variabile intera pubblica.

Public NameArray(1 To 5) As String	' Variabile matrice pubblica.

' Più dichiarazioni, due Variant e una Integer, tutte

' Public.

Public MyVar, YourVar, ThisVar As Integer


Esempio di istruzione ReDim

In questo esempio l'istruzione ReDim viene utilizzata per allocare e riallocare spazio di archiviazione per variabili di matrici dinamiche. Si presuppone che Option Base sia uguale a 1.

Dim MyArray() As Integer	' Dichiara una matrice dinamica.

Redim MyArray(5)	' Assegna 5 elementi.

For I = 1 To 5	' Ripete 5 volte.

MyArray(I) = I	' Inizializza la matrice.

Next I

L'istruzione seguente consente di ridimensionare la matrice e di eliminare gli elementi.

Redim MyArray(10)	' Ridimensiona fino a 10 elementi.

For I = 1 To 10	' Ripete 10 volte.

MyArray(I) = I	' Inizializza la matrice.

Next I

L'istruzione seguente consente di ridimensionare la matrice e di mantenere gli elementi.

Redim Preserve MyArray(15)	' Ridimensiona fino a 15 elementi.


Esempio di istruzione Rem

In questo esempio vengono illustrate le diverse modalità di utilizzo dell'istruzione Rem per includere commenti esplicativi in un programma.

Dim MyStr1, MyStr2

MyStr1 = "Salve": Rem Commento dopo un'istruzione separato da due punti.

MyStr2 = "Buongiorno" 	' Anche questo è un commento.

' I due punti non sono necessari.


Esempio di istruzione Set

In questo esempio l'istruzione Set viene utilizzata per assegnare riferimenti di oggetto alle variabili. Si presume che YourObject sia un oggetto valido con una proprietà Text.

Dim YourObject, MyObject, MyStr

Set MyObject = YourObject	' Assegna un riferimento di oggetto.

' MyObject e YourObject si riferiscono allo

' stesso oggetto.

YourObject.Text = "Salve"	' Inizializza la proprietà.

MyStr = MyObject.Text	' Restituisce "Salve".

' Interrompe l'associazione. MyObject non si riferisce

' più a YourObject.

Set MyObject = Nothing	' Rilascia l'oggetto.


Esempio di istruzione Static

In questo esempio l'istruzione Static viene utilizzata per mantenere il valore di una variabile fino a quando il codice del modulo è in esecuzione.

' Definizione di funzione.

Function KeepTotal(Number)

' Solo la variabile Accumulate mantiene il valore

' tra le chiamate.

Static Accumulate

Accumulate = Accumulate + Number

KeepTotal = Accumulate

End Function

' Definizione di funzione Static.

Static Function MyFunction(Arg1, Arg2, Arg3)

' Tutte le variabili locali mantengono il loro

' valore tra le chiamate della funzione.

Accumulate = Arg1 + Arg2 + Arg3

Half = Accumulate / 2

MyFunction = Half

End Function


Esempio di istruzione Sub

In questo esempio l'istruzione Sub viene utilizzata per dichiarare il nome, gli argomenti e il codice che costituiscono il corpo di una routine Sub.

' Definizione di routine Sub.

' Routine Sub con due argomenti.

Sub SubComputeArea(Length, TheWidth)

Dim Area As Double	' Dichiara una variabile locale.

If Length = 0 Or TheWidth = 0 Then

' Se uno degli argomenti è = 0.

Exit Sub	' Esce subito dalla routine.

End If

Area = Length * TheWidth	' Calcola l'area del rettangolo.

Debug.Print Area	' Scrive l'area nella finestra Debug.

End Sub


Esempio di istruzione Type

In questo esempio l'istruzione Type viene utilizzata per definire un tipo di dati definito dall'utente. L'istruzione Type viene utilizzata solo a livello di modulo. Se inclusa in un modulo di classe, deve essere preceduta dalla parola chiave Private.

Type EmployeeRecord	' Crea un tipo definito dall'utente.

ID As Integer	' Definisce gli elementi del tipo di dati.

Name As String * 20

Address As String * 30

Phone As Long

HireDate As Date

End Type

Sub CreateRecord()

Dim MyRecord As EmployeeRecord	' Dichiara la variabile.

' L'assegnazione della variabile EmployeeRecord

' deve essere eseguita in una routine.

MyRecord.ID = 12003	' Assegna un valore a un elemento.

End Sub


Esempio di funzione UBound

In questo esempio la funzione UBound viene utilizzata per restituire l'indice maggiore disponibile per la dimensione indicata di una matrice.

Dim Upper

Dim MyArray(1 To 10, 5 To 15, 10 To 20)	' Dichiara le variabili di matrice.

Dim AnyArray(10)

Upper = UBound(MyArray, 1)	' Restituisce 10.

Upper = UBound(MyArray, 3)	' Restituisce 20.

Upper = UBound(AnyArray)	' Restituisce 10.


Esempio di funzione CallByName

In questo esempio la funzione CallByName viene utilizzata per richiamare il metodo Move di un pulsante Command.

Viene inoltre utilizzato un form (Form1) con un pulsante (Command1) e un'etichetta (Label1). Quando il form viene caricato, la proprietà Caption dell'etichetta viene impostata su "Move", ovvero il nome del metodo da richiamare. Facendo clic sul pulsante, la funzione CallByName richiamerà il metodo per la modifica della posizione del pulsante.

Option Explicit

Private Sub Form_Load()

Label1.Caption = "Move"	' Nome del metodo Move.

End Sub

Private Sub Command1_Click()

If Command1.Left <> 0 Then

CallByName Command1, Label1.Caption, vbMethod, 0, 0

Else

CallByName Command1, Label1.Caption, vbMethod, 500, 500

End If


As

La parola chiave As viene utilizzata nei seguenti contesti:

Istruzione Const

Istruzione Declare

Istruzione Dim

Istruzione Function

Istruzione Name

Istruzione Open

Istruzione Private

Istruzione Property Get

Istruzione Property Let

Istruzione Property Set

Istruzione Public

Istruzione ReDim

Istruzione Static

Istruzione Sub

Istruzione Type


Binary

La parola chiave Binary viene utilizzata nei seguenti contesti:

Istruzione Open

Istruzione Option Compare


ByRef

La parola chiave ByRef viene utilizzata nei seguenti contesti:

Istruzione Call

Istruzione Declare

Istruzione Function

Istruzione Property Get

Istruzione Property Let

Istruzione Property Set

Istruzione Sub


ByVal

La parola chiave ByVal viene utilizzata nei seguenti contesti:

Istruzione Call

Istruzione Declare

Istruzione Function

Istruzione Property Get

Istruzione Property Let

Istruzione Property Set

Istruzione Sub


Date

La parola chiave Date viene utilizzata nei seguenti contesti:

Funzione Date

Istruzione Date

Tipo di dati Date


Else

La parola chiave Else viene utilizzata nei seguenti contesti:

Istruzione If...Then...Else

Istruzione Select Case


Error

La parola chiave Error viene utilizzata nei seguenti contesti:

Funzione Error

Istruzione Error

Istruzione On Error


For

La parola chiave For viene utilizzata nei seguenti contesti:

Istruzione For...Next

Istruzione For Each...Next

Istruzione Open


Get

La parola chiave Get viene utilizzata nei seguenti contesti:

Istruzione Get

Istruzione Property Get


Input

La parola chiave Input viene utilizzata nei seguenti contesti:

Funzione Input

Istruzione Input #

Istruzione Line Input #

Istruzione Open


Is

La parola chiave Is viene utilizzata nei seguenti contesti:

Istruzione If...Then...Else

Operatore Is

Istruzione Select Case


Len

La parola chiave Len viene utilizzata nei seguenti contesti:

Funzione Len

Istruzione Open


Let

La parola chiave Let viene utilizzata nei seguenti contesti:

Istruzione Let

Istruzione Property Let


Lock

La parola chiave Lock viene utilizzata nei seguenti contesti:

Istruzione Lock, Unlock

Istruzione Open


Mid

La parola chiave Mid viene utilizzata nei seguenti contesti:

Funzione Mid

Istruzione Mid


New

La parola chiave New viene utilizzata nei seguenti contesti:

Istruzione Dim

Istruzione Private

Istruzione Public

Istruzione Set

Istruzione Static


Next

La parola chiave Next viene utilizzata nei seguenti contesti:

Istruzione For...Next

Istruzione For Each...Next

Istruzione On Error

Istruzione Resume


On

La parola chiave On viene utilizzata nei seguenti contesti:

Istruzione On Error

Istruzione On...GoSub

Istruzione On...GoTo


Option

La parola chiave Option viene utilizzata nei seguenti contesti:

Istruzione Option Base

Istruzione Option Compare

Istruzione Option Explicit

Istruzione Option Private


Optional

La parola chiave Optional viene utilizzata nei seguenti contesti:

Istruzione Declare

Istruzione Function

Istruzione Property Get

Istruzione Property Let

Istruzione Property Set

Istruzione Sub


ParamArray

La parola chiave ParamArray viene utilizzata nei seguenti contesti:

Istruzione Declare

Istruzione Function

Istruzione Property Get

Istruzione Property Let

Istruzione Property Set

Istruzione Sub


Print

La parola chiave Print viene utilizzata nei seguenti contesti:

Istruzione Print #

Metodo Print


Private

La parola chiave Private viene utilizzata nei seguenti contesti:

Istruzione Const

Istruzione Declare

Istruzione Enum

Istruzione Function

Istruzione Option Private

Istruzione Private

Istruzione Property Get

Istruzione Property Let

Istruzione Property Set

Istruzione Sub

Istruzione Type


Property

La parola chiave Property viene utilizzata nei seguenti contesti:

Istruzione Property Get

Istruzione Property Let

Istruzione Property Set


Public

La parola chiave Public viene utilizzata nei seguenti contesti:

Istruzione Const

Istruzione Declare

Istruzione Enum

Istruzione Event

Istruzione Function

Istruzione Property Get

Istruzione Property Let

Istruzione Property Set

Istruzione Public

Istruzione Sub

Istruzione Type


Resume

La parola chiave Resume viene utilizzata nei seguenti contesti:

Istruzione On Error

Istruzione Resume


Seek

La parola chiave Seek viene utilizzata nei seguenti contesti:

Funzione Seek

Istruzione Seek


Set

La parola chiave Set viene utilizzata nei seguenti contesti:

Istruzione Set

Istruzione Property Set


Static

La parola chiave Static viene utilizzata nei seguenti contesti:

Istruzione Function

Istruzione Property Get

Istruzione Property Let

Istruzione Property Set

Istruzione Static

Istruzione Sub


Step

La parola chiave Step viene utilizzata nei seguenti contesti:

Istruzione For...Next

Istruzione For Each...Next


String

La parola chiave String viene utilizzata nei seguenti contesti:

Funzione String

Tipo di dati String


Then

La parola chiave Then viene utilizzata nei seguenti contesti:

Istruzione di compilazione #If...Then...#Else

Istruzione If...Then...Else


Time

La parola chiave Time viene utilizzata nei seguenti contesti:

Funzione Time

Istruzione Time


To

La parola chiave To viene utilizzata nei seguenti contesti:

Istruzione Dim

Istruzione For...Next

Istruzione Lock, Unlock

Istruzione Private

Istruzione Public

Istruzione ReDim

Istruzione Select Case

Istruzione Static

Istruzione Type


WithEvents

La parola chiave WithEvents viene utilizzata nei seguenti contesti:

Istruzione Dim

Istruzione Private

Istruzione Public


Convenzioni adottate nella documentazione

Nella documentazione di Visual Basic sono state adottate le convenzioni tipografiche di seguito descritte:

Convenzione	Descrizione
Sub, If, ChDir, Print, True, Debug	Le parole in grassetto con l'iniziale maiuscola indicano parole chiave specifiche del linguaggio.
Setup	Le parole che devono essere digitate dall'utente appaiono in grassetto.
oggetto, nomevar, listarg	Nella sintassi, le parole in corsivo rappresentano segnaposto per le informazioni che vengono fornite dall'utente.
pathname, filenumber	Nella sintassi, le parole minuscole in corsivo e grassetto rappresentano segnaposto di argomenti per i quali è possibile utilizzare sia la sintassi relativa alla posizione che la sintassi dell'argomento predefinito.
[elencoespressioni]	Nella sintassi, gli elementi racchiusi fra parentesi quadre sono facoltativi.
{While | Until}	Nella sintassi, le parentesi graffe e la barra verticale indicano una scelta obbligata fra due o più elementi. Uno di tali elementi dovrà quindi essere necessariamente scelto, a meno che tutti gli elementi non siano racchiusi anche fra parentesi quadre. Ad esempio: [{This | OrThat}]
ESC, INVIO	Le parole con tutte le lettere in maiuscoletto indicano tasti e sequenze di tasti.
ALT+F1, CTRL+R	Il segno più (+) fra nomi di tasto indica una combinazione di tasti. ALT+F1 ad esempio, significa tenere premuto il tasto ALT e premere contemporaneamente il tasto F1.
Convenzioni nel codice

Vengono utlizzate le seguenti convenzioni per la scrittura del codice:

Codice di esempio	Descrizione
MyString = "Salve!"	Questo tipo di carattere viene utilizzato per il codice, le variabili e il testo dei messaggi di errore.
' Questo è un commento.	I commenti al codice sono introdotti da un apostrofo (').
MyVar = "Questo è un " _ & "esempio di come" _ & " continuare il codice."	Uno spazio più un carattere di sottolineatura ( _) indicano la continuazione di una riga del codice.


Esempio di funzione Error

In questo esempio la funzione Error viene utilizzata per visualizzare messaggi di errore che corrispondono ai numeri di errore specificati.

Dim ErrorNumber

For ErrorNumber = 61 To 64	' Esegue un ciclo tra i valori 61/64.

Debug.Print Error(ErrorNumber)	' Visualizza l'errore nella finestra Immediata.

Next ErrorNumber


Esempio di istruzione Error

In questo esempio l'istruzione Error viene utilizzata per simulare l'errore numero 11.

On Error Resume Next	' Rimanda la gestione dell'errore.

Error 11	' Simula l'errore "Divisione per zero".


Esempio di istruzione On Error

In questo esempio viene utilizzata in primo luogo l'istruzione On Error GoTo per specificare la posizione di una routine di gestione degli errori all'interno di una routine. Nell'esempio, un tentativo di eliminazione di un file aperto genera l'errore 55. L'errore viene gestito nella routine di gestione degli errori e il controllo viene quindi restituito all'istruzione che ha generato l'errore. L'istruzione On Error GoTo 0 disattiva l'intercettazione degli errori. L'istruzione On Error Resume Next viene quindi utilizzata per rimandare l'intercettazione degli errori in modo che sia possibile conoscere in modo certo il contesto dell'errore generato dall'istruzione successiva. Si noti l'utilizzo di Err.Clear per cancellare le proprietà dell'oggetto Err dopo la gestione dell'errore.

Sub OnErrorStatementDemo()

On Error GoTo ErrorHandler	' Attiva la routine di gestione degli errori.

Open "FILEPROV" For Output As #1	' Apre il file per l'output.

Kill "FILEPROV"	' Tenta l'eliminazione del file

' aperto.

On Error Goto 0	' Disattiva l'intercettazione degli errori.

On Error Resume Next	' Rimanda l'intercettazione degli errori.

ObjectRef = GetObject("MyWord.Basic")	' Tenta di attivare

' un oggetto inesistente.

'Verifica la presenza di un errore di automazione.

If Err.Number = 440 Or Err.Number = 432 Then

' Comunica all'utente ciò che si è verificato,

' quindi cancella l'oggetto Err.

Msg = "Errore di apertura dell'oggetto di automazione."

MsgBox Msg, , "Verifica degli errori rimandata"

Err.Clear	' Cancella i campi dell'oggetto.

End If

Exit Sub	' Esce per evitare il gestore errori.

ErrorHandler:	' Routine di gestione degli errori.

Select Case Err.Number	' Valuta il numero di errore.

Case 55	' Errore "File già aperto".

Close #1	' Chiude il file aperto.

Case Else

' Gestisce altre situazioni...

End Select

Resume	' Riprende l'esecuzione alla stessa

' riga che ha generato l'errore.

End Sub


Esempio di istruzione Resume

In questo esempio l'istruzione Resume viene utilizzata per terminare la gestione degli errori in una routine e riprendere l'esecuzione con l'istruzione che ha generato l'errore. L'errore 55 viene generato per illustrare l'utilizzo dell'istruzione Resume.

Sub ResumeStatementDemo()

On Error GoTo ErrorHandler	' Attiva la routine di gestione degli errori.

Open "FILEPROV" For Output As #1	' Apre il file per l'output.

Kill "FILEPROV"	' Tenta di eliminare il file aperto.

Exit Sub	' Esce dalla routine prima del gestore errori.

ErrorHandler:	' Routine di gestione degli errori.

Select Case Err.Number	' Valuta il numero errore.

Case 55	' Errore "File già aperto".

Close #1	' Chiude il file aperto.

Case Else

' Gestisce altre situazioni....

End Select

Resume	' Riprende l'esecuzione dalla stessa

' riga che ha generato l'errore.

End Sub


Funzione Error

Restituisce il messaggio di errore corrispondente a un numero di errore specificato.

Sintassi

Error[(numeroerrore)]

L'argomento facoltativo numeroerrore può essere qualsiasi numero di errore valido. Se numeroerrore è un numero di errore valido, ma non è definito, Error restituirà la stringa "Errore definito dall'applicazione o dall'oggetto". Se numeroerrore non è valido, verrà generato un errore. Se numeroerrore viene omsso, verrà restituito il messaggio corrispondente all'ultimo errore di run-time. Se non si è verificato alcun errore di run-time oppure se numeroerrore è 0, Error restituirà una stringa di lunghezza zero ("").

Osservazioni

Esaminare le impostazioni delle proprietà dell'oggetto Err per identificare l'ultimo errore di run-time. Il valore restituito dalla funzione Error corrisponde alla proprietà Description dell'oggetto Err.


Istruzione Error

Simula un errore.

Sintassi

Error numeroerrore

L'argomento obbligatorio numeroerrore può essere un qualsiasi numero di errore valido.

Osservazioni

L'istruzione Error è supportata per compatibilità con le versioni precedenti. Nelle nuove applicazioni e in particolare quando si creano oggetti, è consigliabile applicare il metodo Raise all'oggetto Err per generare errori di run-time.

Se numeroerrore è definito, l'istruzione Error richiama la routine di gestione degli errori dopo aver attribuito alle proprietà dell'oggetto Err i valori predefiniti, come illustrato nella tabella che segue:

Proprietà	Valore
Number	Valore specificato come argomento per l'istruzione Error. Può essere un qualsiasi numero di errore valido.
Source	Nome del progetto corrente di Visual Basic.
Description	Espressione stringa che corrisponde alla stringa restituita dalla funzione Error per il valore di Number specificato se la stringa esiste. Se la stringa non esiste, Description conterrà una stringa di lunghezza zero ("").
HelpFile	Unità, percorso completo e nome del file della Guida in linea di Visual Basic.
HelpContext	ID di contesto del file della Guida di Visual Basic relativo all'errore corrispondente al valore della proprietà Number.
LastDLLError	Zero.
Se non esiste o non è attivata alcuna routine di gestione degli errori, le proprietà dell'oggetto Err visualizzeranno un messaggio di errore.

Nota   Non tutte le applicazioni host di Visual Basic consentono di creare oggetti. Consultare la documentazione dell'applicazione host per verificare se l'host consente di creare classi e oggetti.


Istruzione On Error

Attiva una routine di gestione degli errori e ne specifica la posizione all'interno di un'altra routine. Può essere utilizzata per disattivare una routine di gestione degli errori.

Sintassi

On Error GoTo riga

On Error Resume Next

On Error GoTo 0

La sintassi dell'istruzione On Error può avere una qualsiasi delle seguenti forme:

Istruzione	Descrizione
On Error GoTo riga	Attiva la routine di gestione degli errori che inizia da riga, specificata nell'argomento obbligatorio riga. L'argomento riga può essere una qualsiasi etichetta di riga o un numero di riga. Pertanto, quando viene generato un errore di run-time il controllo viene trasferito a riga, attivando la routine di gestione degli errori. La riga specificata deve trovarsi nella stessa routine in cui si trova l'istruzione On Error; in caso contrario verrà generato un errore di compilazione.
On Error Resume Next	Specifica che quando viene generato un errore di run-time il controllo viene trasferito all'istruzione immediatamente successiva a quella nella quale è stato generato l'errore, ovvero l'esecuzione continua. Si consiglia di utilizzare questa struttura anziché On Error GoTo per l'accesso agli oggetti.
On Error GoTo 0	Disattiva qualsiasi gestore degli errori nella routine corrente.
Osservazioni

Se non si utilizza un'istruzione On Error, qualsiasi errore di run-time è irreversibile, in quanto causa la visualizzazione di un messaggio di errore e quindi l'interruzione dell'esecuzione.

Un gestore degli errori viene "abilitato" quando viene attivato da un'istruzione On Error ed è "attivo" durante la fase di gestione dell'errore. Se viene generato un errore mentre un gestore di errori è attivo, ovvero tra il verificarsi dell'errore e l'esecuzione di un'istruzione Resume, Exit Sub, Exit Function o Exit Property, il gestore di errori della routine corrente non potrà gestire l'errore e il controllo tornerà alla routine chiamante. Se in tale routine è disponibile un gestore di errori abilitato, tale gestore verrà attivato per la gestione dell'errore. Se anche il gestore di errori della routine chiamante è attivo, il controllo tornerà alle routine chiamanti precedenti, fino a individuare un gestore di errori abilitato ma non attivo. Se non viene individuato alcun gestore di errori abilitato e non attivo, l'errore risulterà irreversibile nel punto in cui è stato generato. Ogni volta che il gestore di errori passa nuovamente il controllo alla routine chiamante, tale routine diventa la routine corrente. Dopo la gestione di un errore in una qualsiasi routine, l'esecuzione riprende nella routine corrente nel punto indicato dall'istruzione Resume.

Nota   Una routine di gestione degli errori non è una routine Sub o Function, bensì una parte di codice contrassegnata da un'etichetta o un numero di riga.

Per determinare la causa di un errore, le routine di gestione degli errori si basano sul valore della proprietà Number dell'oggetto Err. Una routine di gestione degli errori dovrebbe verificare o salvare i valori rilevanti delle proprietà dell'oggetto Err prima che venga generato un altro errore o prima che venga richiamata una routine che potrebbe generare un errore. I valori delle proprietà dell'oggetto Err si riferiscono esclusivamente all'ultimo errore. Il messaggio di errore associato a Err.Number è contenuto in Err.Description.

On Error Resume Next determina la continuazione dell'esecuzione con l'istruzione immediatamente successiva a quella che ha generato l'errore di run-time oppure con l'istruzione immediatamente successiva all'ultima chamata della routine contenente l'istruzione On Error Resume Next. Ciò consente di continuare l'esecuzione nonostante l'errore di run-time. Sarà quindi possibile creare la routine di gestione degli errori all'interno della routine, anziché trasferire il controllo in un altro punto della routine. Un'istruzione On Error Resume Next diventa inattiva quando viene richiamata un'altra routine, pertanto è necessario eseguire un'istruzione On Error Resume Next in ciascuna routine chiamata se si desidera che la gestione degli errori venga eseguita in ogni routine.

Nota   Per gli errori generati durante l'accesso ad altri oggetti, è preferibile utilizzare la struttura On Error Resume Next anziché la struttura On Error GoTo. Il controllo di Err dopo ciascuna interazione con un oggetto consente di determinare con certezza a quale oggetto stava avendo accesso il codice al momento dell'errore. In tal modo è possibile individuare l'oggetto che ha inserito il codice di errore in Err.Number e che ha generato inizialmente l'errore (l'oggetto specificato in Err.Source).

On Error GoTo 0 disattiva la gestione degli errori nella routine corrente e non specifica la riga 0 come inizio del codice di gestione degli errori, anche se la routine contiene una riga 0. In assenza di un'istruzione On Error GoTo 0, il gestore di errori viene disattivato automaticamente all'uscita da una routine.

Per evitare che il codice di gestione degli errori venga eseguito anche se non è stato generato alcun errore, inserire un'istruzione Exit Sub, Exit Function o Exit Property , a seconda dei casi, immediatamente prima della routine di gestione degli errori, come illustrato nell'esempio che segue:

Sub InitializeMatrix(Var1, Var2, Var3, Var4)

On Error GoTo ErrorHandler

. . .

Exit Sub

ErrorHandler:

. . .

Resume Next

End Sub

In questo esempio il codice di gestione degli errori segue l'istruzione Exit Sub e precede l'istruzione End Sub e viene quindi separato dal flusso di routine normale. Questa soluzione è soltanto una tra quelle possibili; il codice di gestione degli errori può essere posizionato in qualsiasi punto di una routine.

Gli errori non intercettati negli oggetti vengono restituiti all'applicazione di controllo quando l'oggetto viene eseguito come file eseguibile. Nell'ambiente di sviluppo, tali errori vengono restituiti all'applicazione di controllo soltanto se sono impostate le opzioni adeguate. Consultare la documentazione dell'applicazione host per determinare quali opzioni dovrebbero essere impostate durante il debug, per informazioni sulla loro impostazione e per verificare se l'host consente di creare classi.

Quando crea un oggetto che ha accesso ad altri oggetti, è consigliabile tentare di gestire gli errori non gestiti restituiti dagli altri oggetti. Se non è possibile gestire tali errori, l'oggetto dovrà restituirli alla routine che ha chiamato l'oggetto, ma solo dopo aver abbinato il codice di errore contenuto in Err.Number a un errore definito. Per definire un errore, aggiungere il codice di errore alla costante vbObjectError. Se si desidera, ad esempio, assegnare il codice 1052 a un errore, utilizzare il codice seguente:

Err.Number = vbObjectError + 1052

Nota   Gli errori di sistema che si verificano durante chiamate a librerie a collegamento dinamico (DLL) Windows o alle risorse codice Macintosh non sollevano eccezioni e non possono essere intercettati con i sistemi di intercettazione degli errori di Visual Basic. Quando si chiamano funzioni di DLL, è necessario controllare tutti i risultati per verificare se le chiamate hanno avuto esito positivo o negativo (in base alle specifiche API) e in caso di esito negativo sarà necessario controllare il valore della proprietà LastDLLError dell'oggetto Err. La proprietà LastDLLError restituisce sempre zero in Macintosh.


Istruzione Resume

Riprende l'esecuzione dopo il completamento di una routine di gestione degli errori.

Sintassi

Resume [0]

Resume Next

Resume riga

La sintassi dell'istruzione Resume può avere una delle seguenti forme:

Istruzione	Descrizione
Resume	Se l'errore è stato generato nella stessa routine in cui si trova il gestore di errori, l'esecuzione riprende dall'istruzione che ha generato l'errore. Se l'errore è stato generato in una routine chiamata, l'esecuzione riprende dall'ultima istruzione che ha richiamato la routine contenente la routine di gestione degli errori.
Resume Next	Se l'errore è stato generato nella stessa routine in cui si trova il gestore di errori, l'esecuzione riprende dall'istruzione immediatamente successiva a quella che ha generato l'errore. Se l'errore è stato generato in una routine chiamata, l'esecuzione riprende dall'istruzione immediatamente successiva all'ultima che ha richiamato la routine contenente la routine di gestione degli errori oppure l'istruzione On Error Resume Next.
Resume riga	L'esecuzione riprende in corrispondenza di riga, specificata nell'argomento obbligatorio riga. L'argomento riga può essere un'etichetta di riga o un numero di riga e deve essere incluso nella routine in cui si trova il gestore di errori.
Osservazioni

Se l'istruzione Resume viene utilizzata al di fuori di una routine di gestione degli errori, verrà generato un errore.


Una proposizione #Else deve essere preceduta da #If

#Else è un'istruzione di compilazione condizionale. Causa e soluzione dell'errore:

•	È stata utilizzata una proposizione #Else non preceduta da un'istruzione #If o #ElseIf corrispondente.

Controllare se l'istruzione #If precedente è stata separata da questa istruzione #Else con un'istruzione #End If. Si noti che in ogni blocco #If è possibile inserire una sola istruzione #Else e due proposizioni #Else consecutive generano questo errore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Un'istruzione #ElseIf, #Else o #End If deve essere preceduta da una proposizione #If

#Else If, #Else e #End If sono istruzioni di compilazione condizionale. Causa e soluzione dell'errore:

•	Esiste un'istruzione #Else If, #Else o #End If che non è preceduta da una proposizione #If corrispondente.

Controllare per verificare se l'istruzione #If in questione è stata separata da un blocco intermedio oppure se l'istruzione #If è preceduta da un simbolo di numero (#). Se tutti gli elementi sono corretti, inserire una proposizione #If nella posizione corretta.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


#ElseIf deve essere preceduta da #If o #ElseIf e seguita da #ElseIf, #Else o #End If

#ElseIf è un'istruzione di compilazione condizionale. Cause e soluzioni dell'errore:

•	È stata utilizzata una proposizione #ElseIf non preceduta da un'istruzione #If o #ElseIf.

Inserire un'istruzione #If prima di #ElseIf oppure rimuovere l'istruzione precedente #End If che si trova in una posizione non corretta.

•	È stata utilizzata una proposizione #ElseIf preceduta da un'istruzione #Else o #End If.

Concludere in modo corretto il blocco #If precedente o cambiare l'istruzione #Else precedente in #ElseIf.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Un componente ActiveX compatibile deve essere un file eseguibile di Visual Basic o una DLL

Un componente ActiveX è compatibile quando viene specificato come componente ActiveX compatibile. Causa e soluzione dell'errore:

•	Si è cercato di accedere ad un oggetto specificato come componente ActiveX compatibile, ma il file indicato non è un file eseguibile o una libreria a collegamento dinamico (DLL) creati in Visual Basic.

Nel campo Componente ActiveX compatibile della finestra di dialogo Proprietà del progetto, a cui si accede dal menu Progetto, è possibile specificare solo file exe e DLL creati in Visual Basic. Se possibile, caricare il progetto in Visual Basic e scegliere Crea file .exe dal menu File per creare un file eseguibile Visual Basic. Se il file è un file eseguibile creato in un'applicazione diversa da Visual Basic oppure non può essere caricato in Visual Basic, controllare nella relativa documentazione se è possibile convertirlo in un file eseguibile Visual Basic oppure se è possibile ottenere un file eseguibile creato in Visual Basic.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


L'aggiunta non può fare riferimento a un progetto

I progetti sono dinamici, ma le aggiunte sono statiche. Causa e soluzione dell'errore:

•	Si è cercato di creare un'aggiunta da un progetto che fa riferimento a un altro progetto.

La semantica dei progetti può essere modifica in modi che influenzano i riferimenti di progetti e delle aggiunte. Non è quindi possibile creare un'aggiunta da un progetto che fa riferimento a altri progetti.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Il modulo non è un tipo valido

Un modulo standard non rappresenta una classe e non è possibile crearne nuove istanze nel form di una variabile. Causa e soluzione dell'errore:

•	In una dichiarazione Dim o Set è stato utilizzato il nome di un modulo standard.

Controllare che il nome del modulo specificato corrisponda al nome di un form, di un form MDI o di un modulo di classe.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile richiamare con argomenti predefiniti una routine definita con un argomento ParamArray

Gli argomenti in una chiamata a una routine definita con ParamArray devono essere specificati nell'ordine prestabilito. Causa e soluzione dell'errore:

•	Una chiamata di routine include una sintassi con argomenti predefiniti.

La sintassi con argomenti predefiniti non può essere utilizzata per chiamare una routine che include un parametro ParamArray. Per indicare solo alcuni argomenti per ParamArray, utilizzare virgole come segnaposto degli argomenti omessi. Nella chiamata di seguito indicata, ad esempio, gli argomenti ParamArray iniziano dopo Arg2, e i valori vengono passati solo per il primo, terzo e sesto valore di ParamArray:

MySub Arg1, Arg2, 7,, 44,,,3

Nota   ParamArray rappresenta sempre gli ultimi elementi dell'elenco degli argomenti.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Rilevato nome non univoco

L'identificatore è in conflitto con un altro identificatore o richiede una qualificazione. Cause e soluzioni dell'errore:

•	Più oggetti della stessa area di validità hanno elementi con lo stesso nome.

Qualificare il nome dell'elemento includendo il nome dell'oggetto e un punto. Ad esempio:

oggetto.proprietà

Gli identificatori a livello di modulo e a livello di progetto (nomi di modulo e nomi di progetto con riferimento) possono essere riutilizzati all'interno di una routine, nonostante questo renda più difficoltosi la manutenzione e il debug dei programmi. Tuttavia, se si desidera fare riferimento ad entrambi gli elementi della stessa routine è necessario qualificare l'elemento con l'area di validità più ampia. Se, ad esempio, viene dichiarato MyID a livello di modulo MyModule e quindi viene dichiarata nel modulo una variabile a livello di routine con lo stesso nome, i riferimenti alla variabile a livello di modulo dovranno essere adeguatamente qualificati:

Dim MyID As String

Sub MySub

MyModule.MyID = "Questa è la variabile a livello di modulo"

Dim MyID As String

MyID = "Questa è la variabile a livello di routine"

Debug.Print MyID

Debug.Print MyModule.MyID

End Sub

•	Un identificatore dichiarato a livello di modulo crea conflitto con un nome di routine. Questo errore si verifica, ad esempio, se la variabile MyID viene dichiarata a livello di modulo e quindi viene definita una routine con lo stesso nome:

Public MyID

Sub MyID

. . .

End Sub

In questo caso sarà necessario modificare uno dei nomi, poiché la sostituzione con un nome di modulo comune non eliminerebbe l'ambiguità. Si noti che i nomi di routine sono di tipo Public per impostazione predefinita e che i nomi di variabile sono di tipo Private se non diversamente specificato con Public.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Errore AppleScript

È stato generato un errore durante l'elaborazione dello script. Cause e soluzioni dell'errore:

•	L'errore può essere collegato all'applicazione di destinazione.

Verificare che gli identificatori dello script corrispondano a quelli dell'applicazione.

•	L'errore può essere collegato a AppleScript.

Verificare di avere utilizzato nello script una sintassi AppleScript valida.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Errore definito dall'applicazione o dall'oggetto

Questo messaggio viene visualizzato quando il metodo Raise o l'istruzione Error generano un errore che non corrisponde ad un errore definito da Visual Basic, Applications Edition. Questo errore viene inoltre restituito dalla funzione Error in caso di argomenti che non corrispondono ad errori definiti da Visual Basic, Applications Edition. È quindi possibile che sia un errore definito dall'utente oppure un errore definito da un oggetto (comprese applicazioni host come Microsoft Excel, Visual Basic, e così via). I form di Visual Basic, ad esempio, generano molti errori correlati ai form che non possono essere generati dal codice specificando semplicemente un numero come argomento del metodo Raise o dell'istruzione Error. Cause e soluzioni dell'errore:

•	L'applicazione ha eseguito un'istruzione Err.Raise n o Error n ma il numero n non è definito da Visual Basic, Applications Edition.

Se questa era l'intenzione originale, è necessario utilizzare Err.Raise e specificare argomenti aggiuntivi se si desidera che l'utente finale possa comprendere la natura dell'errore. È possibile, ad esempio, includere una stringa descrittiva, informazioni sull'origine o informazioni di Guida. Se l'intenzione era quella di rigenerare un errore intercettato, questo metodo funzionerà correttamente se non si esegue Err.Clear prima di rigenerare l'errore. Se si esegue innanzitutto Err.Clear, è necessario fornire gli argomenti aggiuntivi per il metodo Raise. Controllare il contesto in cui si è verificato l'errore e verificare che l'errore rigenerato sia lo stesso.

•	È possibile che durante un tentativo di accesso ad oggetti di altre applicazioni sia stato trasferito un errore nell'applicazione che non è stato possibile abbinare ad un errore di Visual Basic riconosciuto.

Controllare la documentazione degli oggetti a cui si è cercato di accedere. La proprietà Source dell'oggetto Err dovrebbe includere l'ID programmatico dell'applicazione o dell'oggetto che ha generato l'errore. Per individuare in modo più preciso il contesto di un errore restituito da un oggetto, è possibile utilizzare il costrutto On Error Resume Next nel codice per l'accesso agli oggetti, anziché la sintassi On Error GoTo riga.

Nota   In passato, una pratica comune di programmazione prevedeva l'utilizzo di un ciclo per la stampa di un elenco dei messaggi di errori intercettabili. Il codice utilizzato a questo scopo era simile al seguente:

For index = 1 to 500

Debug.Print Error$(index)

Next index

Questo codice consente ancora di creare un elenco di tutti i messaggi di errore di Visual Basic, Applications Edition, ma visualizza il messaggio "Errore definito dall'applicazione o dall'oggetto" in caso di errori definiti dall'host, quali ad esempio errori di Visual Basic correlati a form, controlli e così via. Molti di essi sono errori di run-time intercettabili. È possibile utilizzare la scheda Indice della Guida per individuare l'elenco degli errori intercettabili specifici dell'applicazione host. Nella scheda scorrere l'elenco fino a trovare la parola Errori intercettabili e fare clic sul pulsante Visualizza.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Argomento necessario per Property Let o Property Set

Lo scopo delle routine Property Let e Property Set è quello di assegnare un nuovo valore ad una proprietà. Cause e soluzioni dell'errore:

•	Nell'impostazione della proprietà, il valore non è indicato nella posizione corretta.

Specificare il valore di impostazione della proprietà a destra dell'espressione che imposta il valore della proprietà.

•	Nella definizione della routine, il parametro definito per la lettura del valore passato a destra dell'espressione è mancante o posizionato in modo non corretto.

Specificare un parametro per l'elenco argomenti dei valori per la definizione della routine. Se la routine richiede più argomenti, il parametro valore della proprietà deve trovarsi in ultima posizione nell'elenco.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Matrice già dimensionata

Una matrice statica può essere ridimensionata una sola volta. Cause e soluzioni dell'errore:

•	Si è cercato di modificare le dimensioni di una matrice statica con un'istruzione ReDim. È possibile ridimensionare solo le matrici dinamiche.

Annullare il ridimensionamento oppure utilizzare una matrice dinamica. Per definire una matrice dinamica, utilizzare un'istruzione Dim, Public, Private o Static con parentesi vuote, ad esempio:

Dim MyArray()

In una routine è possibile definire una matrice dinamica con l'istruzione ReDim o Static utilizzando una variabile per il numero di elementi:

ReDim MyArray(n)

•	Un'istruzione Option Base viene eseguita dopo che le dimensioni della matrice sono state impostate.

Verificare che l'eventuale istruzione Option Base preceda tutte le dichiarazioni di matrice.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


L'argomento della matrice deve essere ByRef

Le matrici dichiarate con Dim, ReDim o Static non possono essere passate ByVal. Causa e soluzione dell'errore:

•	Si è tentato di passare un'intera matrice ByVal.

I singoli elementi di una matrice possono essere passati ByVal (per valore), ma un'intera matrice deve essere passata ByRef (per riferimento). Si noti che ByRef è l'impostazione predefinita. Se una matrice deve essere passata ByVal, per evitare che le modifiche agli elementi della matrice vengano ritrasferite sul chiamante, sarà possibile passare l'argomento della matrice nel relativo set di parentesi oppure assegnarlo ad una variabile Variant e quindi passare la variabile Variant al parametro ByVal nel modo seguente:

Dim MyVar As Variant

MyVar = OldArray()

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Raggiunto inizio dell'area di ricerca. Continuare dalla fine?

La ricerca non ha avuto esito positivo. Causa e soluzione della condizione:

•	La ricerca verso l'alto ha raggiunto l'inizio dell'area specificata.

È possibile scegliere di continuare la ricerca dalla fine dell'area di ricerca oppure annullare l'operazione e modificare l'area di ricerca.


Blocco If senza End If

È stato generato un errore dovuto ad un'istruzione incompleta. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione If senza la corrispondente istruzione End If.

Un'istruzione If a più righe deve terminare con un'istruzione End If corrispondente. Per le istruzioni If...End If nidificate, verificare che all'interno della struttura If...End If più esterna vi sia una struttura If...End If abbinata correttamente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Punto di interruzione non ammesso in questa riga

I punti di interruzione possono essere impostati solo in parti specifiche delle istruzioni. Cause dell'errore:

•	Si è cercato di impostare un punto di interruzione in una riga che non accetta punti di interruzione, quale ad esempio:

•	Una riga di soli commenti.

•	Una riga di sole etichette di riga.

•	Una riga di sole dichiarazioni (Const, Dim, Static, Type e così via).

•	Una riga in un modulo nascosto.

•	Una riga nella finestra Immediata.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Tipo non corrispondente per l'argomento ByRef

Un argomento passato per riferimento (ByRef, impostazione predefinita) deve essere del tipo di dati previsto nella routine. Causa e soluzione dell'errore:

•	È stato passato un argomento di un tipo che non può essere forzato sul tipo previsto.

Questo errore viene generato, ad esempio, se si cerca di passare una variabile di tipo Integer quando ne è prevista una di tipo Long. Se si desidera che venga eseguita comunque la trasformazione forzata, anche se questo provoca la perdita di informazioni, è possibile passare l'argomento fra le relative parentesi. Per passare, ad esempio, l'argomento Variant MyVar ad una routine che prevede un argomento di tipo Integer, è possibile scrivere la chiamata nel modo di seguito descritto:

Dim MyVar

MyVar = 3.1415

Call SomeSub((MyVar))

Sub SomeSub (MyNum As Integer)

MyNum = MyNum + MyNum

End Sub

L'indicazione dell'argomento fra le relative parentesi forza la sua valutazione come espressione. Nel corso di questa valutazione la parte frazionaria del numero viene arrotondata (non troncata) per renderlo conforme al tipo di argomento previsto. Il risultato della valutazione viene inserito in una posizione temporanea e la routine riceve un riferimento a tale posizione. In questo modo il valore dell'argomento originale MyVar rimane invariato.

Nota   Se non si specifica il tipo di una variabile, alla variabile viene assegnato il tipo predefinito, ovvero Variant. Non si tratta sempre di un'assegnazione ovvia. Il codice seguente, ad esempio, dichiara due variabili, la prima, MyVar, è di tipo Variant; la seconda, AnotherVar, è di tipo Integer.

Dim MyVar, AnotherVar As Integer

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Convenzione di chiamata non supportata in Visual Basic

Visual Basic non supporta tutte le convenzioni di chiamata delle routine, che specificano l'ordine in cui gli argomenti devono essere passati e il modo in cui deve essere specificato ciascun tipo di argomento. Causa e soluzione dell'errore:

•	La routine è stata richiamata utilizzando una convenzione non supportata da Visual Basic. Visual Basic, ad esempio, non supporta la convenzione di chiamata Pascal in ambiente Microsoft Windows a 16 bit.

Se la convenzione di chiamata non è supportata, non è possibile richiamare la routine da Visual Basic. Controllare nella documentazione dell'oggetto se esiste un metodo alternativo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile aggiungere un riferimento al file specificato

In Visual Basic non è possibile accedere ad alcune librerie degli oggetti o librerie dei tipi. Causa e soluzione dell'errore:

•	Nella finestra di dialogo Riferimenti è stato aggiunto il riferimento ad una libreria dei tipi o degli oggetti che non è possibile utilizzare in Visual Basic.

Consultare la documentazione dell'oggetto rappresentato dalla libreria per verificare se è disponibile anche in una forma che è possibile utilizzare in Visual Basic.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile assegnare una matrice di stringhe di lunghezza fissa o di tipo definito dall'utente a Variant

Una variabile Variant accetta solo l'assegnazione di dati con una funzione VarType valida. Cause e soluzioni dell'errore:

•	Si è cercato di assegnare una matrice di stringhe di lunghezza fissa ad una variabile Variant. Quando una singola stringa di lunghezza fissa viene assegnata ad una variabile Variant, la stringa viene forzata su una stringa di lunghezza variabile. Questa operazione non è possibile per una matrice di stringhe di lunghezza fissa.

Se la matrice deve essere inserita in una variabile Variant, utilizzare un ciclo per assegnare i singoli elementi della matrice agli elementi di una matrice temporanea di stringhe di lunghezza variabile. Sarà quindi possibile assegnare la matrice alla variabile Variant e utilizzare Erase per rilasciare la matrice temporanea. Si noti che non è comunque possibile rilasciare una matrice a dimensioni fisse tramite Erase.

•	Si è cercato di passare una stringa di lunghezza fissa o di tipo definito dall'utente alla funzione VarType o TypeName.

Un argomento per la funzione VarType o TypeName deve essere un tipo Variant valido.

•	Si è cercato di assegnare una variabile di tipo definito dall'utente ad una variabile Variant.

Sebbene non sia possibile assegnare direttamente un'intera variabile di tipo definito dall'utente ad una variabile Variant, la funzione Array consente di assegnarne i singoli elementi. Il risultato è una variabile Variant contenente una matrice di variabili Variant. Il valore VarType di ciascun elemento di questa matrice di variabili Variant corrisponderà al tipo originale di ciascun elemento del tipo definito dall'utente.

•	Si è cercato di passare una matrice di stringhe di lunghezza fissa o di tipi definiti dall'utente come argomento in una chiamata di routine che richiede un argomento Variant. Si noti che quando una routine include chiamate che devono essere costruite in fase di esecuzione (creazione di istanze posticipata), tutti gli argomenti devono essere passati come tipi Variant. Il codice seguente, ad esempio, genera questo errore:

Dim MyForm As Object	' Poiché MyForm è definito

' come Object, la creazione

' dell'istanza è posticipata.

Set MyForm = New Form1

Dim StringArray(10) As String * 12

' La riga seguente genera l'errore.

MyForm.MyProc StringArray

Per una matrice di stringhe, utilizzare un ciclo per assegnare ogni singolo elemento della matrice ad una matrice temporanea di stringhe di lunghezza variabile. Sarà quindi possibile assegnare tale matrice ad una Variant per passarla alla routine. Per una matrice di tipi definiti dall'utente, è possibile utilizzare la funzione Array per assegnare ad una Variant i singoli elementi di una variabile di tipo definito dall'utente. Si ottiene così una Variant contenente una matrice di variabili Variant. Il valore VarType di ciascun elemento di queste matrice di variabili Variant corrisponde al tipo originale dei singoli elementi del tipo definito dall'utente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile assegnare ad una matrice di dati

Il valore di ciascun elemento di una matrice deve essere assegnato individualmente. Cause e soluzioni dell'errore:

•	Si è cercato di assegnare un valore singolo ad una variabile della matrice, senza specificare a quale elemento debba essere assegnato il valore.

Per l'assegnazione di un elemento della matrice, l'elemento stesso va specificato in un indice. Se, ad esempio, MyArray è una matrice di interi, l'espressione MyArray = 5 non è valida, mentre è valida l'espressione che segue:

MyArray(UBound(MyArray)) = 5

•	Si è cercato di assegnare un'intera matrice ad un'altra matrice. Se ad esempio Arr1 è una matrice e Arr2 è un'altra matrice, nessuna delle due assegnazioni che seguono sarà valida:

Arr1 = Arr2	' Assegnazione non valida.

Arr1() = Arr2()	' Assegnazione non valida.

Per assegnare una matrice ad un'altra matrice, verificare che la matrice indicata nel lato sinistro dell'assegnazione sia ridimensionabile e che i tipi della matrice corrispondano.

Nota   È possibile assegnare un'intera matrice ad una variabile Variant, ottenendo una variabile di tipo Single che contiene l'intera matrice:

Dim MyArr As Variant

MyVar = Arr2()

Sarà quindi possibile fare riferimento agli elementi della matrice nella variabile con la stessa notazione di indice utilizzata per una matrice normale, ad esempio:

MyVar(3) = MyVar(1) + MyVar(5)

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile modificare i tipi di dati degli elementi delle matrici

L'istruzione ReDim può essere utilizzata esclusivamente per modificare il numero di elementi di una matrice. Causa e soluzione dell'errore:

•	È stata utilizzata l'istruzione ReDim per tentare di ridichiarare il tipo di dati di una matrice.

Dichiarare una nuova matrice del tipo desiderato, quindi utilizzare le funzioni di conversione per assegnare ciascun elemento della vecchia matrice all'elemento corrispondente della nuova.

È inoltre possibile inserire la matrice in una variabile Variant, con una semplice assegnazione:

Dim MyVar As Variant

MyVar = MyIntegerArray()

Verrà creata una variabile Variant contenente una matrice contrassegnata con il tipo della matrice originale. Sarà quindi possibile assegnare variabili di qualsiasi VarType valido agli elementi della matrice all'interno della variabile Variant.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile definire come Public un tipo definito dall'utente all'interno di un modulo di oggetto privato

Un tipo definito dall'utente incluso in un modulo di oggetto non può essere Public. Causa e soluzione dell'errore:

•	In un modulo oggetto, si è cercato di definire come Public un tipo definito dall'utente.

Spostare la definizione del tipo definito dall'utente in un modulo standard, quindi dichiarare le variabili con il tipo del modulo di oggetto o di altri moduli. Se si desidera che il tipo sia disponibile solo nel modulo in cui è visualizzato, è possibile inserire la relativa definizione Type...End Type nel modulo oggetto facendola precedere dalla parola chiave Private.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile visualizzare routine nascosta

Quando un modulo è nascosto, tutti gli elementi sono nascosti. Causa e soluzione dell'errore:

•	Si è cercato di visualizzare una routine di un modulo nascosto.

Rendere visibile il modulo per visualizzare la routine. Per visualizzare una riga che ha generato un errore in una routine nascosta, dopo aver reso visibile il modulo eseguire nuovamente il codice per visualizzare l'errore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile modificare il modulo

I moduli contrassegnati come protetti possono essere visualizzati ma non modificati. Causa e soluzione dell'errore:

•	Si è cercato di modificare un modulo protetto.

Rimuovere la protezione del modulo prima di tentare nuovamente la modifica. Nella maggior parte dei casi, questo errore viene generato quando è installata l'aggiunta Visual SourceSafe e il file non è estratto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile interrompere l'esecuzione in questa fase

La modalità interruzione è lo stato di un programma che è ancora in esecuzione ma di cui sono state sospese le attività. Causa e soluzione dell'errore:

•	Si è cercato di attivare la modalità interruzione, ad esempio premendo CTRL+INTERR (Windows) o COMANDO+PUNTO (Macintosh), facendo clic sul pulsante Interrompi sulla barra degli strumenti Standard o sulla barra degli strumenti Debug oppure eseguendo un punto di interruzione nel codice in esecuzione.

È stata apportata una modifica a livello di programmazione al progetto utilizzando il modello ad oggetti delle aggiunte. In questo caso l'esecuzione del programma non può essere interrotta. È possibile continuare o terminare l'esecuzione ma non interromperla.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile eseguire istruzioni nella finestra Immediata in modalità progettazione

È definita fase di progettazione la fase in cui il codice non è in esecuzione oppure l'esecuzione è stata sospesa. Causa e soluzione dell'errore:

•	Si è cercato di eseguire un'istruzione nella finestra Immediata, ma il codice non è in esecuzione.

Avviare l'esecuzione del codice e quindi sospendere l'esecuzione del programma. Sarà quindi possibile eseguire il codice nella finestra Immediata.

Per ulteriori informazioni, posizionare il cursore nella finestra Immediata e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile trovare progetto o libreria

Il codice non può essere eseguito fino a quando non vengono risolti tutti i riferimenti mancanti. Cause e soluzioni dell'errore:

•	Non è stato trovato un progetto con riferimento o non è stata trovata una libreria degli oggetti di riferimento, corrispondente alla lingua del progetto.

I riferimenti non risolti vengono preceduti dalla parola "MANCANTE:" nella finestra di dialogo Riferimenti. Selezionare il riferimento mancante per visualizzare il nome del percorso e la lingua del progetto o della libreria mancanti. Seguire i passaggi di seguito descritti per individuare i riferimenti mancanti:

Per risolvere i riferimenti

1.	Visualizzare la finestra di dialogo Riferimenti.

2.	Selezionare il riferimento mancante.

3.	Avviare il Visualizzatore oggetti.

4.	Utilizzare la finestra di dialogo Sfoglia per trovare il riferimento mancante.

5.	Scegliere OK.

6.	Ripetere i passaggi precedenti fino a quando non si individuano tutti i riferimenti mancanti.

Dopo aver visualizzato l'elemento mancante, l'indicazione "MANCANTE:" viene eliminata, ad indicare che è stato ristabilito il collegamento. Si noti che se il nome del file di un progetto cui si fa riferimento è cambiato, verrà aggiunto un nuovo riferimento e il vecchio riferimento dovrà essere rimosso.

Per rimuovere i riferimenti non più necessari, è sufficiente disattivare le caselle di controllo che compaiono accanto ai riferimenti che si desidera rimuovere. Si noti che i riferimenti alla libreria degli oggetti di Visual Basic e alla libreria degli oggetti dell'applicazione host non possono essere rimossi.

Le applicazioni possono supportare diverse versioni in diverse lingue delle librerie di oggetti. Per individuare la versione corretta, visualizzare la finestra di dialogo Riferimenti e quindi controllare la lingua indicata nella parte inferiore della finestra di dialogo.

Le librerie degli oggetti possono essere file autonomi con estensione olb oppure possono essere integrate in una libreria a collegamento dinamico (DLL) Esistono diverse versioni di librerie di oggetti per ogni piattaforma. Se i progetti vengono spostati da Macintosh a Windows, ad esempio, è necessario che la versione corretta (lingua e piattaforma) della libreria a cui si fa riferimento sia disponibile nella posizione specificata nella documentazione dell'applicazione host.

I nomi di file delle librerie di oggetti vengono in genere composti come segue:

•	Windows versione 3.1 e precedenti:  Codice applicazione + Codice lingua + [Versione].olb. Ad esempio:

Vafr2.olb è il nome della versione 2 della libreria degli oggetti di Visual Basic, Applications Edition in lingua francese.

Xlfr50.olb è il nome della libreria degli oggetti di Microsoft Excel 5.0 in francese.

•	Macintosh: Nome applicazione Codice lingua [Versione] OLB. Ad esempio:

VA FR 2 OLB è il nome della versione 2 della libreria degli oggetti di Visual Basic, Applications Edition in lingua francese.

MS Excel FR 50 OLB è il nome della libreria degli oggetti di Microsoft Excel 5.0 in francese.

Nel caso non sia possibile trovare una libreria o un progetto mancanti nel sistema, è consigliabile rivolgersi all'autore del progetto di riferimento. Se la libreria mancante è una libreria degli oggetti di un'applicazione Microsoft è possibile ottenerla richiedendola a Microsoft nei seguenti modi:

•	Se si ha accesso ai servizi elettronici di assistenza tecnica Microsoft, vedere la sezione relativa al supporto tecnico in questo file della Guida. Nella sezione relativa ai servizi elettronici vengono fornite le istruzioni per accedere al servizio appropriato.

•	Se non si ha accesso ai servizi elettronici di assistenza tecnica Microsoft, le librerie degli oggetti Microsoft sono disponibili su richiesta come integrazione dell'applicazione. Nella sezione relativa al supporto tecnico in questo file della Guida sono inoltre disponibili informazioni su come contattare il servizio di assistenza locale Microsoft.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile utilizzare Get o Put con una variabile di riferimento all'oggetto o una variabile di tipo definito dall'utente contenente un riferimento all'oggetto

Un riferimento di oggetto è temporaneo e può perdere facilmente la validità durante le operazioni di chiusura e apertura di un file. Causa e soluzione dell'errore:

•	La variabile nell'istruzione Get o Put contiene, oppure è stata dichiarata per contenere un riferimento di oggetto.

Se la variabile è un riferimento di oggetto non è possibile utilizzarla con le istruzioni Get e Put. Se l'intenzione era quella di inserire il valore di tutte o di alcune proprietà dell'oggetto nel file, è necessario specificare singolarmente tutte le proprietà.

•	La variabile di tipo definito dall'utente nell'istruzione Get o Put contiene un elemento che è un riferimento di oggetto.

Se l'istruzione Type della variabile contiene un elemento che rappresenta un oggetto (se, ad esempio, è definita in un modulo di classe, è di tipo Object oppure è un form o un controllo e così via) rimuoverla dalla definizione oppure definire per l'utilizzo con le istruzioni Get e Put un nuovo tipo la cui definizione non comprenda un elemento di tipo Object.

Se nel tipo definito dall'utente è compreso un elemento di tipo Variant, verificare che a tale elemento non sia assegnato alcun riferimento di oggetto. Un tipo Variant può accettare l'assegnazione, ma genererà un errore se il relativo tipo definito dall'utente è utilizzato in un'istruzione Get o Put.

Si noti che è possibile utilizzare le istruzioni Input #, Line Input #, Print # o Write # per scrivere la proprietà predefinita di un oggetto su disco.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile caricare il modulo; formato non valido

Il modulo deve essere in formato testo. Causa e soluzione dell'errore:

•	Si è cercato di caricare un file in formato binario come modulo.

Alcune versioni di Visual Basic consentono di salvare il codice sia in formato binario che di testo. Se possibile, caricare nuovamente il file nell'applicazione in cui è stato salvato l'ultima volta e salvarlo come testo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1(in Windows) o AIUTO (in Macintosh).


Impossibile assegnare un valore a una proprietà in sola lettura

Alcune proprietà non accettano assegnazioni. Causa e soluzione dell'errore:

•	Si è cercato di assegnare un valore a una proprietà che non accetta assegnazioni.

In certi casi, è possibile assegnare valori alle proprietà solo in momenti specifici. È possibile, ad esempio, che una proprietà accetti le assegnazioni in fase di progettazione, ma non in fase di esecuzione. Controllare nell'argomento corrispondente della Guida in linea, se e quando è possibile assegnare valori ad una proprietà specifica.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Modulo nascosto. Impossibile eseguire l'operazione richiesta

Questo errore si riferisce al modello ad oggetti delle aggiunte di Visual Basic. Causa e soluzione dell'errore:

•	Il modulo è nascosto. Non è possibile modificare un modulo nascosto o ottenere informazioni da un modulo nascosto.

Rivisualizzare il modulo e quindi ritentare l'operazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile specificare un punto di interruzione condizionale per una matrice

Ad una matrice non è assegnato un solo valore. Causa e soluzione dell'errore:

•	Si è cercato di impostare un punto di interruzione condizionale (a volte definito punto di controllo) che sospenderebbe l'esecuzione del programma se cambiasse il valore dell'intera matrice.

Impostare il punto di interruzione condizionale su un elemento specifico della matrice.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile registrare durante l'esecuzione del modulo

Prima di iniziare la registrazione, è necessario fermare l'esecuzione. Causa e soluzione dell'errore:

•	Si è cercato di registrare una macro durante l'esecuzione del codice del modulo.

Interrompere l'esecuzione oppure premere CTRL+INTERR (Windows) o COMANDO+PUNTO (Macintosh), quindi attivare la registrazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile rimuovere il riferimento predefinito

Esiste sempre un riferimento predefinito. Causa e soluzione dell'errore:

•	Si è cercato di rimuovere un riferimento che deve essere sempre disponibile, ad esempio, un riferimento a una libreria dei tipi o a una libreria degli oggetti.

Non cercare di rimuovere il riferimento.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Case Else esterna a Select Case

Un'istruzione Case Else può essere inserita solo tra istruzioni corrispondenti Select Case e End Select. Causa e soluzione dell'errore:

•	Un'istruzione Case Else è stata posta fuori dal blocco Select Case...End Select.

Spostare l'istruzione Case Else all'interno di un blocco Select Case...End Select.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Case senza Select Case

Un'istruzione Case deve rientrare in un blocco Select Case...End Select. Causa e soluzione dell'errore:

•	Un'istruzione Case è stata utilizzata senza l'istruzione Select Case precedente.

Controllare le altre strutture di controllo all'interno della struttura Select Case...Case e verificare che siano abbinate correttamente. Un errore di questo genere viene generato, ad esempio, se all'interno della struttura Select Case...End Select si trova un'istruzione If senza la corrispondente End If.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Riferimenti circolari tra i moduli

I riferimenti circolari tra moduli, costanti e tipi definiti dall'utente non sono ammessi. Causa e soluzione dell'errore:

•	Un tipo definito dall'utente o una costante in un modulo fanno riferimento ad un tipo definito dall'utente o a una costante in un altro modulo, che a sua volta fa riferimento ad un altro tipo definito dall'utente o ad un'altra costante nel primo modulo.

Rimuovere i riferimenti circolari.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Il modulo di oggetto deve implementare tutte le routine dell'interfaccia

Un'interfaccia è un insieme di prototipi di routine non implementati. Causa e soluzione dell'errore:

•	Si è specificata un'interfaccia in un'istruzione per l'implementazione, ma non è stato aggiunto il codice per tutte le routine dell'interfaccia.

È necessario scrivere del codice per tutte le routine specificate nell'interfaccia. Una routine vuota è adeguata; la routine dovrebbe in questo modo implementare le funzioni previste.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Esecuzione del codice interrotta

Se necessario, è possibile sospendere l'esecuzione del codice. Causa e soluzione dell'errore:

•	È stata individuata una combinazione di tasti CTRL+INTERR (Microsoft Windows), ESC (Microsoft Excel) o COMANDO+PUNTO (Macintosh).

Nella finestra di dialogo, scegliere Debug per entrare in modalità interruzione, Continua per riprendere o Termina per terminare l'esecuzione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1(in Windows) o AIUTO (in Macintosh).


Errore di compilazione nel modulo nascosto: <nome modulo>

Un modulo protetto non può essere visualizzato. Causa e soluzione dell'errore:

•	Nel codice del modulo specificato è presente un errore di compilazione, che tuttavia non può essere visualizzato perché il progetto è protetto.

Rimuovere la protezione dal progetto, quindi eseguire nuovamente il codice per visualizzare l'errore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1(in Windows) o AIUTO (in Macintosh).


Necessaria espressione costante

È necessario che venga inizializzata una costante. Cause e soluzioni dell'errore:

•	Si è cercato di inizializzare una costante con una variabile, un'istanza di un tipo definito dall'utente, un oggetto o il valore restituito da una chiamata di funzione.

Inizializzare le costanti con valori letterali, costanti precedentemente dichiarate o valori letterali e costanti collegate con operatori (ad eccezione dell'operatore logico Is).

•	Si è cercato di dichiarare una matrice utilizzando una variabile per specificare il numero di elementi.

Per dichiarare una matrice dinamica all'interno di una routine, dichiarare la matrice con ReDim e specificare il numero di elementi con una variabile.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Costanti, stringhe di lunghezza fissa, matrici, tipi di dati definiti dall'utente e istruzioni Declare non ammesse come membri pubblici di moduli di oggetto

Alcune variabili in un modulo di oggetto non possono essere dichiarate come Public; le routine, tuttavia, sono Public per impostazione predefinita ed è possibile utilizzare routine Property per simulare variabili tramite la sintassi. Cause e soluzioni dell'errore:

•	È stata dichiarata una costante Public in un modulo di oggetto.

Anche se non è possibile dichiarare una costante Public in un modulo di oggetto, è tuttavia possibile creare una routine Property Get con lo stesso nome. Se non si crea una routine Property Let o Property Set con quel nome, viene in effetti creata una proprietà di sola lettura che è possibile utilizzare come fosse una costante.

•	È stata dichiarata una stringa di lunghezza fissa Public in un modulo di oggetto.

È possibile simulare stringhe di lunghezza fissa con una serie di routine Property che consentono di troncare i dati della stringa quando superano la lunghezza massima consentita oppure di visualizzare un messaggio per informare che è stata superata la lunghezza massima consentita.

•	È stata dichiarata una matrice Public in un modulo di oggetto.

Una routine non restituisce una matrice, ma una variabile Variant che include una matrice. Per simulare una matrice Public in un modulo di classe, utilizzare una serie di routine Property che consentono di accettare e restituire una variabile Variant contenente una matrice.

•	È stata inserita un'istruzione Declare in un modulo di oggetto.

Per impostazione predefinita, le istruzioni Declare sono Public. Anteporre la parola chiave Private all'istruzione Declare.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


ll modulo corrente non supporta il metodo Print

Non tutti i metodi e le proprietà sono utilizzabili in tutti i moduli. Cause e soluzioni dell'errore:

•	Il metodo Print è stato applicato ad un oggetto che non può visualizzare alcun elemento. Non è, ad esempio, possibile utilizzare il metodo Print senza qualifica in un modulo standard.

Rimuovere il riferimento al metodo Print o qualificarlo con un oggetto appropriato, ad esempio con l'oggetto Debug per visualizzarne gli argomenti nella finestra Immediata durante il debug.

•	Si è cercato di utilizzare il metodo Line, Circle, Pset o Scale su un oggetto che non riconosce tali metodi. Questi metodi non possono essere utilizzati, ad esempio, senza qualifica in un modulo standard o in un modulo di classe dell'automazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Riferimento circolare ai progetti non ammesso

I riferimenti circolari ai progetti non sono consentiti. Se ad esempio MyProj fa riferimento a YourProj, allora YourProj (o un progetto che fa riferimento a YourProj) non può fare riferimento a MyProj. Causa e soluzione dell'errore:

•	Si è cercato di aggiungere un riferimento ad un progetto che fa già parte del progetto.

Rimuovere gli eventuali riferimenti circolari.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Le definizioni delle routine Property per la stessa proprietà non sono coerenti o includono parametri facoltativi o ParamArray

I parametri delle routine Property Get, Property Let e Property Set per la stessa proprietà devono corrispondere esattamente, ad eccezione della routine Property Let che ha un parametro extra, il cui tipo deve corrispondente al tipo restituito della routine Property Get corrispondente e ad eccezione della routine Property Set che ha un parametro in più rispetto alla routine Property Get corrispondente, il cui tipo può essere Variant, Object, un nome di classe o un tipo specificato in una libreria degli oggetti. Cause e soluzioni dell'errore:

•	Il numero dei parametri della routine Property Get non è inferiore di uno rispetto al numero di parametri della routine Property Let o Property Set corrispondente.

Aggiungere un parametro a Property Let o Property Set oppure rimuovere un prametro da Property Get, in modo appropriato.

•	I tipi di parametro di Property Get devono corrispondere esattamente ai parametri corrispondenti di Property Let o Property Set, ad eccezione del parametro Property Set extra.

Modificare le dichiarazioni dei parametri nelle definizioni di routine corrispondenti in modo che siano abbinate correttamente.

•	Il tipo di parametro del parametro extra di Property Let deve corrispondere al tipo restituito della routine Property Get corrispondente.

Modificare la dichiarazione del parametro extra in Property Let o il tipo restituito della routine Property Get corrispondente in modo che siano abbinati correttamente.

•	Il tipo di parametro del parametro extra di Property Set può essere diverso dal tipo restituito dalla routine Property Get corrispondente, ma deve essere un tipo Variant, Object, nome di classe, o libreria degli oggetti valido.

Verificare che il parametro extra della routine Property Set sia di tipo Variant, Object, nome di classe o libreria degli oggetti.

•	È stata definita una routine Property con un parametro Optional o ParamArray.

I parametri ParamArray e Optional non sono ammessi nelle routine Property. Ridefinire le routine senza utilizzare queste parole chiave.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Le istruzioni Deftipo devono precedere le dichiarazioni

Le istruzioni Deftipo comprendono DefInt, DefDbl, DefCur e così via. Cause e soluzioni dell'errore:

•	Una dichiarazione di variabile precede un'istruzione Deftipo a livello di modulo.

Spostare l'istruzione Deftipo prima di tutte le dichiarazioni di variabile.

•	Un'istruzione Deftipo appare in una routine.

Spostare l'istruzione Deftipo a livello di modulo, facendola precedere a tutte le dichiarazioni di variabile.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Etichetta di destinazione troppo distante. Ciclo, Select Case o blocco If troppo esteso

Le routine possono occupare fino a 64 KB dall'inizio alla fine, ma perché avvenga il passaggio, in avanti o all'indietro nell'ambito di una routine, tale passaggio deve essere limitato a 32.767 byte in entrambe le direzioni. Cause e soluzioni dell'errore:

•	L'etichetta di destinazione di un'istruzione di passaggio (GoTo, GoSub) dista più di 32.767 byte dall'istruzione di passaggio di origine.

Avvicinare l'etichetta oppure ridurre le dimensioni della routine.

•	Una struttura ciclica molto estesa occupa più di 32 KB di memoria dall'inizio alla fine.

Ridurre le dimensioni del ciclo.

•	Un blocco If molto esteso contiene una proposizione Then o Else che occupa più di 32 KB di memoria dall'inizio alla fine.

Ridurre la dimensione della parte terminale della struttura.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Do senza Loop

A ciascuna istruzione Do deve corrispondere un'istruzione Loop conclusiva. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione Do senza inserire un'istruzione Loop conclusiva.

Controllare che le altre strutture di controllo all'interno della struttura Do...Loop siano abbinate correttamente. Questo errore si verificherà, ad esempio, se all'interno della struttura Do...Loop è presente un blocco If senza la corrispondente struttura End If.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Dichiarazione doppia nell'area di validità

Il nome specificato è già utilizzato a questo livello dell'area di validità. Due variabili, ad esempio, possono avere lo stesso nome se sono definite in routine diverse ma non se sono definite all'interno di una stessa routine. Cause e soluzioni dell'errore:

•	Una nuova variabile o routine ha lo stesso nome di una variabile o di una routine esistente. Ad esempio:

Sub MySub()

Dim A As Integer

Dim A As Variant

. . .	' Altre dichiarazioni o codice.

End Sub

Controllare la routine, il modulo o il progetto corrente ed eliminare qualsiasi dichiarazione doppia.

•	Un'istruzione Const utilizza lo stesso nome di una variabile o di una routine esistente.

Rimuovere o rinominare la costante.

•	Una matrice fissa è stata dichiarata più di una volta.

Rimuovere o rinominare una delle matrici.

Cercare il nome doppio. Quando si specifica il nome da cercare, omettere il carattere di dichiarazione del tipo, se presente, in quanto se i nomi sono gli stessi ed i caratteri di dichiarazione del tipo sono diversi si verificherà un conflitto.

Si noti che una variabile a livello di modulo può avere lo stesso nome di una variabile dichiarata in una routine, ma per fare riferimento alla variabile a livello di modulo della routine sarà necessario qualificarla con il nome del modulo. I nomi di modulo e di progetti con riferimenti possono inoltre essere riutilizzati come nomi di variabile nelle routine ed essere qualificati.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Definizione doppia

Per una costante di compilazione condizionale è possibile definire un solo valore. Causa e soluzione dell'errore:

•	Sono stati specificati due valori diversi per la stessa costante di compilazione condizionale, ad esempio:

#Const Mac = 0

#Const Mac = 1

Rimuovere una delle definizioni.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Istruzione Deftipo doppia

Le istruzioni Deftipo nella stessa area di validità devono specificare intervalli di lettere univoci. Causa e soluzione dell'errore:

•	Una parte o l'intero intervallo di lettere dell'istruzione Deftipo è già compreso in un'altra istruzione Deftipo.

Riscrivere l'istruzione in modo che non vi sia sovrapposizione negli intervalli di lettere.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Istruzione Option doppia

In un modulo può essere definita una sola istruzione Option di ciascun tipo. Causa e soluzione dell'errore:

•	È stata definita in questo modulo più di un'istruzione Option Base, Option Compare, Option Explicit o Option Private.

Rimuovere le eventuali istruzioni doppie dal modulo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile annullare la modifica. Continuare?

Dopo l'esecuzione di questa modifica non sarà possibile scegliere Annulla per ripristinare lo stato corrente. Causa e soluzione dell'errore:

•	La modifica potrebbe avere dimensioni troppo estese per essere salvata.

Cercare di eseguire la modifica per passaggi graduali.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Else senza If

Un'istruzione Else deve essere preceduta da un'istruzione If. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione Else senza un'istruzione If corrispondente.

Controllare le altre strutture di controllo all'interno della struttura If...End If e verificare che siano abbinate correttamente. Controllare inoltre che il blocco If sia formattato correttamente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Tipo Enum vuoto non ammesso

Un tipo Enum specifica il nome e i membri per un'enumerazione. Causa e soluzione dell'errore:

•	È stato assegnato un nome a un'enumerazione in un blocco Enum…End Enum ma non sono stati specificati i membri.

Aggiungere almeno un membro al blocco Enum…End Enum.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Espressione di controllo vuota

La finestra di dialogo Aggiungi espressione di controllo richiede l'immissione di un'espressione. Causa e soluzione dell'errore:

•	Non è stata indicata un'espressione di controllo nella finestra di dialogo Aggiungi espressione di controllo.

Aggiungere un'espressione nella finestra di dialogo Aggiungi espressione di controllo oppure premere ESC.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


End If senza blocco If

Un'istruzione End If deve essere abbinata ad una corrispondente istruzione If. Causa e soluzione dell'errore:

•	La proposizione If è stata omessa oppure è separata da End If.

Controllare le altre strutture di controllo all'interno della struttura If...End If e verificare che siano abbinate correttamente. Verificare inoltre che il blocco If sia formattato correttamente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Raggiunta fine dell'area di ricerca. Continuare dall'inizio?

La ricerca non ha avuto esito positivo. Causa e soluzione dell'errore:

•	La ricerca verso il basso ha raggiunto la fine dell'area specificata.

È possibile scegliere di continuare la ricerca dall'inizio dell'area, oppure annullare l'operazione e cambiare l'area di ricerca.


End Select senza Select Case

L'istruzione End Select deve essere abbinata ad una precedente istruzione Select Case. Causa e soluzione dell'errore:

•	Un'istruzione End Select è stata utilizzata senza l'istruzione corrispondente Select Case.

Questo è dovuto di solito ad un'istruzione End Select superflua dopo un blocco Select Case o all'esclusione dell'istruzione End Select durante la copia di un blocco Select Case da una routine a un'altra. Controllare tutte le istruzioni End Select per verificare che si trovino alla fine di una struttura Select Case.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


End With senza With

L'istruzione End With deve essere abbinata ad una precedente istruzione With. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione End With senza un'istruzione corrispondente With.

Controllare le altre strutture di controllo all'interno della struttura With...End With e verificare che siano abbinate correttamente. Questo errore viene, ad esempio, generato se per un'istruzione If non viene specificata la corrispondente istruzione End If all'interno della struttura With...End With.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile utilizzare in moduli di oggetto pubblici tipi Enum privati e tipi Enum definiti in moduli standard o classi private come parametri o tipi restituiti per routine pubbliche, come membri di dati o come campi di tipi pubblici definiti dall'utente.

Causa e soluzione dell'errore:

•	Un tipo Enum non esposto è stato utilizzato come parametro o tipo restituito di una routine pubblica o come membro di dati pubblici di una classe esposta.

Il termine esporre in questo caso significa che Enum è esposto dal server ActiveX che viene definito, il che equivale a dire che viene dichiarato in una classe pubblica di un progetto EXE o DLL ActiveX.


Errore di accesso al registro di configurazione del sistema

Alcune operazioni richiedono l'accesso al database di registrazione del sistema. Causa e soluzione dell'errore:

•	Il database di registrazione del sistema è danneggiato.

Eseguire di nuovo il programma di installazione dell'applicazione host.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Routine di gestione degli eventi non valida

L'elenco dei parametri di una routine di gestione degli eventi deve corrispondere esattamente alla dichiarazione dell'evento. Causa e soluzione dell'errore:

•	La routine di gestione degli eventi contiene un numero errato di parametri.

Eliminare i parametri superflui o aggiungere quelli mancanti.

•	Ad uno o più parametri della routine di gestione degli eventi è assegnato il tipo di dati errato.

Fare in modo che i tipi dei parametri corrispondano a quelli della dichiarazione dell'evento.

•	La routine di gestione degli eventi è una routine Function anziché una routine Sub.

Impostare la routine come Sub. Una routine di gestione degli eventi non può restituire un valore.

•	Un'altra libreria dei tipi utilizza il nome dell'evento per un tipo specifico.

Qualificare il nome con il nome della libreria dei tipi corretta per evitare ambiguità.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


La dichiarazione della routine non corrisponde alla descrizione dell'evento o della routine con lo stesso nome

Il nome di una routine nel modulo di classe è in conflitto con il nome di un evento. Causa e soluzione dell'errore:

•	Una routine ha lo stesso nome di un evento, ma non la stessa signature, ovvero lo stesso numero e tipi di parametri). Questo può verificarsi quando, ad esempio, si aggiunge un nuovo parametro ad una routine di eventi. L'errore può essere generato se, ad esempio, si modifica la definizione di una routine di eventi Form_Load del form nel modo seguente:

Sub Form_Load (MyParam As Integer)

. . .

End Sub

Se la routine di eventi non è quella corrispondente all'evento, è necessario modificarne il nome. Se invece corrisponde a quella dell'evento, controllare che l'elenco dei parametri corrisponda all'elenco richiesto dall'evento (se esiste).

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Exit Do non interna a Do...Loop

L'istruzione Exit Do è valida esclusivamente all'interno di un'istruzione Do...Loop. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione Exit Do al di fuori di un'istruzione Do...Loop.

Verificare che l'istruzione Exit Do sia preceduta da un'istruzione Do valida.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Exit For non interna a For...Next

L'istruzione Exit For è valida solo in un ciclo For...Next. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione Exit For all'esterno di un'istruzione For...Next.

Verificare che Exit For sia preceduta da un'istruzione For valida.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Exit Function non ammessa in Sub o Property

Un'istruzione Exit deve corrispondere al tipo di routine in cui viene inserita. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione Exit Function in una routine Sub o Property.

Per questi tipi di routine, utilizzare Exit Sub o Exit Property.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Exit Property non ammessa in Function o Sub

Un'istruzione Exit deve corrispondere al tipo di routine in cui viene inserita. Causa e soluzione dell'errore:

•	È stata utilizzata l'istruzione Exit Property in una routine Sub o Function.

Utilizzare l'istruzione Exit corretta per questo tipo di routine.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Exit Sub non ammessa in Function o Property

Un'istruzione Exit deve corrispondere al tipo di routine in cui viene inserita. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione Exit Sub in una routine Function o Property.

Utilizzare l'istruzione Exit corretta per questo tipo di routine.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista matrice

Un nome di variabile con un indice indica che la variabile è una matrice. Causa e soluzione dell'errore:

•	La sintassi specificata è appropriata per una matrice, ma nessuna matrice con questo nome rientra nell'area di validità.

Verificare che il nome della variabile sia scritto in modo corretto. Se il modulo non contiene Option Explicit, una variabile verrà creata al primo utilizzo. Se il nome di una variabile di matrice non viene scritto correttamente, è possibile che la variabile venga creata, ma non come matrice.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista End Function

Un'istruzione End routine deve corrispondere al tipo di routine in cui viene inserita. Causa e soluzione dell'errore:

•	È stata utilizzata l'istruzione End Property o End Sub per terminare una routine Function.

Per questo tipo di routine, utilizzare End Function.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista End Property

Un'istruzione End routine deve corrispondere al tipo di routine in cui viene inserita. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione End Function o End Sub per terminare una routine Property.

Per questo tipo di routine, utilizzare End Property.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista End Sub

Un'istruzione End routine deve corrispondere al tipo di routine in cui viene inserita. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione End Function o End Property per terminare una routine Sub.

Per questo tipo di routine, utilizzare End Sub.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista End With

Un blocco With deve sempre avere una corrispondente istruzione finale. Causa e soluzione dell'errore:

•	Un blocco With non è stato terminato in modo adeguato.

Inserire un'istruzione End With al termine del blocco.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista funzione o variabile

La sintassi dell'istruzione indica la chiamata di una variabile o di una funzione. Causa e soluzione dell'errore:

•	Il nome non corrisponde ad una variabile o ad una routine Function.

Controllare che il nome sia stato digitato correttamente e verificare che tutte le variabili o funzioni con questo nome siano visibili nella parte del programma dalla quale viene effettuata la chiamata. Se, ad esempio, la funzione è definita come Private o se la variabile non è definita come Public, la funzione e la variabile saranno visibili solo all'interno del relativo modulo.

•	Si sta cercando di assegnare un valore al nome di una routine in modo non corretto. L'errore viene, ad esempio, generato dal codice riportato di seguito se MySub è ad esempio una routine Sub:

MySub = 237	' Genera l'errore.

È possibile utilizzare la sintassi di assegnazione con le routine Property Let e Function che restituiscono un oggetto o una stringa di tipo Variant contenente un oggetto. Non è invece possibile utilizzare tale sintassi con le routine Sub, Property Get o Property Set.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista routine e non modulo

Nell'area di validità non esiste alcuna routine con questo nome. Esiste tuttavia un modulo con questo nome. È possibile chiamare una routine, ma non è possibile chiamare un modulo. Causa e soluzione dell'errore:

•	Un nome di modulo viene utilizzato come chiamata di routine.

Controllare che il nome della routine sia stato digitato correttamente e verificare che la routine che si sta cercando di chiamare non sia privata in un altro modulo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista routine e non progetto o libreria

Nell'area di validità corrente non esiste alcuna routine con questo nome. Esiste tuttavia un progetto con questo nome. È possibile chiamare una routine, ma non è possibile chiamare un progetto. Causa e soluzione dell'errore:

•	Un nome di progetto viene utilizzato come chiamata di routine.

Controllare che il nome della routine sia stato digitato correttamente e verificare che la routine che si sta cercando di chiamare non sia privata in un altro modulo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista routine e non tipo definito dall'utente

Nell'area di validità corrente non esiste alcuna routine con questo nome. Esiste tuttavia un tipo definito dall'utente con questo nome. È possibile chiamare una routine, ma non è possibile chiamare un tipo definito dall'utente. Causa e soluzione dell'errore:

•	Un nome di tipo definito dall'utente viene utilizzato come chiamata di routine.

Controllare che il nome della routine sia stato digitato correttamente e verificare che la routine che si sta cercando di chiamare non sia privata in un altro modulo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista routine e non variabile

Nell'area di validità corrente non esiste alcuna routine con questo nome. Esiste tuttavia una variabile con questo nome. È possibile chiamare una routine, ma non è possibile chiamare una variabile. Causa e soluzione dell'errore:

•	Un nome di variabile viene utilizzato come chiamata di routine.

È inoltre possibile che il nome della routine non sia stato digitato correttamente e che venga quindi interpretato come una variabile definita in modo implicito. Controllare che il nome della routine sia stato digitato correttamente e verificare che la routine che si sta cercando di chiamare non sia privata in un altro modulo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista Sub, Function o Property

La sintassi dell'istruzione indica la chiamata di una routine Sub, Function o Property. Causa e soluzione dell'errore:

•	Il nome specificato non è quello di una routine Sub, Function o Property nell'area di validità di questa parte del programma.

Controllare che il nome sia digitato correttamente. Si noti che se la routine è definita come Private, può essere chiamata solo dall'interno del modulo di appartenenza.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Previsto tipo definito dall'utente e non progetto

Nell'area di validità corrente non esiste alcun tipo definito dall'utente con questo nome. Esiste tuttavia un progetto con questo nome. È possibile definire una variabile di tipo definito dall'utente, ma non di tipo progetto. Causa e soluzione dell'errore:

•	Un nome di progetto viene utilizzato come tipo definito dall'utente.

Controllare che il nome del tipo definito dall'utente sia stato digitato correttamente e verificare che quest'ultimo non sia privato in un altro modulo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista variabile o routine e non tipo Enum

Il nome di un tipo Enum compare solo in un'istruzione che dichiara un'enumerazione del tipo o come qualificatore. Causa e soluzione dell'errore:

•	È stato utilizzato un nome di tipo Enum anziché il nome di una variabile di enumerazione del tipo.

Dichiarare una variabile di tipo Enum o trovare una dichiarazione precedente nell'area di validità corrente ed utilizzare tale variabile.

•	È stato utilizzato un nome di tipo Enum anziché un nome di variabile o di routine.

Controllare l'ortografia dell'identificatore che ha causato l'errore. Utilizzare il nome di una variabile o di una routine in cui è stato specificato un tipo Enum.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista variabile o routine e non modulo

Nell'area di validità corrente non esiste alcuna variabile o routine con questo nome. Esiste tuttavia un modulo con questo nome. Causa e soluzione dell'errore:

•	Un nome di modulo viene utilizzato come variabile o routine.

Controllare che il nome di variabile o di routine sia stato digitato correttamente e verificare che il nome cui si desidera fare riferimento non sia privato in un altro modulo. Un nome di modulo può essere utilizzato come qualificatore, ma non può essere indicato da solo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Prevista variabile o routine e non progetto

Nell'area di validità corrente non esiste alcuna variabile o routine con questo nome. Esiste tuttavia un progetto con questo nome. Causa e soluzione dell'errore:

•	Un nome di progetto viene utilizzato come variabile o routine.

Controllare che il nome di variabile o di routine sia stato digitato correttamente e verificare che il nome cui si desidera fare riferimento non sia privato in un altro modulo. Un nome di progetto può essere utilizzato come qualificatore, ma non può essere indicato da solo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Previsto: <varie>

Non è stata trovata una parte prevista della sintassi. L'errore si trova in genere a sinistra dell'elemento selezionato, ma non sempre è di comprensione immediata. È possibile, ad esempio, richiamare una routine Sub con o senza la parola chiave Call. Se tuttavia si utilizza la parola chiave Call, è necessario racchiudere l'elenco degli argomenti tra parentesi. Cause e soluzioni dell'errore:

•	Previsto: Fine dell'istruzione. Utilizzo errato delle parentesi nella chiamata di una routine:

X = Workbook.Add F:= 5	' Errore dovuto alla

' mancanza di parentesi.

Call MySub 5	' Errore dovuto alla

' mancanza di parentesi.

Utilizzare le parentesi se in una chiamata di funzione sono specificati degli argomenti o per la chiamata di una routine Sub che utilizza la parola chiave Call.

•	Previsto: ). Sintassi errata per la chiamata di routine. Una chiamata di funzione, ad esempio, non può essere indicata da sola, mentre le chiamate di routine Sub richiedono talvolta la parola chiave Call, a seconda di come vengono specificati gli argomenti.

Workbook.Add (X:=5, Y:=7)	' Chiamata di funzione

' senza espressione.

YourSub(5, 7)	' Chiamata di una routine

' Sub senza Call .

Utilizzare sempre le chiamate di funzione nelle espressioni. Se vengono specificati più argomenti tra parentesi in una chiamata di routine Sub, utilizzare la parola chiave Call.

•	Previsto: Espressione. Dopo aver incollato del codice dal Visualizzatore oggetti è possibile, ad esempio, che non sia stato specificato un valore per un argomento predefinito.

Workbook.Add (X:= )	' Errore: nessun valore per

' l'argomento predefinito.

Aggiungere un valore per l'argomento o eliminarlo se è facoltativo.

•	Previsto: Variabile. Le parole chiave riservate, ad esempio, non possono essere utilizzate per nomi di variabile. Nell'esempio che segue, l'istruzione Input # prevede una variabile come secondo argomento. Type è una parola riservata e non può quindi essere utilizzata come nome di variabile.

Input # 1, Type	' Parola chiave Type utilizzata in

' modo non valido come nome di variabile.

Assegnare un nuovo nome alla variabile in modo da evitare conflitti con le parole riservate.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Nome esterno non definito

È possibile indicare nomi esterni racchiudendoli tra parentesi quadre ([ ]). Causa e soluzione dell'errore:

•	L'identificatore specificato fra parentesi quadre non ha alcun significato per l'applicazione host.

Controllare che il nome sia digitato correttamente e corrisponda ad un nome definito nell'applicazione host.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Formato di file non più supportato

Alcuni formati di file non possono essere letti in tutte le circostanze. Causa e soluzione dell'errore:

•	Si è cercato di caricare un file binario creato con una versione precedente di Visual Basic.

Caricare il file nella versione di Visual Basic con la quale è stato creato, salvarlo in formato testo, quindi riprovare a caricarlo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Stringhe di lunghezza fissa e qualificatore 'new' non ammessi per i campi di un tipo pubblico definito dall'utente in un modulo di oggetto

Causa e soluzione dell'errore:

•	Le stringhe di lunghezza fissa e i qualificatori 'new' non sono ammessi per i campi di un tipo pubblico definito dall'utente in un modulo di oggetto.


Stringhe di lunghezza fissa non ammesse come tipo per un membro pubblico di un modulo di oggetto. Moduli di oggetto privati non ammessi come tipo per un membro pubblico di un modulo di oggetto pubblico

Causa e soluzione dell'errore:

•	Non è possibile impostare una stringa di lunghezza fissa come tipo per un membro pubblico di un modulo di oggetto. Utilizzare un tipo di variabile diverso.

•	Non è possibile impostare un modulo di oggetto privato come tipo per un membro pubblico di un modulo di oggetto pubblico. Utilizzare un tipo diverso.


I dati di tipo fisso o statico non possono avere dimensioni maggiori di 64 KB

I dati di tipo fisso o statico comprendono le variabili non automatiche, le stringhe di lunghezza fissa e le matrici fisse. Cause e soluzioni dell'errore:

•	Si è cercato di assegnare dati a livello di modulo di dimensioni superiori a 64 KB.

Ridurre la quantità di dati dichiarati. Si noti che tale limite è valido per i dati a livello di modulo. Le stringhe e le matrici di lunghezza variabile a livello di modulo possono avere dimensioni maggiori.

•	Si è cercato di assegnare nel modulo più di 64 KB di dati statici a livello di routine.

Ridurre la quantità di dati di questo tipo. Il limite totale per le dimensioni dei dati di tipo statico inclusi in tutte le routine di un modulo è pari a 64 KB. Si noti che il limite totale non corrisponde a 64 KB per ogni routine e che le stringhe e le matrici di lunghezza variabile di tipo statico possono avere dimensioni maggiori.

•	La dimensione dei dati di tipo definito dall'utente supera i 64 KB.

Ridurre la dimensione del tipo definito dall'utente. In genere, la dimensione di un tipo definito dall'utente equivale alla somma delle dimensioni specificate per i vari elementi. In alcune piattaforme, tra gli elementi possono trovarsi elementi di riempimento che favoriscono l'allineamento. Se si nidifica un tipo definito dall'utente in un altro, la dimensione del tipo nidificato deve essere compresa nella dimensione del nuovo tipo.

•	In una routine, si è cercato di dichiarare una variabile di tipo definito dall'utente che richiede più di 32 KB.

Sebbene le dimensioni massime di una variabile di tipo definito dall'utente siano di 64 KB a livello di modulo, le variabili di tipo definito dall'utente nelle routine non possono avere dimensioni superiori ai 32 KB. Ridurre le dimensioni per la variabile di tipo definito dall'utente oppure utilizzare una variabile a livello di modulo.

•	La dimensione di una stringa di lunghezza fissa dichiarata all'interno di una routine supera i 65.464 caratteri.

Ridurre la lunghezza della stringa di lunghezza fissa. Si noti che le stringhe di lunghezza variabile possono avere lunghezza superiore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Variabile di controllo For già in uso

Quando si esegue una nidificazione di cicli For...Next, è necessario utilizzare diverse variabili di controllo in ciascun ciclo. Causa e soluzione dell'errore:

•	Un ciclo For più interno utilizza lo stesso contatore del ciclo For che lo contiene.

Controllare che nei cicli nidificati non vi siano ripetizioni. Se, ad esempio, per il ciclo più esterno viene utilizzato For Count = 1 To 25, i cicli interni non potranno utilizzare Count come variabile di controllo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


La variabile di controllo For Each deve essere Variant o Object

Una variabile di controllo è la parte elemento della sintassi dell'istruzione For Each...Next. Cause e soluzioni dell'errore:

•	Per un insieme è stata definita una variabile di controllo che non è di tipo Variant o Object.

Verificare che la parte elemento dell'istruzione For Each...Next sia di tipo Variant o Object.

•	Per una matrice è stata definita una variabile di controllo che non è di tipo Variant.

Verificare che la parte elemento dell'istruzione For Each...Next sia di tipo Variant.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


La variabile di controllo For Each nelle matrici deve essere Variant

Una variabile di controllo è la parte elemento della sintassi dell'istruzione For Each...Next. Causa e soluzione dell'errore:

•	Per una matrice è stata definita una variabile di controllo che non è di tipo Variant.

Verificare che la parte gruppo dell'istruzione For Each...Next sia una variabile di tipo Variant.

•	Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


For Each non utilizzabile in matrici di tipo definito dall'utente o in stringhe di lunghezza fissa

I blocchi For Each sono validi solo per gli insiemi e le matrici di tipi intrinseci (comprese le matrici di oggetti). Inoltre, non è possibile eseguire iterazioni in matrici di stringhe di lunghezza fissa utilizzando For Each. Cause e soluzioni dell'errore:

•	Gli elementi della matrice nel blocco For Each sono di tipo definito dall'utente.

Utilizzare un normale ciclo For...Next per l'iterazione degli elementi della matrice.

•	Gli elementi della matrice nel blocco For Each sono stringhe di lunghezza fissa.

Utilizzare un normale ciclo For...Next per l'iterazione degli elementi della matrice.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


For Each può essere reiterata solo in un insieme o in una matrice

Il blocco For Each può essere utilizzato solo con insiemi e matrici. Causa e soluzione dell'errore:

•	È stato specificato per la parte gruppo della sintassi di For Each un oggetto che non è un insieme o una matrice.

Verificare che l'elemento sul quale si desidera eseguire l'iterazione sia stato digitato correttamente e che corrisponda ad un insieme o a una matrice nell'area di validità della parte di codice corrente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


For senza Next

A ciascuna istruzione For deve corrispondere un'istruzione Next. Causa e soluzione dell'errore:

•	Un'istruzione For è utilizzata senza un'istruzione Next corrispondente.

Verificare che all'interno della struttura esterna For...Next non vi sia una struttura For...Next abbinata in modo errato.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Riferimento anticipato a tipo definito dall'utente

Un tipo definito dall'utente deve essere definito prima di potervi fare riferimento. Cause e soluzioni dell'errore:

•	È stata dichiarata una variabile di tipo definito dall'utente prima della definizione del tipo definito dall'utente. Nell'esempio che segue la variabile OtherVar viene dichiarata prima che sia noto il relativo tipo (OtherType):

Type MyType

OtherVar As OtherType

End Type

Type OtherType

WholeVar As Integer

RealVar As Double

End Type

Riposizionare le definizioni di tipo in modo che non si verifichi un riferimento anticipato.

•	Un tipo definito dall'utente è stato nidificato all'interno di se stesso.

Type MyType

MyVar As Integer

OtherVar As MyType

End Type

Rimuovere il tipo nidificato che fa riferimento a se stesso. Ciò si può verificare indirettamente se si nidifica un tipo in un altro tipo in cui è già stato dichiarato il primo. Verificare la definizione di tutti i tipi nidificati per eliminare eventuali duplicazioni.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


La chiamata di funzione a sinistra dell'assegnazione deve restituire Variant o Object

A sinistra dell'assegnazione può essere visualizzata una chiamata di funzione, ma solo se il valore restituito dalla funzione è di tipo Object o Variant. Causa e soluzione dell'errore:

•	Il tipo restituito dalla funzione a sinistra dell'assegnazione non è di tipo Variant o Object.

Modificare il tipo che viene restituito. Se il valore restituito è di tipo Object o di tipo Variant contenente un oggetto, l'assegnazione verrà fatta alla proprietà predefinita dell'oggetto. Se il tipo Variant non è un oggetto, l'assegnazione non avrà alcun effetto.

•	Tutti gli elementi della chiamata sono corretti, ma non è possibile completarla. È possibile, ad esempio, che si stia cercando di impostare una proprietà, impostabile solo in fase di progettazione.

Attivare la modalità di progettazione e impostare la proprietà nella finestra Proprietà. Rimuovere il codice che tenta di impostare la proprietà a livello di programmazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Per la funzione sono state impostate delle restrizioni oppure la funzione utilizza un tipo di automazione non supportato in Visual Basic

Non è possibile accedere a tutte le routine incluse in una libreria dei tipi o in una libreria degli oggetti con tutti i linguaggi di programmazione. È possibile che siano state impostate delle restrizioni per alcune funzioni di una libreria dei tipi o di una libreria degli oggetti per impedire l'utilizzo di linguaggi macro. Cause e soluzioni dell'errore:

•	Si è cercato di utilizzare una funzione che prevede restrizioni a livello di specifiche.

Non è possibile utilizzare la funzione nel programma. Se è disponibile la documentazione dell'oggetto rappresentato nella libreria, verificare se esiste un metodo che offre funzioni equivalenti.

•	Si è cercato di utilizzare una funzione che richiede un tipo di parametro o che ha un tipo di risultato non disponibile in Visual Basic.

In alcuni casi è possibile simulare tipi restituiti con equivalenti di Visual Basic. Provare con i sottotipi del tipo di dati Variant. Questa soluzione potrebbe funzionare inoltre con tipi di parametri non Basic previsti come riferimenti. No è tuttavia possibile passare un tipo di dati Variant per valore nei tentativi di simulazione di un tipo non Basic.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Identificatore troppo lungo

Gli identificatori non possono contenere più di 255 caratteri. Causa e soluzione dell'errore:

•	La lunghezza dell'identificatore supera i 255 caratteri.

Ridurre la lunghezza dell'identificatore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


L'identificatore in corrispondenza del cursore non è un nome di routine

Si è cercato di visualizzare una routine, ma l'identificatore in corrispondenza del punto di inserimento non è un nome di routine. Causa e soluzione dell'errore:

•	L'identificatore non è un nome di routine.

Controllare che il nome dell'identificatore sia stato digitato correttamente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Versione DLL errata

Ogni versione di Visual Basic funziona solo con la libreria a collegamento dinamico (DLL) (Windows) o risorsa codice (Macintosh) corrispondente. Causa e soluzione dell'errore:

•	La versione in uso della DLL o della risorsa codice non corrisponde alla versione prevista da questa applicazione host. Il programma sta tentando di eseguire una chiamata di routine in una DLL o in una risorsa codice, ma la versione della libreria della risorsa codice non è compatibile con Visual Basic o con l'applicazione host.

Procurarsi la versione corretta della libreria o risorsa e verificare che nel percorso le versioni precedenti non precedano quella necessaria.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Versione OLE errata

Le versioni in uso delle librerie a collegamento dinamico (DLL) (Windows) o delle risorse codice (Macintosh)  OLE non corrispondono a quelle previste dall'applicazione host. In Microsoft Windows, l'applicazione ricerca le librerie DLL innanzitutto nella directory corrente, quindi nel percorso predefinito e infine nella directory Windows\System. Causa e soluzione dell'errore:

•	Durante la ricerca, sono state trovate DLL OLE di versioni precedenti prima di quelle previste dall'applicazione host.

È consigliabile evitare di tentare di utilizzare entrambe le versioni delle DLL.

In Macintosh, i file OLE si trovano in genere solo nella cartella Estensioni, pertanto è improbabile che venga generato questo errore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impossibile creare la variabile. La memoria disponibile per la finestra Immediata non è sufficiente.

La memoria nella finestra Immediata è limitata. Causa e soluzione dell'errore:

•	È stata specificata una variabile nella finestra Immediata di cui deve essere creata un'istanza poiché non è stata creata nel contesto del codice del programma.

Eliminare il riferimento alla variabile nella finestra Immediata o dichiarare la variabile nel contesto del codice del programma in modo che non sia necessario crearla nella finestra Immediata.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Memoria insufficiente per salvare le informazioni di annullamento

Dopo avere eseguito questa modifica non sarà possibile scegliere Annulla per ripristinare lo stato corrente. Causa e soluzione dell'errore:

•	La modifica ha dimensioni troppo estese per essere salvata.

Provare a eseguire la modifica per passaggi graduali.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Informazioni del progetto insufficienti per caricare il progetto nella piattaforma o con la versione utilizzata

Quando si salva un progetto, vengono salvate informazioni aggiuntive per permettere il caricamento del progetto in una versione successiva o in una piattaforma diversa. Causa e soluzione dell'errore:

•	Quando si è salvato il progetto è stato visualizzato un errore che indicava che la memoria disponibile non era sufficiente per salvare tutte le informazioni necessarie per caricare il progetto in una versione successiva o in una piattaforma diversa.

Caricare il file nella versione di Visual Basic o nella piattaforma in cui era stato salvato in precedenza e quindi salvarlo nuovamente. Se non vengono visualizzati messaggi di errore durante il salvataggio, dovrebbe essere possibile caricare il progetto nella versione o nella piattaforma corrente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Interfaccia non valida per l'implementazione

Non tutte le interfacce possono essere implementate in Visual Basic. Causa e soluzione dell'errore:

•	L'interfaccia include alcuni elementi che non sono supportati in Visual Basic. Ad esempio, in Visual Basic non ci sono equivalenti per il tipo Integer Long senza segno, in Visual Basic non è possibile definire un parametro di una routine come "solo esterno". Sebbene Visual Basic supporti l'utilizzo del carattere di sottolineatura (_) negli identificatori di Visual Basic, non può implementare un'interfaccia che utilizza caratteri di sottolineatura nei nomi dei membri.

Non è possibile implementare l'interfaccia in Visual Basic.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Modalità di accesso non valida

Nell'istruzione Open è stata specificata una modalità di accesso non consentita per il tipo di file specificato. Cause e soluzioni dell'errore:

•	Si è cercato di aprire un file per Input, specificando una modalità di accesso non valida.

È possibile omettere l'indicazione della modalità di accesso quando si apre un file per l'input, ma se si sceglie di specificarla dovrà essere Read. Le modalità di accesso Write e Read Write non sono consentite per file aperti per Input.

•	Si è cercato di aprire un file per Append, specificando una modalità di accesso non valida.

È possibile omettere l'indicazione della modalità di accesso quando si apre un file per l'accodamento, ma se si sceglie di specificarla dovrà essere Write. Le modalità di accesso Read e Read Write non sono consentite per file aperti per Append.

•	Si è cercato di aprire un file per Output, specificando una modalità di accesso non valida.

È possibile omettere l'indicazione della modalità di accesso quando si apre un file per l'output, ma se si sceglie di specificarla dovrà essere Write. Le modalità di accesso Read e Read Write non sono consentite per file aperti per Output.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Attributo non valido in Sub, Function o Property

Alcuni attributi non sono validi all'interno delle routine. Causa e soluzione dell'errore:

•	Un attributo Public o Private è stato incluso all'interno di una definizione di routine.

Rimuovere l'attributo dalla routine. Per assegnare alla variabile un'area di validità più estesa, spostare la dichiarazione a livello di modulo. Le variabili dichiarate all'interno delle routine sono sempre Private.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Carattere non valido

Il carattere non può essere utilizzato nel contesto corrente. Causa e soluzione dell'errore:

•	È probabile che sia stato utilizzato un carattere non valido nel nome di una variabile, ad esempio una parentesi quadra o un trattino.

Verificare che il nome della variabile corrisponda a quello dichiarato.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Formato dei dati non valido

I dati letti da un file non sono nel formato previsto. Cause e soluzioni dell'errore:

•	Un file di progetto o un file di una libreria degli oggetti possono essere danneggiati o in un formato non riconosciuto.

Procurarsi una nuova versione del file di progetto o del file della libreria degli oggetti.

•	È possibile che si sia cercato di caricare un file exe in un modulo.

Caricare il codice sorgente anziché il file exe.

•	È inoltre possibile che siano stati utilizzati la finestra di dialogo Riferimenti e il Visualizzatore oggetti per aggiungere un riferimento ad un file che non è una libreria degli oggetti valida o che include un progetto Basic in un formato non supportato dall'applicazione host. Nella piattaforma Windows, in Microsoft Excel, ad esempio, non è possibile utilizzare file bas o frm o file di Microsoft Project che includono codice Basic.

Caricare il file nell'applicazione in cui è stato creato, quindi salvarlo in un formato compatibile. Il codice sorgente della libreria degli oggetti, ad esempio, può essere elaborato tramite MkTypLib e QuickBasic, il codice di Visual Basic può essere salvato in formato testo e così via.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Tipo di dati non valido

Alcuni tipi di dati non possono essere assegnati alle costanti. Causa e soluzione dell'errore:

•	Il tipo di una costante è stato dichiarato come tipo definito dall'utente, oggetto o matrice.

Rimuovere la dichiarazione o ridichiarare il tipo come variabile.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Non valido nella finestra Immediata

Alcune istruzioni non sono ammesse nella finestra Immediata. Cause e soluzioni dell'errore:

•	È stata utilizzata un'istruzione dichiarativa. Le istruzioni Const, Declare, Deftipo, Dim, Function, Option Base, Option Explicit, Option Compare, Option Private, Private, Public, le istruzioni di dichiarazione di routine di proprietà (comprese Property Let, Property Set e Property Get) e le istruzioni ReDim, Static, Sub e Type non possono, ad esempio, essere utilizzate nella finestra Immediata.

Rimuovere le istruzioni dichiarative dalla finestra Immediata.

•	È stata utilizzata un'istruzione di controllo di flusso, quale Sub, Function, Property, GoSub, GoTo, Return o Resume.

Rimuovere queste istruzioni dalla finestra Immediata.

•	Non vi è alcun collegamento logico fra righe fisiche separate nella finestra Immediata, pertanto le istruzioni su più righe, quale, ad esempio, un'istruzione di un blocco If, non possono essere eseguite correttamente.

Tali blocchi possono essere digitati su un'unica riga fisica separando ciascuna istruzione con due punti (:). Al contrario, è possibile estendere una singola istruzione su più righe fisiche nella finestra Immediata utilizzando il carattere di continuazione riga, ovvero uno spazio seguito da un carattere di sottolineatura ( _).

•	Si è cercato di eseguire un codice nella finestra Immediata che invalida lo stato corrente del programma e ne richiede la reinizializzazione.

Rimuovere il codice dalla finestra Immediata.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Non valido all'interno di una routine

L'istruzione non può essere inclusa in una routine Sub o Function. Causa e soluzione dell'errore:

•	In una routine compare una delle seguenti istruzioni: Declare, Deftipo, Private, Public, Option Base, Option Compare, Option Explicit, Option Private o Type.

Rimuovere l'istruzione dalla routine. Le istruzioni possono essere utilizzate a livello di modulo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Lunghezza non valida per stringa di lunghezza fissa

Cause e soluzioni dell'errore:

•	Una stringa di lunghezza fissa è stata dichiarata con lunghezza uguale a zero.

Una stringa di lunghezza fissa deve essere composta almeno da un carattere.

•	Una stringa di lunghezza fissa supera il limite di 65.526.

Ridurre la lunghezza specificata per la stringa di lunghezza fissa.

Nota   Le stringhe di lunghezza variabile possono avere dimensioni maggiori ed anche lunghezza zero.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Riferimento alla variabile di controllo Next non valido

La variabile numerica nella parte Next di un ciclo For...Next deve corrispondere alla variabile nella parte For. Causa e soluzione dell'errore:

•	La variabile nella parte Next di un ciclo For...Next è diversa dalla variabile nella parte For. Ad esempio:

For Counter = 1 To 10

MyVar = Counter

Next Count

Controllare l'ortografia della variabile nella parte Next per verificare che corrisponda alla parte For. Verificare inoltre di non aver eliminato inavvertitamente parti del ciclo circostante che utilizza la variabile.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Riferimento non valido o non qualificato

Un identificatore che inizia con un punto è valido solo all'interno di un blocco With. Causa e soluzione dell'errore:

•	L'identificatore inizia con un punto.

Completare la qualificazione dell'identificatore o rimuovere il punto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Non valido all'esterno di una routine

L'istruzione deve essere inclusa all'interno di una routine Sub o Function oppure di una routine di proprietà, quale Property Get, Property Let o Property Set. Causa e soluzione dell'errore:

•	Un'istruzione eseguibile Static o ReDim è utilizzata a livello di modulo.

Static non è necessaria a livello di modulo, in quanto tutte le variabili a livello di modulo sono statiche. A livello di modulo utilizzare l'istruzione Dim anziché ReDim. Per creare una matrice dinamica a livello di modulo, dichiararla con Dim ( ).

Nota   A livello di modulo è possibile utilizzare solo commenti e istruzioni dichiarative, quali Const, Declare, Deftipo, Dim, Option Base, Option Compare, Option Explicit, Option Private, Private, Public e Type. Le istruzioni Sub, Function e Property possono essere utilizzate all'esterno delle relative routine, ma all'interno della dichiarazione di routine.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Utilizzo non valido di ParamArray

Il parametro definito come ParamArray è utilizzato in modo non corretto nella routine. Cause e soluzioni dell'errore:

•	Si è cercato di passare ParamArray come argomento ad un'altra routine che prevede una matrice o una variabile Variant passata ByRef.

Assegnare il parametro ParamArray ad una Variant, quindi passare la Variant.

•	Si è cercato di utilizzare un'istruzione Erase o ReDim con un parametro ParamArray all'interno della stessa routine.

Rimuovere Erase o ReDim. Queste operazioni non possono essere eseguite sul parametro ParamArray.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Nome di routine non valido

Alcune restrizioni per la denominazione delle routine si aggiungono a quelle per la denominazione degli identificatori. Causa e soluzione dell'errore:

•	Si è cercato di definire una routine, ma il nome utilizzato per la routine non è valido in quanto già utilizzato dall'applicazione host per altri scopi. Se, ad esempio, l'applicazione host è Microsoft Excel, non sarà possibile definire una routine con il nome R1C1 in quanto tale identificatore è già utilizzato da Microsoft Excel.

Scegliere un altro nome per la routine.

•	Il nome della routine è uguale a quello di una parola chiave riservata, supera i 255 caratteri o non inizia con una lettera.

Scegliere un altro nome per la routine.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Qualificatore non valido

I qualificatori consentono di evitare ambiguità. Causa e soluzione dell'errore:

•	Il qualificatore non identifica un progetto, un modulo, un oggetto o una variabile di tipo definito dall'utente nell'area di validità corrente.

Controllare che il qualificatore sia stato digitato correttamente e verificare che l'identificatore di qualificazione si trovi all'interno dell'area di validità corrente. Una variabile di tipo definito dall'utente in un modulo Private, ad esempio, è visibile solo all'interno del modulo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


ReDim non valida

Alcune matrici non possono essere ridimensionate. Cause e soluzioni dell'errore:

•	Una variabile è stata dichiarata in modo implicito come Variant e si è cercato di utilizzare ReDim per trasformarla in matrice.

Una variabile di tipo Variant può contenere una matrice, ma se non è dichiarata in modo esplicito, non è possibile utilizzare ReDim per trasformarla in una matrice. Dichiarare la variabile Variant prima di utilizzare ReDim per specificare il numero di elementi che potrà contenere. Nel codice che segue, ad esempio, ReDim AVar(10) genera questo errore, al contrario di ReDim BVar(10):

AVar = 1	' Dichiarazione implicita di AVar.

ReDim AVar(10)	' Determina errore di ReDim non valida.

.

.

.

Dim BVar	' Dichiarazione esplicita di BVar.

ReDim BVar(10)	' Nessun errore.

•	Si è cercato di utilizzare ReDim per modificare più dimensioni di una matrice contenuta in una variabile di tipo Variant.

È possibile utilizzare ReDim per modificare solo l'ultima dimensione di una matrice in una variabile di tipo Variant. Una matrice con più dimensioni ridimensionabili non può essere contenuta in una variabile Variant e dovrà essere dichiarata normalmente.

•	ReDim può essere utilizzata solo per modificare il numero di elementi in una matrice normale, non il tipo degli elementi.

Per disporre di una matrice in cui è possibile modificare il tipo dei vari elementi, utilizzare una matrice contenuta in una variabile Variant. Se la matrice viene dichiarata per prima, la modifica dei tipi e del numero degli elementi può essere eseguita nel modo seguente:

Dim MyVar As Variant	' Dichiara la variabile.

ReDim MyVar(10) As String	' ReDim come matrice di

' sottotipi String.

ReDim MyVar(20) As Integer	' ReDim come matrice di

' sottotipi Integer.

ReDim MyVar(5) As Variant	' ReDim come matrice di

' sottotipi Variant.

•	Si è cercato di utilizzare ReDim con una matrice che è un membro di un oggetto di automazione.

Rimuovere ReDim.

Nota   Se per una determinata variabile non si specifica un tipo, verrà assegnato il tipo predefinito Variant. Ciò, tuttavia, non è sempre evidente. Nel codice riportato di seguito, ad esempio, vengono dichiarate due variabili. La prima, MyVar, è di tipo Variant; la seconda, AnotherVar, è di tipo Integer.

Dim MyVar, AnotherVar As Integer

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Sintassi non valida per le dichiarazioni di costanti di compilazione condizionale

L'immissione di costanti di compilazione condizionale nella finestra di dialogo Opzioni non equivale alla dichiarazione di costanti nel codice. Causa e soluzione dell'errore:

•	È stata utilizzata una sintassi non corretta per l'immissione di una dichiarazione di costante nella finestra di dialogo Opzioni.

L'unica sintassi valida è la semplice assegnazione di un valore intero all'identificatore. Verificare che la sintassi dell'immissione sia la seguente, con ogni costante separata da due punti (:):

nomecostante = [{+ | – }]valoreintero : [{+ | – }]nomecostante = valoreintero [...]

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Carattere di dichiarazione tipo non valido

I caratteri di dichiarazione del tipo sono validi, ma non esistono per tutti i tipi di dati e non sono consentiti in determinate situazioni. Cause e soluzioni dell'errore:

•	Un carattere di dichiarazione del tipo è stato aggiunto ad una variabile dichiarata in un'istruzione Private, Public o Static con una proposizione As.

Rimuovere il carattere di dichiarazione del tipo.

•	Un carattere di dichiarazione del tipo viene aggiunto ad un valore letterale non corrispondente. Questo errore verrà, ad esempio, generato se il carattere & per la dichiarazione del tipo intero Long viene aggiunto ad un valore letterale di un tipo diverso:

10.253&

Rimuovere il carattere di dichiarazione del tipo o sostituirlo con quello corretto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Utilizzo non valido dell'operatore AddressOf

L'operatore AddressOf modifica un argomento per passare l'indirizzo di una funzione anziché passare il risultato della chiamata alla funzione. Causa e soluzione dell'errore:

•	Si è cercato di utilizzare AddressOf con il nome di un metodo di classe.

Solo i nomi di routine Visual Basic in un modulo .bas possono essere modificati con AddressOf. Non è possibile specificare un metodo di classe.

•	Il nome della routine modificato con AddressOf è definito in un modulo di un diverso progetto.

•	Si è cercato di modificare il nome di una funzione di una DLL o di una funzione definita in una libreria dei tipi con AddressOf.

•	Le funzioni di DLL e librerie dei tipi non possono essere modificate con AddressOf.

La definizione della routine deve essere in un modulo nel progetto corrente. Spostare la definizione in un modulo nel progetto corrente oppure includere il modulo corrente nel progetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Utilizzo non valido della parola chiave Me

La parola chiave Me può essere utilizzata nei moduli di classe. Cause e soluzioni dell'errore:

•	La parola chiave Me è stata utilizzata in un modulo standard.

La parola chiave Me non può essere utilizzata in un modulo standard perché un modulo standard non rappresenta un oggetto. Se il codice in questione è stato copiato da un modulo di classe, è necessario sostituire la parola chiave Me con il nome specifico dell'oggetto o del form per mantenere il riferimento originale.

•	La parola chiave Me è stata utilizzata a sinistra di un'assegnazione Set, ad esempio:

Set Me = MyObject	' Genera l'errore "Utilizzo non valido della parola chiave Me".

Rimuovere l'assegnazione Set.

Nota   La parola chiave Me può essere utilizzata a sinistra di un'assegnazione Let e in questo caso viene impostata la proprietà predefinita dell'oggetto rappresentato dalla parola chiave Me. Ad esempio:

Let Me = MyObject	' Assegnazione valida esplicita con Let.

Me = MyObject	' Assegnazione valida con Let implicita.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Utilizzo non valido della parola chiave New

La parola chiave New può essere utilizzata solo con oggetti creabili, ovvero istanze di una classe o oggetti di automazione. Cause e soluzioni dell'errore:

•	Si è cercato di creare una nuova istanza di un elemento che può avere una sola istanza. Ad esempio, si è cercato di creare una nuova istanza di un modulo specificando Module1 in un'istruzione come la seguente:

Dim MyMod As New Module1

Non è possibile creare una nuova istanza, poiché un modulo può avere una sola istanza.

•	Si è cercato di creare un'istanza di un oggetto di automazione, ma l'oggetto non è creabile. Ad esempio, si è cercato di creare una nuova istanza di una casella di riepilogo specificando ListBox in un'istruzione come la seguente:

' Sintassi valida per creare la variabile.

Dim MyListBox As ListBox

Dim MyFormInst As Form

' Sintassi non valida per creare un'istanza dell'oggetto.

Set MyFormInst = New Form

Set MyListBox = New ListBox

ListBox e Form sono nomi di classe e non nomi specifici di oggetti. È possibile utilizzarli per specificare che una variabile sarà un riferimento a un determinato tipo di oggetto, come con le istruzioni Dim indicate sopra che sono valide. Non è invece possibile utilizzarli per creare istanze degli oggetti stessi in un'istruzione Set. Nell'istruzione Set è necessario specificare un oggetto specifico anziché il nome di classe generico:

' Sintassi valida per creare una nuova istanza di un

' form o di una casella di riepilogo.

Set MyFormInst = New Form1

Set MyListBox = New List1

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Utilizzo non valido di oggetto

Si è cercato di utilizzare un oggetto in modo non corretto. Cause e soluzioni dell'errore:

•	È possibile che si sia cercato di interrompere un riferimento ad un oggetto assegnandovi Nothing, ma omettendo la parola chiave Set:

MyObject = Nothing

Per impostare un oggetto su Nothing, utilizzare l'istruzione Set. Supponendo che MyObject sia un oggetto, è necessario impostarlo su Nothing con l'istruzione Set:

Set MyObject = Nothing

L'omissione della parola chiave Set equivale ad utilizzare implicitamente Let e pertanto verrà eseguito un tentativo di assegnazione di valore anziché di assegnazione di riferimento. Nothing non può essere utilizzato in un'assegnazione di valore.

•	Si è cercato di utilizzare Nothing in un'espressione.

Riscrivere l'espressione senza Nothing.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Utilizzo non valido di Property

Si sta utilizzando un tipo di routine Property in una posizione in cui è previsto che ne venga utilizzata una di diverso tipo. Cause e soluzioni dell'errore:

•	Si sta cercando di scrivere in una proprietà di sola lettura.

Se l'unica routine Property definita per la proprietà è una routine Property Get, non è possibile assegnare un valore alla proprietà. Scrivere una routine Property Let appropriata oppure non cercare di scrivere la proprietà.

•	Si sta cercando di leggere una proprietà che è di sola scrittura.

Se l'unica routine Property definita per la proprietà è una routine Property Let, non è possibile leggere il valore della proprietà. Scrivere una routine Property Get appropriata oppure non cercare di scrivere la proprietà.

•	Si sta cercando di impostare un riferimento ma la proprietà ha solo routine Property Get o Property Let.

Scrivere una routine Property Set per la proprietà oppure non cercare di impostarvi un riferimento.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Espressione di controllo non valida

L'espressione di controllo specificata non è un'espressione valida. Causa e soluzione dell'errore:

•	La sintassi dell'espressione di controllo non è corretta.

Controllare la sintassi di tutti i componenti dell'espressione. La sintassi di un'espressione di controllo corrisponde alle impostazioni internazionali del progetto in cui viene definita.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Etichetta non definita

Causa e soluzione dell'errore:

•	È stato fatto riferimento a un'etichetta di riga o ad un numero di riga, ad esempio un'istruzione GoTo, ma l'etichetta o il numero non rientrano nell'area di validità del riferimento.

L'etichetta deve trovarsi all'interno della routine contenente il riferimento. Le etichette di riga sono visibili solo all'interno delle rispettive routine.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Impostazione di lingua/paese modificata

Causa e soluzione dell'errore:

•	È stata modificata l'impostazione predefinita di lingua e paese per l'ambiente Visual Basic.

Sebbene questa operazione sia consentita, potrebbe causare problemi.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


La riga non è un'istruzione eseguibile

Le dichiarazioni e i commenti non sono istruzioni eseguibili. Causa e soluzione dell'errore:

•	È stato scelto il comando Esegui fino al cursore, ma il cursore non si trovava su una riga contenente un'istruzione eseguibile.

Posizionare il cursore su un'istruzione eseguibile vicino alla riga corrente.

Per ulteriori informazioni, scegliere Esegui fino al cursore dal menu Esegui e quindi premere F1 (in Windows) o AIUTO (in Macintosh).


Riga troppo lunga

Una riga fisica di codice di Visual Basic può essere composta da un massimo di 1023 caratteri. Causa e soluzione dell'errore:

•	Una riga contiene un numero eccessivo di caratteri.

È possibile creare una riga logica più lunga unendo righe fisiche con un carattere di continuazione di riga, ovvero uno spazio seguito da un carattere di sottolineatura ( _). Con i caratteri di continuazione di riga è possibile unire fino a 25 righe fisiche per formare una singola riga logica o 24 caratteri di continuazione di riga consecutivi. Una riga logica, quindi, può contenere potenzialmente fino a 10.230 caratteri. Oltre questo limite sarà necessario suddividere la riga in singole istruzioni o assegnare alcune espressioni a variabili intermedie.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Loop senza Do

Un ciclo Do...Loop deve cominciare con un'istruzione Do. Causa e soluzione dell'errore:

•	È presente un blocco di ciclo non completo nidificato all'interno di un altro ciclo.

Verificare che sia stata utilizzata la corretta sintassi Do...Loop.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


LSet ammessa solo in stringhe o tipi definiti dall'utente

LSet viene utilizzata per allineare a sinistra i dati all'interno di stringhe e variabili di tipo definito dall'utente. Cause e soluzioni dell'errore:

•	La variabile specificata non è una stringa o un tipo definito dall'utente.

LSet non può essere utilizzata per assegnare in blocco una matrice ad un'altra matrice. Utilizzare un ciclo per assegnare ciascun elemento singolarmente.

•	Si è cercato di utilizzare LSet con un oggetto.

LSet può essere inoltre utilizzata per assegnare gli elementi di una variabile di tipo definito dall'utente agli elementi di una variabile di tipo definito dall'utente diversa ma compatibile. Gli oggetti sono simili alle variabili di tipo definito dall'utente, ma non è possibile utilizzare LSet con gli oggetti. Analogamente, non è possibile utilizzare LSet su variabili di tipo definito dall'utente contenenti stringhe, oggetti o valori Variant.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


LSet non ammessa

LSet viene utilizzata per allineare a sinistra i dati all'interno di stringhe e variabili di tipo definito dall'utente. Causa e soluzione dell'errore:

•	Si è cercato di utilizzare LSet per variabili di tipo definito dall'utente contenenti stringhe, oggetti o valori Variant.

Assegnare i singoli elementi da questa variabile di tipo definito dall'utente ad un'altra variabile.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Interfaccia non valida per Implements. L'interfaccia è basata su un'altra interfaccia pura con metodi senza restrizioni

Causa e soluzione dell'errore:

•	L'interfaccia si basa direttamente o indirettamente su un'interfaccia pura che include metodi senza restrizioni.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Interfaccia non valida per Implements. L'interfaccia contiene campi di dati

Causa e soluzione dell'errore:

•	L'interfaccia o la classe contengono campi dati.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Interfaccia non valida per Implements. Il nome del metodo include un carattere di sottolineatura

L'istruzione Implements viene utilizzata per specificare un'interfaccia o una classe che verrà implementata nel modulo della classe in cui viene visualizzata. Causa e soluzione dell'errore:

•	L'interfaccia o la classe contiene il nome di un metodo che contiene un carattere di sottolineatura.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Interfaccia non valida per Implements. Il metodo non restituisce HRESULT

L'istruzione Implements viene utilizzata per specificare un'interfaccia o una classe che verrà implementata nel modulo della classe in cui compare. Causa e soluzione dell'errore:

•	L'interfaccia o la classe include il nome di un metodo che restituisce un valore diverso dal tipo HRESULT.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Interfaccia non valida per Implements. Per il metodo è stato specificato il parametro out a sé stante o il parametro LCID

L'istruzione Implements viene utilizzata per specificare un'interfaccia o una classe che verrà implementata nel modulo della classe in cui compare. Causa e soluzione dell'errore:

•	L'interfaccia o la classe include un metodo che contiene un parametro di tipo a sé stante o LCID.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Interfaccia non valida per Implements. Per il metodo è stato specificato un parametro con troppi livelli di riferimenti indiretti

L'istruzione Implements viene utilizzata per specificare un'interfaccia o una classe che verrà implementata nel modulo della classe in cui compare. Causa e soluzione dell'errore:

•	L'interfaccia o la classe include un metodo che contiene un parametro con troppi livelli di riferimenti indiretti. Utilizza, ad esempio, riferimenti indiretti doppi di tipo Integer o riferimenti tripli di tipi di dati definiti dall'utente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Interfaccia non valida per Implements. Il metodo utilizza tipi non supportati nel linguaggio Visual Basic

L'istruzione Implements viene utilizzata per specificare un'interfaccia o una classe che verrà implementata nel modulo della classe in cui compare. Causa e soluzione dell'errore:

•	L'interfaccia o la classe include un metodo non supportato in Basic.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


Interfaccia non valida per Implements. L'interfaccia non è basata su IUnknown

L'istruzione Implements viene utilizzata per specificare un'interfaccia o una classe che verrà implementata nel modulo della classe in cui compare. Causa e soluzione dell'errore:

•	L'interfaccia o la classe include un metodo che utilizza tipi di dati non supportati in Basic.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) o AIUTO (in Macintosh).


È stato raggiunto il numero massimo possibile di espressioni di controllo

Esiste un limite al numero di espressioni di controllo che è possibile inserire nella finestra Espressioni di controllo. Causa e soluzione dell'errore:

•	Nella finestra Espressioni di controllo è stato inserito il numero massimo consentito di espressioni di controllo.

È necessario rimuovere un'espressione di controllo per ciascuna espressione da aggiungere o visualizzare il valore di cui si desiderano informazioni nella finestra Immediata.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Identificatore del membro già esistente nel modulo di oggetto da cui questo modulo di oggetto deriva

Gli identificatori utilizzati per i membri di un modulo di oggetto non possono essere in conflitto con nomi già utilizzati in un modulo di oggetto da cui derivano. Causa e soluzione dell'errore:

•	Un identificatore di routine o di un membro dei dati nel modulo dell'oggetto utilizza un identificatore già utilizzato nel modulo dell'oggetto da cui deriva. Ad esempio, per un form è impostata la proprietà BackColor e pertanto il codice seguente genererebbe questo errore:

' Il form ha già una proprietà BackColor.

Dim BackColor As Integer	' Genera l'errore.

Function BackColor()	' Genera l'errore.

End Function

Modificare l'identificatore in conflitto con l'identificatore del membro nel modulo dell'oggetto.

Nota   I nomi che seguono non possono essere utilizzati come nomi di proprietà o metodi perché fanno parte delle interfacce IUnknown e IDispatch: QueryInterface, AddRef, Release, GetTypeInfoCount, GetTypeInfo, GetIDsOfNames, Invoke. L'utilizzo di questi nomi genera un errore di compilazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Metodo non valido senza un oggetto adatto

Non tutti i metodi possono essere eseguiti da tutti gli oggetti. Causa e soluzione dell'errore:

•	È stato chiamato un metodo senza specificare un oggetto e il metodo non è valido per l'oggetto implicito. Ad esempio, non è possibile utilizzare il metodo Line in un modulo standard senza un qualificatore di oggetto valido perché un modulo standard non può visualizzare l'output del metodo Line.

Qualificare la chiamata del metodo in modo esplicito con un oggetto che accetta il metodo. Ad esempio, è possibile specificare un form o una casella immagine con il metodo Line.

Nota   Altri metodi che richiedono un qualificatore di oggetto esplicito quando sono utilizzati in un modulo standard sono Circle, Print e PSet.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Parentesi di chiusura mancante

In un'istruzione, a ciascuna parentesi aperta deve corrispondere una parentesi chiusa. Causa e soluzione dell'errore:

•	Per una parentesi aperta non esiste la corrispondente parentesi chiusa.

Aggiungere la parentesi chiusa mancante.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare il modulo

I moduli non vengono caricati da un riferimento nel codice, devono infatti essere parte di un progetto. Causa e soluzione dell'errore:

•	Il modulo richiesto non esiste nel progetto specificato. Questo errore viene generato, ad esempio, dall'istruzione MyModule.SomeVar = 5 quando MyModule non è visibile nel progetto MyProject.

Consultare la documentazione dell'applicazione host per informazioni su come includere il modulo nel progetto.


Modulo troppo grande

Un modulo contiene codice nel progetto. Causa e soluzione dell'errore:

•	C'è troppo codice nel modulo.

Creare un nuovo modulo e spostare alcune delle routine da questo modulo in un modulo nuovo. Se il modulo corrente contiene dichiarazioni di dati a livello di modulo che devono essere visibili per le routine nel nuovo modulo, dichiarare i dati come Public.

Nota   I commenti non vengono inclusi nel conteggio delle righe del codice e pertanto l'eliminazione dei commenti non consente di evitare questo errore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Deve essere la prima istruzione della riga

Alcune parole chiave non possono essere inserite all'inizio di una riga di codice. Cause e soluzioni dell'errore:

•	Le istruzioni Sub, Function o Property sono precedute nella stessa riga da un'altra istruzione.

Le istruzioni Sub, Function e Property devono sempre essere le prime istruzioni della riga in cui sono utilizzate, a meno che non siano precedute dalle parole chiave Public, Private o Static.

•	Le istruzioni End If, Else e ElseIf sono state specificate insieme a un'altra istruzione sulla stessa riga.

End If, Else o ElseIf (solo se utilizzate in una struttura a blocco If) devono sempre essere le prime istruzioni della riga in cui sono utilizzate.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Nome già utilizzato per modulo, progetto o libreria degli oggetti esistente

I moduli, le librerie degli oggetti e i progetti con riferimenti di un progetto devono avere nomi univoci. Cause e soluzioni dell'errore:

•	Il nome del modulo, progetto o libreria degli oggetti a cui viene fatto riferimento nel progetto è già stato utilizzato. Le estensioni dei nomi dei file non sono considerate parte del nome e pertanto non possono essere utilizzate per distinguere i file.

Modificare il nome del riferimento al modulo, progetto o libreria degli oggetti già esistente.

•	È stato aggiunto un riferimento a un progetto o a una libreria degli oggetti il cui nome del file (senza estensione) è uguale al nome di uno dei moduli del progetto corrente.

Modificare il nome del modulo o il nome del file che non può essere aggiunto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Argomento predefinito già specificato

Un determinato argomento predefinito  può essere utilizzato una sola volta nell'elenco degli argomenti di ciascuna chiamata di routine. Cause e soluzioni dell'errore:

•	Lo stesso argomento predefinito è stato specificato più volte in una singola chiamata. Se, ad esempio, la routine MySub prevede gli argomenti predefiniti Arg1 e Arg2, la seguente chiamata genererà questo errore:

Call MySub(Arg1 := 3, Arg1 := 5)

Eliminare uno degli argomenti ripetuti.

•	Lo stesso argomento è stato specificato sia in base alla posizione che con un argomento predefinito. Esempio:

Call MySub(1, Arg1 := 3)

Eliminare uno degli argomenti ripetuti.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Argomenti predefiniti non ammessi

Gli argomenti predefiniti non possono essere utilizzati in tutte le situazioni. Cause e soluzioni dell'errore:

•	È stato specificato un argomento predefinito come indice di matrice. Esempio:

MyVar = MyArray(MyNamedArg := 1)

Per l'indice di matrice utilizzare una normale espressione di costante o variabile.

•	È stato specificato un argomento predefinito con un oggetto. Esempio:

MyVar = MyObject(MyNamedArg := 1)

Se l'oggetto richiede un argomento, utilizzare una normale espressione di costante o variabile. Se, ad esempio, il valore predefinito di oggetto è un metodo, il nome dell'oggetto rappresenta il metodo predefinito. Se richiede argomenti, specificarli in base alla posizione.

•	È stato specificato un argomento predefinito utilizzando un nome esterno:

MyVar = [MyName](MyNamedArg := 1)

Se il nome esterno richiede un argomento, utilizzare una normale espressione di costante o variabile.

•	È stato specificato un argomento predefinito utilizzando un membro della struttura dati di un oggetto. Esempio:

MyVar = [MyObject].MyProperty(MyNamedArg := 1)

Se il membro della struttura dati richiede un argomento, utilizzare una normale espressione di costante o variabile.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Next senza For

Un'istruzione Next deve sempre essere preceduta da un'istruzione For. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione Next senza la corrispondente istruzione For.

Controllare le altre strutture di controllo all'interno della struttura For...Next e verificare che siano abbinate correttamente. Questo errore viene generato se, ad esempio, all'interno della struttura For...Next è presente un'istruzione If senza la corrispondente istruzione End If.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Nessun testo selezionato

Per eseguire questa operazione è necessario selezionare del testo. Causa e soluzione dell'errore:

•	È stata avviata un'operazione di ricerca o sostituzione senza prima selezionare alcun testo.

In alcune applicazioni host è possibile specificare l'area di validità della selezione per la ricerca e la sostituzione di testo anche se non è stato selezionato alcun testo. Per selezionare del testo, posizionare il cursore all'inizio della selezione desiderata, quindi tenendo premuto MAIUSC premere un tasto di direzione o fare clic alla fine del testo che si desidera selezionare. Se non si desidera eseguire alcuna ricerca, annullare l'opzione di selezione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Memoria insufficiente per salvare l'intero progetto

Quando si salva un progetto vengono in genere salvate informazioni aggiuntive per permettere il caricamento del progetto in una versione successiva del programma o in una piattaforma diversa. Causa e soluzione dell'errore:

•	La memoria disponibile non è sufficiente per salvare le informazioni che saranno necessarie per caricare il progetto in una versione successiva di Visual Basic o in una diversa piattaforma.

Se si prevede di aprire il progetto in una versione successiva di Visual Basic o in un'altra piattaforma, chiudere alcune applicazioni e riprovare a salvare.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Non è stata selezionata un'espressione di controllo

Quando si sceglie il comando Controllo immediato deve essere stata selezionata un'espressione. Causa e soluzione dell'errore:

•	Prima di scegliere il comando Controllo immediato non è stata selezionata alcuna espressione.

Prima di scegliere il comando Controllo immediato, evidenziare un'espressione di controllo nella finestra del codice.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Funzione della libreria degli oggetti non supportata

Una libreria degli oggetti può includere caratteristiche che non hanno un equivalente in Visual Basic. Causa e soluzione dell'errore:

•	Si è cercato di accedere a un tipo di dati o funzione di una libreria degli oggetti non supportati da Visual Basic.

Contattare il creatore della libreria degli oggetti per ulteriori informazioni sull'utilizzo della libreria degli oggetti e sugli strumenti necessari.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare la libreria degli oggetti per Visual Basic, Applications Edition

La libreria degli oggetti di Visual Basic, Applications Edition non è più un file autonomo ma è integrata nella libreria a collegamento dinamico (DLL).

È possibile che in circostanze straordinarie sia necessaria una versione precedente della libreria degli oggetti (vaxxx.olb o vaxxxx.olb) corrispondente alla lingua del progetto e che tale libreria non sia disponibile. Cause e soluzioni dell'errore:

•	La libreria degli oggetti manca completamente, non è nella directory prevista o la versione non è corretta.

Controllare il disco per assicurarsi che la libreria degli oggetti sia nella directory corretta come specificato nella documentazione dell'applicazione host.

Se la libreria mancante è una versione in lingua installata dall'applicazione host, la soluzione più semplice potrebbe essere quella di rieseguire il programma di installazione. Se il progetto richiede una libreria degli oggetti in una lingua diversa da quella fornita dall'applicazione host (ad esempio se si riceve un programma scritto in un computer con impostazioni di lingua diverse) verificare che il progetto includa la versione corretta della libreria degli oggetti di Visual Basic e che il file sia installato nella posizione corretta.

Le applicazioni possono supportare diverse versioni in diverse lingue delle librerie di oggetti. Per individuare la versione corretta, visualizzare la finestra di dialogo Riferimenti e quindi controllare la lingua indicata nella parte inferiore della finestra di dialogo.

Esistono diverse versioni di librerie di oggetti per ogni piattaforma. Se i progetti vengono spostati da Macintosh a Windows, ad esempio, è necessario che la versione corretta (lingua e piattaforma) della libreria a cui si fa riferimento sia disponibile nella posizione specificata nella documentazione dell'applicazione host. Si noti che alcuni codici di lingua sono composti da due caratteri ed altri da tre caratteri.

Il nome del file della libreria degli oggetti di Visual Basic è composto come segue:

•	Windows: Codice applicazione + Codice lingua + [Versione].olb. Ad esempio:

Vafr2.olb era il nome della versione 2 della libreria degli oggetti di Visual Basic, Applications Edition in lingua francese.

•	Macintosh: Nome applicazione Codice lingua [Versione] olb. Ad esempio:

VA FR 2 OLB era il nome della versione 2 della libreria degli oggetti di Visual Basic, Applications Edition in lingua francese.

Nel caso non sia possibile trovare una libreria o un progetto mancanti nel sistema, è consigliabile rivolgersi all'autore del progetto di riferimento. Se la libreria mancante è una libreria di oggetti di un'applicazione Microsoft è possibile ottenerla richiedendola a Microsoft nei seguenti modi:

•	Se si ha accesso ai servizi elettronici di assistenza tecnica Microsoft, vedere la sezione relativa al supporto tecnico in questo file della Guida. Nella sezione relativa ai servizi elettronici vengono fornite le istruzioni per accedere al servizio appropriato.

•	Se non si ha accesso ai servizi elettronici di assistenza tecnica Microsoft, le librerie degli oggetti Microsoft sono disponibili su richiesta come integrazione dell'applicazione. Nella sezione relativa al supporto tecnico in questo file della Guida sono inoltre disponibili informazioni su come contattare il servizio di assistenza locale Microsoft.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Libreria degli oggetti non registrata

La libreria degli oggetti di Visual Basic, Applications Edition non è più un file autonomo ma è integrata nella libreria a collegamento dinamico (DLL).

Nelle versioni precedenti, all'avvio di un'applicazione che utilizza Visual Basic, Applications Edition venivano caricate determinate librerie degli oggetti. Causa e soluzione dell'errore:

•	Si è cercato di caricare una versione precedente della libreria degli oggetti di Visual Basic, Applications Edition (vaxxx.olb) oppure librerie degli oggetti dell'applicazione host. Non è stato possibile, tuttavia, trovare la versione in lingua corretta di tali librerie di oggetti nel registro di configurazione del sistema.

Registrare nuovamente l'applicazione. In Macintosh, eliminare il file vba.ini nella cartella Preferenze e quindi riavviare l'applicazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impostazione di lingua della libreria degli oggetti non compatibile con il progetto corrente

Non è stato possibile aggiungere il riferimento. Causa e soluzione dell'errore:

•	Le impostazioni internazionali della libreria degli oggetti a cui è stato fatto riferimento non sono compatibili con quelle del progetto corrente. Il riferimento non è stato aggiunto. Per utilizzare la libreria degli oggetti, è necessario creare un progetto con impostazioni internazionali compatibili.

Provare a registrare sia Visual Basic, Applications Edition che l'applicazione host per la lingua desiderata. La libreria degli oggetti sarà quindi disponibile nella finestra di dialogo Riferimenti.

Nota   Se Visual Basic è l'applicazione host, non è possibile modificare l'impostazione della lingua di un progetto. Le librerie degli oggetti utilizzate devono essere compatibili con l'impostazione dell'inglese americano.


Tipo non supportato in Visual Basic

Alcuni tipi non sono supportati in Visual Basic. Causa e soluzione dell'errore:

•	Un tipo utilizzato nel programma in uso non ha un equivalente in Visual Basic, Applications Edition. In Visual Basic, ad esempio, non sono supportati i tipi puntatore o intero senza segno, pertanto l'errore viene generato se si cerca di creare una variabile da una libreria degli oggetti con uno di questi tipi. Nell'esempio riportato di seguito, anche se Rainbow è una struttura valida, non sarà possibile creare una variabile di quel tipo:

Dim MyVar As Rainbow	' Genera l'errore.

Se il tipo è invece un tipo di parametro valido per una determinata funzione di una libreria degli oggetti, significa che non è possibile creare una variabile di quel tipo nel codice. Anche se non è sempre possibile dichiarare variabili con il tipo di dati specificato nella documentazione dell'oggetto, è tuttavia spesso disponibile un equivalente Visual Basic. Ad esempio, sebbene in Visual Basic non sia previsto un tipo puntatore, è possibile passare a una funzione API un puntatore a una funzione utilizzando l'operatore AddressOf. I sottotipi del tipo Variant possono spesso essere utilizzati come equivalenti di tipi non direttamente disponibili in Visual Basic. In alcuni casi, tuttavia, non esistono equivalenti, come ad esempio per il tipo puntatore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Dopo End Sub, End Function o End Property sono ammessi solo commenti

All'esterno delle routine è possibile utilizzare solo commenti, istruzioni e dichiarazioni. Causa e soluzione dell'errore:

•	È stato inserito codice eseguibile all'esterno di una routine.

Le righe non dichiarative esterne a una routine devono iniziare con un delimitatore di commento, ovvero un apostrofo. Le istruzioni dichiarative devono precedere la prima dichiarazione della routine. Durante l'esecuzione del codice, i commenti vengono ignorati.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


L'argomento facoltativo deve essere Variant

Agli argomenti facoltativi è possibile assegnare qualsiasi tipo di dati intrinseco ma deve essere un tipo con un solo valore predefinito. Causa e soluzione dell'errore:

•	È stato specificato l'argomento Optional in un parametro che non ha un valore predefinito, ad esempio una matrice.

Assicurarsi che per qualsiasi argomento specificato come Optional esista un valore predefinito.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Option Private Module non è permessa in un modulo di oggetto

Option Private Module rende il contenuto di un modulo non disponibile per altri progetti, pur mantenendone la disponibilità per il progetto corrente. Causa e soluzione dell'errore:

•	L'istruzione Option Private Module è inserita in un modulo di oggetto.

Rimuovere l'istruzione Option Private Module dal modulo. I moduli di oggetto sono Option Private Module per impostazione predefinita. Non è possibile modificare l'impostazione predefinita dal codice. Consultare la documentazione dell'applicazione host per informazioni su come impostare una visibilità più ampia per i membri di moduli di oggetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Memoria esaurita. Alcune espressioni di controllo potrebbero essere state eliminate

Quando viene esaurita la memoria disponibile, le espressioni di controllo vengono eliminate per liberare memoria e consentire quindi il ripristino delle normali condizioni. Causa e soluzione dell'errore:

•	Sono state caricate troppe applicazioni, progetti o moduli.

Rimuovere dalla memoria tutti gli elementi non necessari, comprese le applicazioni, i progetti o i moduli eventualmente caricati.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Risorse esaurite

I tipi di risorsa "handle" vengono utilizzati internamente per l'esecuzione di numerose operazioni. Causa e soluzione dell'errore:

•	Nel codice è stato raggiunto il numero massimo di risorse.

Salvare, chiudere e caricare nuovamente il codice. Se viene visualizzato lo stesso messaggio di errore, ridurre il numero di oggetti a cui si fa riferimento nel codice.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


ParamArray deve essere dichiarata come matrice di tipo Variant

Ciascun argomento di un parametro ParamArray può essere associato a un tipo di dati diverso. Il parametro stesso deve quindi essere dichiarato come una matrice di tipo Variant. È inoltre possibile specificare per ParamArray qualsiasi numero di argomenti. Quando viene eseguita una chiamata, ciascun argomento specificato nella chiamata diventa un elemento corrispondente della matrice Variant. Esempio:

Sub MySub(ParamArray VarArg())

. . .

End Sub

Call MySub ("Primo arg", 2, 3.54)

Cause e soluzioni dell'errore:

•	Nella definizione della routine, il parametro ParamArray viene definito come una matrice di tipo diverso da Variant.

Ridichiarare il tipo di parametro come una matrice di elementi Variant.

•	Per il parametro ParamArray non è stato specificato alcun tipo di dati. La definizione della routine rientra tuttavia nell'area di validità di un'istruzione Deftipo e pertanto il parametro viene dichiarato implicitamente come associato a un tipo di dati diverso da Variant.

Nella specificazione del parametro ParamArray utilizzare una proposizione esplicita As Variant.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Consultare il file Leggimi per ulteriori informazioni su questo errore

Alcune informazioni relative al prodotto si sono rese disponibili dopo il completamento della Guida in linea. Per trovare informazioni su tali argomenti, consultare il file Leggimi dell'applicazione host.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile utilizzare i tipi Enum e i tipi definiti dall'utente privati come parametri o tipi restituiti per routine pubbliche, membri pubblici di dati o campi di tipi pubblici definiti dall'utente

Una routine Public è visibile per tutti i moduli in un progetto, mentre un tipo Private Enum è visibile solo all'interno del modulo di appartenenza. Causa e soluzione dell'errore:

•	La routine Public è in una classe Public ma restituisce un valore o ha un parametro definito in un modulo standard o in una classe Private.

Dichiarare l'Enum Public. Deve essere in un modulo di classe.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Routine troppo grande

Il codice compilato di una routine non può avere dimensioni maggiori di 64 KB. Causa e soluzione dell'errore:

•	Il codice compilato di questa routine supera i 64 KB.

Suddividere questa routine e altre eventuali routine di grandi dimensioni, in due o più routine di dimensioni più ridotte.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il progetto contiene troppi nomi di routine, variabili e costanti

I nomi delle routine, delle variabili, delle costanti e dei parametri di un progetto vengono memorizzati in una tabella dei nomi. Causa e soluzione dell'errore:

•	Nella tabella dei nomi del progetto vi sono più di 32.768 nomi.

È possibile che la tabella dei nomi contenga alcuni duplicati temporanei. È possibile comprimere la tabella dei nomi salvando il progetto su un disco e quindi chiudendolo. Se il problema persiste dopo la riapertura del progetto, ridurre il numero dei nomi riutilizzando nomi di variabili locali in più routine e quindi comprimere la tabella salvando, chiudendo e quindi riaprendo il progetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare il progetto

Non è stato possibile trovare il progetto. Causa e soluzione dell'errore:

•	È impossibile trovare il progetto con il nome specificato.

Controllare che il nome del progetto sia stato digitato correttamente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Nome qualificato non ammesso nell'area di validità del modulo

In determinate circostanze, alcune applicazioni host non consentono chiamate di routine che includono nomi qualificati. Causa e soluzione dell'errore:

•	In una chiamata di routine è stato specificato il nome di un modulo utilizzando la notazione con punto (qualificatore.elemento).

Se viene riportato questo errore, è probabile che l'applicazione host conosca già il qualificatore specificato e che l'informazione non sia pertanto necessaria. In questo caso, è sufficiente omettere il qualificatore. Consultare la documentazione dell'applicazione host per individuare eventuali limitazioni relative ai nomi qualificati.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il qualificatore deve essere un insieme

L'utilizzo del punto esclamativo tra due identificatori è specifico degli insiemi. Causa e soluzione dell'errore:

•	Il nome a sinistra del punto esclamativo (!) non è il nome di un insieme.

Se il nome deve rappresentare un insieme, controllare che sia scritto correttamente. Il punto esclamativo rappresenta inoltre il carattere di dichiarazione del tipo di dati Single. Se il nome non rappresenta un insieme, il carattere di dichiarazione del tipo ! aggiunto al nome di una variabile potrebbe essere stato unito a un altro nome.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Intervallo senza valori

Esistono limiti alla modalità di specificazione del numero di elementi in una matrice. Causa e soluzione dell'errore:

•	I limiti della matrice sono stati specificati in modo non corretto. Gli intervalli riportati di seguito, ad esempio, non sono validi:

Dim MyArray(10 To -5)	' Ordine decrescente non consentito.

Dim MyArray(0 To 0)	' Nessun elemento nella matrice.

Controllare che la sintassi sia corretta. L'intervallo riportato di seguito, ad esempio, è valido:

Dim MyArray(-5 To 10)

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


RSet ammessa solo in stringhe

L'istruzione RSet viene utilizzata per allineare a destra i dati stringa inclusi in stringhe di lunghezza fissa o variabile. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione RSet in una variabile diversa da una stringa.

Se possibile, convertire la variabile in una stringa. In caso contrario, non utilizzare RSet.

Nota   L'istruzione RSet può essere utilizzata per assegnare gli elementi di una variabile di tipo definito dall'utente agli elementi di un tipo definito dall'utente diverso, ma compatibile. Non è tuttavia consigliabile eseguire questo tipo di assegnazione in quanto potrebbero non essere trasferibili.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore di run-time <numero>:

Questo errore è definito dall'utente. Causa e soluzione:

•	È stato generato un errore che non corrisponde a un errore di Visual Basic.

Per la gestione dell'errore, consultare la documentazione dell'oggetto o la libreria degli oggetti che ha generato l'errore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Stringa di ricerca troppo lunga o complessa

Esistono limiti alle capacità di abbinamento di Visual Basic. Causa e soluzione dell'errore:

•	La stringa di ricerca specificata è troppo lunga oppure la combinazione di specifiche con caratteri jolly non è comprensibile.

Accorciare o semplificare la stringa di ricerca e riprovare.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


È necessario specificare una stringa di ricerca

Nelle operazioni di ricerca, è necessario specificare una stringa di ricerca. Causa e soluzione dell'errore:

•	È stata avviata un'operazione di ricerca senza specificare una stringa di confronto.

È necessario specificare la stringa di ricerca. Una stringa di lunghezza zero ("") può essere utilizzata come stringa di sostituzione, mentre non ha alcun significato come stringa di ricerca.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare il testo di ricerca

Non è stato trovato alcun testo. Cause e soluzioni dell'errore:

•	Tra il punto iniziale e il punto finale dell'area di validità della ricerca non è stato trovato alcun testo che soddisfi i criteri di ricerca specificati.

Per poter continuare la ricerca, è possibile ampliare l'area di validità della ricerca.

•	Nell'espressione di ricerca è stata omessa la parentesi aperta.

Inserire la parentesi aperta.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Seek non riuscita. Impossibile leggere/scrivere nel disco

Le istruzioni Seek vengono eseguite direttamente sul disco. Cause e soluzioni dell'errore:

•	Si è cercato di leggere un disco o un file protetto da scrittura, di sola lettura o bloccato.

Rimuovere la protezione da scrittura, modificare l'attributo di sola lettura o sbloccare il disco o file. Se il file è bloccato da un altro processo, non è possibile sbloccarlo.

•	Il file non è più disponibile, come nel caso in cui un disco rimovibile sia stato rimosso fisicamente.

Se il file è stato spostato in un altro disco, è possibile accedere al file dal disco in cui è installato. In caso contrario, non è possibile accedere al file.

•	Si è cercato di leggere da un file di progetto, una libreria degli oggetti o una libreria dei tipi, ma il file è danneggiato.

È necessario utilizzare un'altra copia della libreria o del progetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Select Case senza End Select

Ciascuna istruzione Select Case deve terminare con un'istruzione End Select. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione Select Case senza la corrispondente istruzione End Select.

Controllare se all'interno della struttura più esterna Select Case...End Select esiste una struttura Select Case...End Select abbinata non correttamente. Nel caso di istruzioni Select Case nidificate, deve essere specificata per ciascuna di esse un'istruzione End Select corrispondente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


L'espressione di controllo selezionata non è valida

Non è sempre possibile selezionare una espressione di controllo valida. Cause e soluzioni dell'errore:

•	È stato scelto il comando Controllo immediato, ma l'espressione selezionata non è valida. Non è possibile, ad esempio, inserire un'espressione di controllo in un commento o in una chiamata di routine Sub.

Selezionare un'espressione valida oppure scegliere Aggiungi espressione di controllo e digitare un'espressione valida.

•	La sintassi del codice dell'espressione di controllo deve corrispondere alle impostazioni internazionali del progetto che definisce l'espressione per il controllo.

Riscrivere l'espressione in modo che corrisponda alle impostazioni internazionali.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il comando Imposta istruzione successiva può essere applicato solo alle righe eseguibili all'interno della routine corrente

Il comando Imposta istruzione successiva consente di specificare il punto in cui dovrà essere ripresa l'esecuzione del programma che è stato sospeso. Cause e soluzioni dell'errore:

•	La riga in cui è posizionato il cursore quando si sceglie questo comando non include alcuna istruzione eseguibile.

Posizionare il cursore su una riga che include un'istruzione eseguibile, quindi riprovare. Dichiarazioni, etichette di riga e commenti non sono eseguibili e pertanto non possono essere la destinazione del comando Imposta istruzione successiva.

•	La riga in cui è posizionato il cursore quando si sceglie questo comando non è inclusa nella routine in esecuzione.

Posizionare il cursore su una riga della routine in esecuzione.


Necessario Share.exe

All'avvio di Visual Basic, il programma Share.exe deve essere in esecuzione. Causa e soluzione dell'errore:

•	Prima di avviare Visual Basic non è stato avviato Share.exe.

Chiudere l'applicazione, avviare Share.exe, quindi riavviare l'applicazione. Per evitare che questo problema si verifichi di nuovo, inserire un richiamo di Share.exe nel file Autoexec.bat in modo che il programma venga avviato automaticamente all'accensione del computer.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


La libreria o il progetto specificati sono già inclusi in un riferimento

Nella finestra di dialogo Riferimenti vengono visualizzati progetti e librerie con riferimenti. Causa e soluzione dell'errore:

•	Nella finestra di dialogo Riferimenti è stato scelto il pulsante Sfoglia ed è stata quindi selezionata una libreria dei tipi o un progetto già elencati nella sezione Riferimenti disponibili della finestra di dialogo.

Se si desidera integrare un progetto o una libreria dei tipi nel progetto, visualizzare la finestra di dialogo Riferimenti e attivare la casella di controllo accanto al nome della libreria dei tipi o del progetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Istruzione non valida all'interno del blocco Type

Nel blocco di istruzioni Type...End Type è possibile specificare solo commenti e nomi di elementi con le relative proposizioni As tipo. Causa e soluzione dell'errore:

•	Nella definizione di un tipo definito dall'utente è stata specificata un'istruzione non valida.

Eliminare dalla definizione tutti gli elementi diversi da commenti, nomi di elementi e proposizioni As tipo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Istruzione non valida all'esterno del blocco Type

La sintassi per la dichiarazione di variabili esterna al blocco Type...End Type è diversa dalla sintassi per la dichiarazione di elementi di tipo definito dall'utente. Cause e soluzioni dell'errore:

•	È stata dichiarata una variabile al di fuori di un blocco Type...End Type o di un'istruzione.

Quando si dichiarano variabili con una proposizione As all'esterno di un blocco Type...End Type, utilizzare una delle istruzioni di dichiarazione Dim, ReDim, Static, Public o Private. La prima dichiarazione di MyVar nel codice che segue, ad esempio, genera questo errore; la seconda e terza dichiarazione MyVar sono invece valide:

MyVar As Double	' Sintassi di dichiarazione non valida.

Dim MyVar As Double

Type AType

MyVar As Double	' Questa sintassi di dichiarazione è valida

End Type	' perché si trova all'interno di un blocco Type.

•	È stata utilizzata un'istruzione End Type senza la corrispondente istruzione Type.

Controllare se esiste un'istruzione End Type non abbinata e, se necessario, far precedere il blocco dall'istruzione Type o eliminare l'istruzione End Type se non è necessaria.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Istruzione troppo complessa

L'istruzione non può essere analizzata. Cause e soluzioni dell'errore:

•	L'istruzione è troppo complessa.

Suddividere l'istruzione in più componenti di piccole dimensioni o sostituire proposizioni condizionali complesse con una combinazione di operatori logici e istruzioni If...Then...Else.

•	Nell'istruzione o funzione esistono troppe chiamate di funzioni nidificate.

Inserire le chiamate di funzione in un punto precedente a quello corrente, assegnare il risultato a variabili specifiche e utilizzare le variabili nell'istruzione che genera l'errore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Istruzioni o etichette non valide tra Select Case e la prima proposizione Case

Tra l'istruzione Select Case e la prima proposizione Case è possibile inserire solo commenti. Causa e soluzione dell'errore:

•	Tra l'istruzione Select Case e la prima proposizione Case è stata inserita un'istruzione. Esempio:

Select Case SomeVar

' Questo è un commento ed è valido.

Stop	' Nemmeno un'istruzione Stop è valida qui.

Case SomeValue

. . .

End Select

L'istruzione Select Case deve essere seguita immediatamente dalla prima istruzione Case. Se è stato inserito un commento, farlo precedere dal delimitatore di commento ('). Altrimenti spostare o eliminare l'espressione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore di sintassi

Non è possibile determinare l'azione da eseguire. Cause e soluzioni dell'errore:

•	Una parola chiave o un argomento sono stati scritti in modo non corretto.

Parole chiave e nomi di argomenti predefiniti devono essere scritti esattamente come indicato nella relativa sintassi. Controllare la corretta ortografia nella Guida in linea.

•	La punteggiatura non è corretta.

Quando, ad esempio, si omettono gli argomenti facoltativi in base alla posizione, è necessario inserire una virgola (,) come segnaposto dell'argomento.

•	Una routine non è definita.

Controllare l'ortografia del nome della routine.

•	Nella stessa dichiarazione di routine è stato specificato sia Optional che ParamArray.

Un argomento ParamArray non può essere Optional. Eliminare uno dei due argomenti.

•	Si è cercato di definire una routine di eventi con un parametro Optional o ParamArray.

Eliminare la parola chiave Optional o ParamArray dalla specifica del parametro.

•	Si è cercato di utilizzare un argomento predefinito in un'istruzione RaiseEvent.

Gli eventi non supportano gli argomenti predefiniti.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare la definizione del tipo di implementazione contenuta nel progetto DLL o EXE per cui è impostata la compatibilità binaria

Se si utilizza un server compatibile binario che implementa un'interfaccia inclusa in un'altra DLL, è importante eseguire la ricompilazione con cautela. Cause e soluzioni dell'errore:

•	L'altra DLL è stata ricompilata come compatibile progetto che modifica la GUID di interfaccia. Dato che si tratta di un tipo di modifica non visibile, questo errore può verificarsi in modo imprevisto. Viene inoltre generato quando si ottiene da un altro utente una DLL compatibile progetto a cui fare riferimento.

Fondamentalmente, questo errore si verifica quando un collegamento a una libreria dei tipi associata a un file DLL o EXE binario compatibile del progetto è interrotto. I riferimenti vengono interrotti quando una libreria dei tipi a cui viene fatto riferimento viene sovrascritta da un altro file, ad esempio da una DLL o un EXE ricompilato, quando si elimina il file della libreria oppure quando si sposta la libreria dei tipi che include i riferimenti in un altro computer senza spostare o registrare la libreria dei tipi a cui viene fatto riferimento.

Una possibile soluzione consiste nell'includere e registrare una copia della libreria dei tipi a cui viene fatto riferimento nel computer di destinazione. In questo caso non sarà possibile utilizzare la libreria precedente in quanto è stata sovrascritta durante la ricompilazione. Se non si esegue questa operazione, non si dovrà più utilizzare il file DLL/EXE come versione binario compatibile.


Impossibile trovare la definizione del tipo di parametro o del tipo di valore restituito contenuti nel progetto DLL o EXE per cui è impostata la compatibilità binaria

Se si utilizza un server binario compatibile che contiene un parametro o un tipo restituito incluso in un'altra DLL, è importante eseguire la ricompilazione con cautela. Cause e soluzioni dell'errore:

•	Quando si esegue la ricompilazione di un progetto in cui è impostata la compatibilità binaria, viene automaticamente impostata la compatibilità di progetto, con la conseguente modifica della GUID interna dell'interfaccia. Dato che si tratta di un tipo di modifica non visibile, questo errore può verificarsi in modo imprevisto.

Fondamentalmente, questo errore si verifica quando un collegamento a una libreria dei tipi associata a un file DLL o EXE binario compatibile del progetto è interrotto. I riferimenti vengono interrotti quando una libreria dei tipi a cui viene fatto riferimento viene sovrascritta da un altro file, ad esempio da una DLL o un EXE ricompilato, quando si elimina il file della libreria oppure quando si sposta la libreria dei tipi che include i riferimenti in un altro computer senza spostare o registrare la libreria dei tipi a cui viene fatto riferimento.

Una possibile soluzione consiste nell'includere e registrare una copia della libreria dei tipi a cui viene fatto riferimento nel computer di destinazione. In questo caso non sarà possibile utilizzare la libreria precedente in quanto è stata sovrascritta durante la ricompilazione. Se non si esegue questa operazione, non si dovrà più utilizzare il file DLL/EXE come versione binario compatibile.


La modifica potrebbe rendere il modulo di oggetto non compatibile con il server ActiveX compatibile specificato in precedenza

Se un componente ActiveX compatibile esiste già come file eseguibile o come libreria a collegamento dinamico (DLL) è necessario fare attenzione a non modificarne l'interfaccia. Causa e soluzione dell'avviso:

•	Si è cercato di modificare il codice di un modulo di oggetto già rappresentato da un file eseguibile.

Se le modifiche apportate hanno effetto sull'interfaccia dell'oggetto, la classe non sarà compatibile con la versione precedente e pertanto non sarà possibile utilizzare indifferentemente la versione nuova e la versione precedente del codice compilato.

In Visual Basic, il nome del componente ActiveX compatibile viene indicato nella finestra di dialogo visualizzata quando si sceglie Opzioni progetto dal menu Strumenti.

Importante   Se si desidera confermare la modifica, scegliere OK nella finestra di dialogo del messaggio di errore. Se invece si desidera annullarla, scegliere il pulsante Annulla.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


La ricerca è stata eseguita nell'area specificata

Quando si scelgono i pulsanti Trova successivo e Sostituisci nella finestra di dialogo Sostituisci il numero totale di sostituzioni eseguite non viene indicato. Causa ed effetto della condizione:

•	Quando si esegue un'operazione di ricerca e sostituzione, è possibile specificare una determinata area di ricerca, ovvero la selezione, la routine, il modulo o il progetto.

Se viene selezionata un'area di ricerca, la ricerca verrà eseguita nell'area specificata. In caso contrario, l'area di ricerca predefinita è il modulo corrente. Per modificare l'area di validità di una ricerca, selezionare un'opzione diversa nella finestra di dialogo Sostituisci.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


La ricerca è stata eseguita nell'area specificata e le sostituzioni sono state eseguite

Quando si sceglie il pulsante Sostituisci tutto nella finestra di dialogo Sostituisci, questo messaggio indica il numero totale di sostituzioni eseguite. Causa ed effetto della condizione:

•	Durante l'operazione di ricerca e sostituzione, è stata trovata una sola occorrenza del testo specificato. È possibile specificare una determinata area di ricerca, ovvero la selezione, la routine, il modulo o il progetto.

Se viene selezionata un'area di ricerca, la ricerca verrà eseguita nell'area specificata. In caso contrario, l'area di ricerca predefinita è il modulo corrente. Per modificare l'area di validità di una ricerca, selezionare un'opzione diversa nella finestra di dialogo Sostituisci.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


La ricerca è stata eseguita nell'area specificata. Sono state eseguite le sostituzioni

Quando si sceglie il pulsante Sostituisci tutto nella finestra di dialogo Sostituisci, questo messaggio indica il numero totale di sostituzioni eseguite. Causa ed effetto della condizione:

•	Quando si esegue un'operazione di ricerca e sostituzione, è possibile specificare una determinata area di ricerca, ovvero la selezione, la routine, il modulo o il progetto.

Se viene selezionata un'area di ricerca, la ricerca verrà eseguita nell'area specificata. In caso contrario, l'area di ricerca predefinita è il modulo corrente. Per modificare l'area di validità di una ricerca, selezionare un'opzione diversa nella finestra di dialogo Sostituisci.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il file vbp di questo progetto contiene un ID di riferimento alla libreria non valido o danneggiato

Quando si salva un progetto per il quale è stato selezionato un riferimento nella finestra di dialogo Riferimenti, il riferimento viene memorizzato nel file vbp del progetto (chiamato file mak nelle versioni precedenti di Visual Basic). Ad esempio, la voce memorizzata per un oggetto di accesso ai dati è:

Reference=*\G{00025E01-0000-0000-C000-000000000046}#0.0#0#C:\WINDOWS\SYSTEM\DAO2516.DLL#Microsoft

DAO 2.5 Object Library

Questo errore viene generato quanto tale riferimento è stato modificato o è danneggiato. Causa e soluzione dell'errore:

•	Un riferimento nel file vbp non è più valido.

Eliminare la riga errata dal file vbp e controllare la libreria degli oggetti appropriata nella finestra di dialogo Riferimenti del menu Strumenti. Salvare quindi il progetto per immettere le informazioni corrette nel file vbp.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il componente non genera eventi

Una routine di eventi deve corrispondere a un evento che può essere generato da un oggetto. Causa e soluzione dell'errore:

•	Si è scritta una routine di eventi per un oggetto che non genera eventi.

Non è possibile scrivere una routine di eventi che non corrisponde a un evento.

•	Si è cercato di utilizzare WithEvents per una classe che non genera eventi.

Non è possibile utilizzare WithEvents su una classe che non genera eventi.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Troppi argomenti

Una routine può includere un massimo di 60 argomenti. Causa e soluzione dell'errore:

•	Sono stati specificati più di 60 argomenti.

Se è necessario specificare un numero di argomenti maggiore di 60, definire un tipo definito dall'utente che consenta di raggruppare argomenti multipli con tipi di dati diversi, o utilizzare ParamArray come argomento finale e passare i valori multipli all'argomento. È inoltre possibile passare argomenti multipli inserendoli in una matrice.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Troppe dimensioni

Per le matrici non è possibile specificare più di 60 dimensioni. Cause e soluzioni dell'errore:

•	È stata dichiarata una matrice con più di 60 dimensioni.

Ridurre il numero di dimensioni.

•	La dichiarazione della matrice specifica valori compresi nell'intervallo consentito, ma non c'è memoria sufficiente per creare la matrice.

Liberare memoria o ridurre il numero di dimensioni. Nel caso di una matrice di tipo Variant o inclusa in una Variant, è possibile crearla senza ridurre il numero di dimensioni ridichiarandola con lo stesso tipo di dati dei relativi elementi. Una matrice che include, ad esempio, solo interi e che viene dichiarata come matrice di tipo Integer utilizza una quantità di memoria minore rispetto a una variabile con elementi di tipo Variant.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Troppe continuazioni di riga

Esiste un limite al numero di righe consecutive unite da caratteri di continuazione riga. Causa e soluzione dell'errore:

•	Nel codice sono state unite con caratteri di continuazione riga più di 25 righe fisiche unite da caratteri di continuazione di riga o più di 24 da caratteri di continuazione di riga consecutivi in un'unica riga.

Rendere alcune righe fisicamente più lunghe per ridurre il numero di caratteri di continuazione riga oppure suddividere la struttura in più istruzioni.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Troppe variabili locali non statiche

Le variabili locali non statiche sono definite all'interno di una routine e vengono reinizializzate ogni volta che si chiama la routine. Causa e soluzione dell'errore:

•	Il totale dei requisiti di memoria delle variabili locali e non statiche e delle variabili temporanee generate dal compilatore supera i 32 KB.

Dichiarare alcune variabili con l'istruzione Static nelle situazioni appropriate. Le variabili Static mantengono il loro valore tra le chiamate perché vengono allocate da risorse di memoria diverse da quelle utilizzate per le variabili non statiche.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Troppe variabili a livello di modulo

Le variabili a livello di modulo sono quelle dichiarate nella sezione Dichiarazioni di un modulo, prima delle routine del modulo. Causa e soluzione dell'errore:

•	Il totale dei requisiti di memoria per tutte le variabili a livello di modulo in questo modulo supera i 64 KB.

Questo è il limite di memoria per questo modulo. Se appropriato, è possibile dichiarare alcune variabili come Public in un altro modulo oppure se alcune variabili a livello di modulo vengono utilizzate solo in una routine, è possibile dichiararle all'interno di tale routine. Se le variabili sono state dichiarate a livello di modulo perché si desidera che conservino il loro valore tra le chiamate, è possibile in alternativa dichiararle come Static all'interno della routine in cui si fa riferimento a tali variabili.

Nota   Lo spazio disponibile può variare a seconda dei sistemi operativi.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il carattere di dichiarazione tipo non corrisponde al tipo di dati dichiarato

Non è possibile modificare il tipo di dati di una variabile aggiungendo il carattere di dichiarazione del tipo di un altro tipo. Causa e soluzione dell'errore:

•	È stata dichiarata una variabile di un determinato tipo, si è fatto riferimento a una variabile con lo stesso nome nella stessa area di validità e quindi è stato aggiunto un carattere di dichiarazione del tipo diverso.

Per poter modificare il tipo di dati assegnato a una variabile, è necessario dichiarare la variabile come Variant. Se è stato semplicemente aggiunto un carattere di dichiarazione del tipo non corretto, eliminarlo o sostituirlo con uno corretto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Carattere di dichiarazione tipo non ammesso

Anche se in Visual Basic è consentito utilizzare caratteri di dichiarazione del tipo, ad alcuni tipi di dati, tra cui Byte, Boolean, Date, Object e Variant, non è associato alcun carattere di dichiarazione del tipo. Cause e soluzioni dell'errore:

•	È stato specificato un carattere di dichiarazione del tipo nella dichiarazione di una variabile che utilizza la proposizione As, ad esempio con Dim, Static, Public e così via.

Eliminare il carattere di dichiarazione del tipo o la proposizione As.

•	È stato specificato un carattere di dichiarazione del tipo nel riferimento a una variabile dichiarata in modo implicito senza un carattere di dichiarazione del tipo:

MyVar = 20	' Dichiarazione implicita.

MyVar% = 25	' Genera un errore.

Eliminare il carattere di dichiarazione del tipo o ridichiarare la variabile originale.

Nota   Se nella dichiarazione esplicita di una variabile è specificato un carattere di dichiarazione del tipo, l'inserimento del carattere in riferimenti successivi è facoltativa. Esempio:

Dim MyStr$

MyStr = "Dato che si tratta di una dichiarazione esplicita, $ è facoltativo."

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Necessario carattere di dichiarazione tipo

La necessità o meno di utilizzare caratteri di dichiarazione del tipo dipende dal tipo di dichiarazione dell'identificatore. Causa e soluzione dell'errore:

•	È stato fatto riferimento a una variabile originariamente dichiarata con un carattere di dichiarazione del tipo senza specificare il carattere di dichiarazione del tipo. Esempio:

MyStr$ = "Dichiarazione implicita"

MyStr = "Tentativo di fare riferimento a MyStr$, però genera un errore" _

 & "se la si richiama con MyStr."

Rendere la dichiarazione esplicita o aggiungere il carattere di dichiarazione del tipo in riferimenti successivi.

Nota   Se nella dichiarazione esplicita di una variabile è specificato un carattere di dichiarazione del tipo, l'inserimento del carattere in riferimenti successivi è facoltativa. Esempio:

Dim MyStr$

MyStr = "Dichiarazione esplicita. L'utilizzo di $ è facoltativo."

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Tipo non corrispondente. Previsti matrice o tipo definito dall'utente

Il tipo di un argomento o parametro può specificare una matrice o un tipo definito dall'utente. Causa e soluzione dell'errore:

•	L'argomento specifica un singolo elemento di una matrice o tipo definito dall'utente, oppure una semplice variabile, stringa o costante, ma viene passato a un parametro che prevede un'intera matrice o un intero tipo definito dall'utente.

Modificare l'argomento o la definizione del parametro.

•	L'argomento specifica una matrice o un tipo definito dall'utente, ma di un tipo diverso dal parametro.

Passare una matrice del tipo previsto oppure modificare la definizione della dichiarazione del parametro.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile leggere dal disco

Esiste un problema generale di lettura dal disco. Cause e soluzioni dell'errore:

•	Lo sportellino dell'unità non è chiuso correttamente.

Nel caso di un disco rimovibile, controllare che lo sportellino sia chiuso correttamente

•	Il disco potrebbe essere stato inserito in modo non corretto.

Reinserire il disco correttamente.

•	Il disco potrebbe essere formattato in modo non corretto.

Riformattare il disco. L'operazione comporta tuttavia la perdita dei dati.

•	Esistono problemi relativi alla rete.

Riavviare la rete.

•	La densità del disco non è compatibile con l'unità in uso.

Utilizzare un'altra unità oppure copiare i dati desiderati in un disco leggibile dall'unità in uso.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile scrivere su disco

Esiste un problema generale di scrittura su disco. Cause e soluzioni dell'errore:

•	Lo sportellino dell'unità non è chiuso correttamente.

Nel caso di un disco rimovibile, controllare che lo sportellino sia chiuso correttamente

•	Il disco potrebbe essere stato inserito in modo non corretto.

Reinserire il disco correttamente.

•	Il disco potrebbe essere formattato in modo non corretto.

Riformattare il disco. L'operazione comporta tuttavia la perdita dei dati.

•	Esistono problemi relativi alla rete.

Riavviare la rete.

•	La densità del disco non è compatibile con l'unità in uso.

Utilizzare un'altra unità oppure copiare i dati desiderati in un disco leggibile dall'unità in uso.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore imprevisto. Contattare il Servizio Supporto Tecnico Clienti Microsoft

Questo errore potrebbe essere o non essere grave. Causa e soluzione dell'errore:

•	Si è verificato un errore imprevisto nell'applicazione host o in Visual Basic.

Non si deve dare per scontato che l'errore sia grave. È tuttavia consigliabile annotarsi il numero dell'errore e rivolgersi al Servizio Supporto Tecnico Clienti Microsoft.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Corrispondenza errata delle parentesi nella stringa di ricerca

A ogni parentesi aperta deve corrispondere una parentesi chiusa. Causa e soluzione dell'errore:

•	In una stringa di ricerca è stata omessa la parentesi chiusa.

Inserire la parentesi chiusa correttamente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Lingua di progetto non riconosciuta

Le impostazioni internazionali del codice specificate per il progetto da caricare non sono supportate dall'applicazione in uso. Cause e soluzioni dell'errore:

•	Il progetto è stato creato in un sistema che supporta determinate impostazioni internazionali del codice ed è stato quindi spostato in un sistema in cui queste impostazioni non sono riconosciute. Il file Ole2nls.dll installato nel computer in uso, ad esempio, è una versione che non riconosce le impostazioni internazionali del codice.

Installare nel sistema la libreria a collegamento dinamico (DLL) corretta.

•	Non è stata trovata la libreria degli oggetti corretta per il progetto.

Controllare che le librerie degli oggetti corrette siano disponibili, ad esempio che nel percorso siano specificate le relative directory.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile passare il tipo definito dall'utente con ByVal

È possibile passare i tipi definiti dall'utente solo per riferimento (impostazione predefinita), non per valore. L'errore potrebbe essere riportato solo quando viene eseguita una chiamata. Causa e soluzione dell'errore:

•	Nella definizione di un parametro che rappresenta un tipo definito dall'utente è stata utilizzata la parola chiave ByVal.

Rimuovere la parola chiave ByVal. Per evitare che le modifiche vengano trasferite al punto da cui proviene la chiamata, utilizzare l'istruzione Dim per dichiarare una variabile temporanea del tipo e passarla nella routine.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Tipo definito dall'utente non definito

Quando in Visual Basic vengono creati tipi di dati personalizzati, è necessario definirli prima in un'istruzione Type...End Type oppure in una libreria degli oggetti o libreria dei tipi registrate correttamente. Cause e soluzioni dell'errore:

•	È stata dichiarata una variabile o un argomento con un tipo di dati non definito oppure è stato specificato un nome di classe o di oggetto sconosciuto.

Definire un nuovo tipo di dati utilizzando l'istruzione Type in un modulo. Se si desidera creare un riferimento a una classe, questa deve essere riconosciuta dal progetto. Se viene fatto riferimento a una classe del programma, il progetto deve includere un modulo di classe con il nome specificato. Controllare l'ortografia del nome del tipo o dell'oggetto.

•	Il tipo che si desidera dichiarare è incluso in un altro modulo, ma è stato dichiarato come Private.

Spostare la definizione del tipo in un modulo standard in cui può essere Public.

•	Il tipo è valido, ma la libreria degli oggetti o dei tipi in cui è definito non è registrata in Visual Basic.

Visualizzare la finestra di dialogo Riferimenti, quindi selezionare la libreria degli oggetti o dei tipi adeguata. Se, ad esempio, nella finestra di dialogo Riferimenti non viene attivata la casella di controllo degli oggetti di accesso ai dati (DAO), i tipi Database, Recordset e TableDef non saranno riconosciuti e i relativi riferimenti nel codice genereranno questo errore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Tipo definito dall'utente senza membri non ammesso

I tipi definiti dall'utente devono includere almeno un elemento. Causa e soluzione dell'errore:

•	In una definizione Type...End Type è stato specificato un tipo definito dall'utente vuoto.

Controllare se nell'istruzione Type sono stati inavvertitamente inseriti delimitatori di commento.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Variabile non definita

L'istruzione Option Explicit impedisce che nei moduli esistano variabili non dichiarate e che possano essere create inavvertitamente nuove variabili a causa di errori di digitazione. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione Option Explicit per richiedere la dichiarazione esplicita delle variabili ed è quindi stata utilizzata una variabile senza dichiararla.

Dichiarare la variabile in modo esplicito o correggere adeguatamente il nome della variabile.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


La variabile non è ancora stata creata in questo contesto

Per poter visualizzare una variabile nella finestra Espressioni di controllo o Immediata e poterle assegnare valori nella finestra Immediata, è necessario prima crearla. Cause e soluzioni dell'errore:

•	Si è cercato di visualizzare il valore di una variabile locale appena immessa nel codice prima di eseguire almeno una volta il comando Esegui istruzione in modalità interruzione.

Eseguire l'istruzione nel codice per forzare la compilazione della nuova istruzione.

•	Si è cercato di visualizzare il valore di una variabile locale appena aggiunta in una routine dopo la catena di chiamate eseguendo uno spostamento sulla routine mediante la finestra di dialogo Chiamate.

Per poter visualizzare la variabile nel relativo contesto, è necessario tornare alla routine.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Richiesta variabile. Impossibile assegnare a questa espressione

Questo errore viene in genere generato quando si cerca di assegnare un valore a un elemento che non accetta l'assegnazione. Cause e soluzioni dell'errore:

•	È stata utilizzata un'espressione numerica come argomento della funzione Len.

La funzione Len non accetta espressioni numeriche, valori letterali numerici o espressioni numeriche binarie, mentre accetta variabili stringa o numeriche, espressioni stringa o una variabile di tipo definito dall'utente.

•	È stata utilizzata una chiamata di funzione o un'espressione come argomento di Input #, Let, Get o Put. È stato utilizzato, ad esempio, un argomento che sembra un riferimento valido a una variabile di matrice, mentre invece è una chiamata di una funzione che ha lo stesso nome.

Input #, Let, Get e Put non accettano chiamate di una funzione come argomenti.

•	È stato assegnato un valore a un identificatore dichiarato precedentemente come costante.

Assegnare all'identificatore un nome diverso.

•	In una struttura For...Next è stato utilizzato come contatore di ciclo un valore diverso da una variabile.

Utilizzare una variabile come contatore.

•	Si è cercato di assegnare un valore a una proprietà in sola lettura o a un'espressione composta da più variabili, come X + Y. L'assegnazione comporta l'inserimento del valore in una posizione in memoria. L'espressione specificata deve quindi rappresentare una posizione univoca e scrivibile.

Reimpostare l'assegnazione in modo che indichi un nome di variabile univoco idoneo per l'accettazione dei dati.

•	Si è cercato di utilizzare una variabile non dichiarata definita come costante in una libreria di tipi.

Utilizzare un nome diverso per la variabile oppure dichiararla in modo esplicito.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Avviso: impostazioni di lingua personalizzate non trasferibili

Alcune impostazioni di lingua non sono trasferibili. Causa e soluzione dell'avviso:

•	È stata utilizzata nel codice un'impostazione di lingua personalizzata.

Quando si scelgono impostazioni personalizzate di lingua/di paese per il codice in uso, le convenzioni linguistiche utilizzate nel codice corrispondono a quelle impostate nel Pannello di controllo del sistema. È possibile utilizzare impostazioni internazionali del codice personalizzate, ma il codice in uso potrebbe non funzionare correttamente con altre impostazioni internazionali o in sistemi con impostazioni diverse. L'applicazione host analizza alcune stringhe sulla base delle impostazioni del Pannello di controllo del computer nel quale è in esecuzione.

Se le impostazioni del Pannello di controllo del computer di destinazione non corrispondono a quelle del computer nel quale è stato scritto il codice, le stringhe analizzate da un'applicazione host (ad esempio un codice che dipende dal separatore decimale determinato dalle impostazioni internazionali) non funzioneranno correttamente. È consigliabile pertanto non utilizzare le impostazioni linguistiche personalizzate, a meno che non si preveda di non inviare il codice ad altri utenti. In questo caso, definire impostazioni internazionali predefinite.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Wend senza While

Tutte le istruzioni Wend devono essere precedute dalla corrispondente istruzione While. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione Wend senza specificare la corrispondente istruzione While.

Controllare se all'interno del ciclo While...Wend è nidificato un ciclo non terminato che genera l'errore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


While senza Wend

È stata utilizzata un'istruzione While senza la corrispondente istruzione Wend. Causa e soluzione dell'errore:

•	Non è stata chiusa una struttura While...Wend.

Controllare che all'interno della struttura più esterna While...Wend non vi sia una struttura While...Wend non abbinata correttamente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


L'oggetto With deve essere di tipo definito dall'utente, Object o Variant

Non è possibile utilizzare blocchi With...End With con tutti i tipi di variabile. Causa e soluzione dell'errore:

•	È stata utilizzata una variabile diversa dal tipo Object, da un tipo definito dall'utente o da Variant contenente un oggetto all'interno di un blocco With.

Controllare che il nome della variabile oggetto, tipo definito dall'utente o Variant sia stato scritto correttamente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Numero di dimensioni errato

I riferimenti a matrici devono includere indici che corrispondono al numero di dimensioni indicato nella dichiarazione della matrice. Causa e soluzione dell'errore:

•	È stato fatto riferimento a una matrice con un numero di dimensioni diverso da quello effettivo. L'errore viene generato, ad esempio, se si fa riferimento a una matrice come X(2,4), ovvero una matrice a due dimensioni, quando questa è stata definita come Dim X(5), ovvero una matrice a una dimensione.

Controllare il numero di dimensioni indicato nella dichiarazione della matrice e includere nel riferimento un indice per ciascuna dimensione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Questa operazione riavvierà il progetto. Continuare?

Il codice può essere modificato in modalità interruzione. Alcuni tipi di modifica, tuttavia, potrebbero impedire la continuazione dell'esecuzione. Causa e soluzione dell'errore:

•	È stata apportata una modifica che impedisce di continuare l'esecuzione. È stata, ad esempio, dichiarata una variabile statica.

Se si sceglie Sì, l'esecuzione verrà interrotta e sarà possibile modificare il codice. Se si sceglie No, sarà possibile continuare l'esecuzione del codice dal punto in cui è stata sospesa.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


È necessario concludere il blocco #If con #End If

#If è un'istruzione di compilazione condizionale. Causa e soluzione dell'errore:

•	È stato individuato un blocco #If che non si conclude con un'istruzione #End If.

Aggiungere un'istruzione #End If nella posizione appropriata.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile utilizzare moduli di oggetto privati in moduli di oggetto pubblici come parametri o tipi restituiti per routine pubbliche, come membri pubblici di dati o come campi di tipi pubblici definiti dall'utente

Cause e soluzioni dell'errore:

•	Si è cercato di utilizzare un modulo di oggetto privato come parametro in un modulo di oggetto pubblico o come tipo restituito per una routine pubblica, un membro di dati pubblico o come campo di un tipo pubblico definito dall'utente e l'operazione non è consentita.


Solo i tipi pubblici definiti dall'utente definiti in moduli di oggetto pubblici possono essere utilizzati come parametri o tipi restituiti per routine pubbliche di moduli di classe o come campi di tipi pubblici definiti dall'utente

Cause e soluzioni dell'errore:

•	Si è cercato di utilizzare un tipo pubblico definito dall'utente come parametro o tipo restituito per una routine pubblica di un modulo di classe o come campo di un tipo pubblico definito dall'utente. È possibile utilizzare in questo modo solo i tipi pubblici definiti dall'utente in un modulo di oggetto pubblico.


La libreria degli oggetti non è valida o contiene riferimenti a definizioni di oggetti che non è possibile trovare

Cause e soluzioni dell'errore:

•	Una libreria degli oggetti contiene riferimenti a definizioni di oggetti non disponibili o comunque non valide.


Argomento non facoltativo (errore 449)

Il numero ed i tipi di argomenti devono corrispondere a quelli prestabiliti. Cause e soluzioni dell'errore:

•	Numero di argomenti non corretto.

Fornire tutti gli argomenti obbligatori. La funzione Left, ad esempio, richiede due argomenti. Il primo rappresenta la stringa di caratteri da elaborare ed il secondo il numero di caratteri della stringa che devono essere restituiti a partire da sinistra. Poiché nessuno dei due argomenti è facoltativo, è necessario indicarli entrambi.

•	L'argomento omesso non è facoltativo.

Un argomento può essere omesso da una chiamata ad una routine definita dall'utente solo se è stato dichiarato come Optional nella dichiarazione della routine. Fornire l'argomento nella chiamata oppure dichiarare il parametro Optional nella definizione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Convenzione di chiamata DLL non valida (errore 49)

Gli argomenti passati ad una routine di una libreria a collegamento dinamico (DLL) a una routine di risorsa codice Macintosh  devono corrispondere esattamente agli argomenti previsti dalla routine. Le convenzioni di chiamata rilevano il numero, il tipo e l'ordine degli argomenti. Cause e soluzioni dell'errore:

•	Il programma sta chiamando una routine in una DLL (in Windows) o in una risorsa codice (in Macintosh) alla quale vengono passati argomenti di tipo non valido.

Verificare che tutti i tipi di argomenti corrispondano a quelli specificati nella dichiarazione della routine chiamata.

•	Il programma sta chiamando una routine in una DLL (in Windows) o in una risorsa codice (in Macintosh) alla quale viene passato un numero errato di argomenti.

Verificare che venga passato lo stesso numero di argomenti indicato nella dichiarazione della routine chiamata.

•	Il programma sta chiamando una routine in una DLL senza utilizzare la convenzione di chiamata StdCall.

Se per la routine DLL è necessario passare argomenti per valore, verificare che la parola chiave ByVal sia specificata per tali argomenti nella dichiarazione della routine.

•	L'istruzione Declare per una DLL Windows include CDecl.

La parola chiave CDecl è valida solo per Macintosh.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Modalità file non valida (errore 54)

Le istruzioni utilizzate per la gestione del contenuto dei file devono corrispondere alla modalità in cui il file è stato aperto. Cause e soluzioni dell'errore:

•	Un'istruzione Put o Get specifica un file ad accesso sequenziale.

Put e Get possono riferirsi solo a file aperti per accesso di tipo Random o Binary.

•	Un'istruzione Print # specifica un file aperto per un tipo di accesso diverso da Output e Append.

Utilizzare un'altra istruzione per inserire dati nel file oppure riaprire il file in una modalità appropriata.

•	Un'istruzione Input # specifica un file aperto per un tipo di accesso diverso da Input.

Utilizzare un'altra istruzione per inserire dati nel file oppure riaprire il file in modalità Input.

•	Si è tentato di scrivere su un file di sola lettura.

Modificare lo stato di lettura/scrittura del file o non tentare di scrivere sul file stesso.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Nome o numero di file non valido (errore 52)

È stato generato un errore durante un tentativo di accesso al file specificato. Cause e soluzioni dell'errore:

•	Un'istruzione si riferisce ad un file con un numero di file o un nome di file che:

•	Non è specificato nell'istruzione Open oppure era specificato in un'istruzione Open ma è stato chiuso:

Specificare il nome di file in un'istruzione Open. Si noti che se l'istruzione Close è stata richiamata senza argomenti, è possibile che siano stati chiusi tutti i file aperti correntemente e che di conseguenza siano stati invalidati tutti i numeri di file.

•	Non è compreso nell'intervallo valido di numeri di file (da 1 a 511).

Se il codice genera numeri di file in modo algoritmico, verificare che i numeri siano validi.

•	È un nome o un numero non valido.

I nomi di file devono essere specificati in base alle convenzioni del sistema operativo e alle convenzioni di denominazione dei file di Basic. In Microsoft Windows, utilizzare le seguenti convenzioni di denominazione di file e directory:

•	Il nome di un file o di una directory può essere composto da due parti: il nome ed un'estensione facoltativa. Le due parti sono separate da un punto, ad esempio Miofile.doc.

•	Il nome può essere composto da un massimo di 255 caratteri.

•	Il nome deve iniziare con una lettera o un numero e può includere maiuscole o minuscole (per i nomi dei file non viene fatta distinzione fra maiuscole e minuscole). Non è possibile utilizzare i caratteri di seguito indicati: virgolette ("), apostrofo ('), barra (/), barra rovesciata (\), due punti (:) e barra verticale (|).

•	Il nome può includere spazi.

•	I nomi che seguono sono riservati e non possono essere utilizzati per file o directory: CON, AUX, COM1, COM2, COM3, COM4, LPT1, LPT2, LPT3, PRN e NUL. Se, ad esempio, si cerca di denominare un file all'interno di un'istruzione Open come PRN, la stampante predefinita diventerà semplicemente la destinazione delle istruzioni Print # e Write # dirette al numero di file specificato nell'istruzione Open.

•	Di seguito vengono elencati esempi di nomi di file validi per Microsoft Windows:

LETTERA.DOC

Memo.txt

BILANCIO.92

12345678.901

Seconda prova.rpt

•	In Macintosh, un nome di file può essere composto da qualsiasi carattere ad eccezione dei due punti (:) e può includere spazi. I caratteri nulli (Chr(0)) non sono consentiti nei nomi di file.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Lunghezza del record non valida (errore 59)

La lunghezza di una variabile record per un'istruzione Get o Put deve essere la lunghezza specificata nell'istruzione Open corrispondente. Cause e soluzioni dell'errore:

•	La lunghezza della variabile record è diversa dalla lunghezza specificata nell'istruzione Open corrispondente.

Verificare che la somma delle dimensioni delle variabili di lunghezza fissa nel tipo definito dall'utente che definisce il tipo di variabile del record sia uguale al valore dichiarato nella proposizione Len dell'istruzione Open. Nell'esempio che segue, si suppone che RecVar sia una variabile del tipo appropriato. La funzione Len potrà essere utilizzata per specificare la lunghezza, nel modo seguente:

Open MyFile As #1 Len = Len(RecVar)

•	La variabile in un'istruzione Put è o comprende una stringa di lunghezza variabile.

Poiché viene sempre aggiunto un descrittore di due byte alla stringa di lunghezza variabile Put di un file ad accesso casuale, la stringa di lunghezza variabile deve essere più breve di almeno due caratteri della lunghezza del record specificata nella proposizione Len dell'istruzione Open.

•	La variabile in un'istruzione Put è o include una variabile di tipo Variant.

Come le stringhe di lunghezza variabile, anche i tipi di dati Variant richiedono un descrittore di due byte. Variabili Variant contenenti stringhe di lunghezza variabile richiedono un descrittore di quattro byte. Per le stringhe di lunghezza variabile in un tipo Variant, la stringa deve essere quindi più breve di almeno 4 byte rispetto alla lunghezza del record specificata nella proposizione Len.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Numero di record non valido (errore 63)

È stato generato un errore durante il tentativo di accesso al file. Causa e soluzione dell'errore:

•	Il numero di record in un'istruzione Put o Get è inferiore o uguale a zero.

Verificare i calcoli utilizzati per generare il numero di record. Verificare che le variabili contenenti il numero di record o utilizzate per il calcolo del numero di record siano scritte correttamente. Se Option Explicit non è stata inserita nella posizione corretta nel modulo, un nome di variabile errato verrà dichiarato in modo implicito e inizializzato a zero.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile creare il file temporaneo necessario (errore 322)

La creazione di un file eseguibile richiede la creazione di file temporanei. Causa e soluzione dell'errore:

•	L'unità che contiene la directory specificata dalla variabile di ambiente TEMP è piena.

Eliminare file dall'unità piena o specificare un'unità diversa nella variabile di ambiente TEMP.

•	La variabile di ambiente TEMP specifica un'unità o una directory non valida o di sola lettura.

Specificare un'unità valida per la variabile di ambiente TEMP oppure rimuovere l'attributo di sola lettura dall'unità o directory specificata.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile eseguire l'operazione richiesta (errore 17)

Un'operazione non può essere eseguita se invalida lo stato corrente del progetto. Cause e soluzioni dell'errore:

•	L'operazione richiesta non può essere eseguita perché invaliderebbe lo stato corrente del progetto. L'errore viene generato, ad esempio, se si cerca di utilizzare la finestra di dialogo Riferimenti per aggiungere un riferimento ad un nuovo progetto o ad una nuova libreria degli oggetti mentre il programma è in modalità interruzione.

Interrompere l'esecuzione del codice corrente, quindi tentare nuovamente l'operazione.

•	Si è cercato di modificare il codice in esecuzione a livello di programmazione. È possibile, ad esempio, che sia stato eseguito un tentativo di leggere codice da un file su disco in un modulo in esecuzione.

Sebbene sia possibile modificare i moduli del progetto mentre non sono in esecuzione, non è possibile apportare modifiche in un modulo in esecuzione. Per apportare le modifiche, è necessario interrompere l'esecuzione del modulo, apportare le modifiche desiderate e quindi riavviare l'esecuzione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile rinominare con unità diversa (errore 74)

L'istruzione Name deve rinominare il file con la designazione dell'unità corrente. Causa e soluzione dell'errore:

•	Si è cercato di spostare un file su un'altra unità con l'istruzione Name.

Utilizzare FileCopy per scrivere il file in un'altra unità e l'istruzione Kill per eliminare il vecchio file.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile salvare il file in TEMP (errore 735)

Per i componenti è spesso necessario salvare dati temporanei su disco. Cause e soluzioni dell'errore:

•	Il componente non trova una directory TEMP.

Creare una directory denominata TEMP e impostare la variabile di ambiente TEMP sul percorso corrispondente.

•	Nell'unità o partizione che contiene la directory TEMP non vi è spazio sufficiente per salvare i dati.

Liberare spazio nell'unità eliminando i file non necessari o creare una directory TEMP in un'altra partizione e impostare la variabile di ambiente TEMP sul percorso corrispondente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


La classe non supporta l'automazione (errore 430)

Alcuni oggetti non possono esporre un'interfaccia di Automazione. Causa e soluzione dell'errore:

•	La classe specificata nella chiamata della funzione GetObject o CreateObject è stata trovata, ma non ha esposto un'interfaccia di programmabilità.

Di conseguenza non è possibile scrivere il codice per gestire tale oggetto. Consultare la documentazione dell'applicazione con la quale è stato creato l'oggetto per verificare eventuali limitazioni sull'uso dell'automazione con questa classe di oggetti.

•	Un progetto dll è stato convertito in progetto exe o viceversa. Se, ad esempio, si imposta come exe un server dll già compilato e registrato e quindi si ricompila il progetto, il fatto che il file dll e il file exe sono già registrati nel sistema impedisce la creazione di entrambi gli oggetti. Per ovviare a questo problema, è necessario annullare in modo manuale la registrazione del file exe o dll esistente.

Questo errore è associato alla compatibilità del progetto e alla modifica del tipo del progetto da exe a dll. Con la compatibilità di progetto, il valore CLSID (ID di classe) rimane inalterato e la classe viene pertanto registrata in due server, un server in-process e un server locale. Quando viene creata un'istanza, verrà scelto il server in-process. Con la compatibilità di progetto il valore IID (ID di interfaccia) non viene invece conservato. Di conseguenza, quando viene eseguita una query dell'interfaccia, la dll non supporterà l'IID in quanto è un valore nuovo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore di blocco risorsa codice (errore 455)

Questo errore può verificarsi solo in Macintosh. Quando si accede ad una risorsa codice, è necessario bloccarla. Causa e soluzione dell'errore:

•	È stata effettuata una chiamata ad una routine di una risorsa codice. La risorsa codice è stata individuata, ma è stato generato un errore tentando di bloccare la risorsa.

Cercare eventuali errori restituiti da HLock (ad esempio, "Illegal on empty handle" o "Illegal on free block").

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare la risorsa codice (errore 454)

Questo tipo di errore può essere generato solo in Macintosh. Causa e soluzione dell'errore:

•	È stata effettuata una chiamata ad una routine di una risorsa codice, ma quest'ultima non è stata trovata.

Verificare che la risorsa sia disponibile e che il relativo riferimento sia corretto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il collegamento alla libreria dei tipi o alla libreria degli oggetti per il processo remoto non è più disponibile (errore 442)

Durante l'accesso remoto, ovvero quando si accede a un oggetto che fa parte di un altro processo o è in esecuzione in un altro computer, la connessione alla libreria che contiene le informazioni sull'oggetto si è rilevata non più disponibile. Causa e soluzione dell'errore:

•	La connessione alla libreria degli oggetti o alla libreria dei tipi del processo remoto non è più disponibile.

Per riattivare la connessione, procedere nel seguente modo:

1.	Riavviare l'oggetto Application.

2.	Nella finestra di dialogo della Guida visualizzata in presenza di questo errore, fare clic su OK per visualizzare la finestra di dialogo Riferimenti.

3.	A sinistra del riferimento non più disponibile nella finestra di dialogo viene visualizzata la parola MANCANTE.

4.	Rimuovere il riferimento mancante.

5.	Nella finestra di dialogo Riferimenti fare clic sulla casella di controllo relativa all'oggetto avviato nel passaggio 1.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore I/O periferica (errore 57)

Le periferiche esterne sono talvolta soggette a errori imprevisti. Causa e soluzione dell'errore:

•	È stato generato un errore di input o di output durante l'utilizzo di una periferica, quale una stampante o un'unità disco.

Verificare che la periferica funzioni correttamente, quindi ritentare l'operazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Periferica non disponibile (errore 68)

Cause e soluzioni dell'errore:

•	La periferica a cui si sta cercando di accedere non è in linea o non esiste.

Verificare l'alimentazione della periferica e i cavi di connessione tra la periferica e il computer. Se si sta tentando l'accesso ad una stampante in rete, verificare che tra la stampante e il computer esista una connessione logica, ad esempio una connessione che associ LPT1 all'ID della stampante in rete.

•	La connessione in rete potrebbe essere interrotta.

Ripristinare la connessione in rete e ritentare l'operazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Disco pieno (errore 61)

Cause e soluzioni dell'errore:

•	Lo spazio su disco non è sufficiente per completare l'operazione Print #, Write # o Close.

Trasferire alcuni dei file su un altro disco o cancellarli.

•	Lo spazio su disco non è sufficiente per creare i file richiesti.

Trasferire alcuni dei file su un altro disco o cancellarli.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Disco non pronto (errore 71)

Cause e soluzioni dell'errore:

•	Nell'unità specificata non è inserito alcun dischetto.

Inserire un dischetto nell'unità e ritentare.

•	Lo sportello dell'unità è aperto.

Chiudere lo sportello e ritentare.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Divisione per zero (errore 11)

La divisione per zero non è consentita. Causa e soluzione dell'errore:

•	Il valore di un'espressione utilizzata come divisore è zero.

Controllare che le variabili dell'espressione siano state digitate correttamente. Un nome di variabile errato può creare una variabile numerica che viene inizializzata a zero. Controllare le precedenti operazioni sulle variabili dell'espressione, specialmente quelle passate nella routine come argomenti provenienti da altre routine.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore di caricamento DLL (errore 48)

Una libreria a collegamento dinamico (DLL) è una libreria specificata nella proposizione Lib di un'istruzione Declare. Cause e soluzioni dell'errore:

•	Il file non è DLL eseguibile.

Se il file è un file di testo di origine, dovrà essere compilato e collegato al form DLL eseguibile.

•	Il file non è di tipo DLL Microsoft Windows.

Procurarsi l'equivalente DLL Microsoft Windows del file.

•	Il file è di un vecchio tipo DLL Microsoft Windows, non compatibile con la modalità protetta di Microsoft Windows.

Procurarsi una versione aggiornata della DLL.

•	La DLL fa riferimento ad un'altra DLL non presente.

Procurarsi la DLL a cui si fa riferimento e renderla disponibile per la prima.

•	La DLL o una delle DLL cui si fa riferimento non si trova nella directory specificata dal percorso.

Spostare la DLL nella directory cui si fa riferimento oppure indicare la directory corrente della DLL nel percorso.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


File già esistente (errore 58)

Cause e soluzioni dell'errore:

•	In fase di esecuzione, questo errore viene generato quando il nuovo nome del file, ad esempio il nome specificato con un'istruzione Name, è identico ad un nome di file già esistente.

Specificare un altro nome di file nell'istruzione Name oppure eliminare il vecchio file prima di utilizzare il nome nell'istruzione Name.

•	Il comando Salva con nome è stato utilizzato per salvare un progetto caricato correntemente, ma il nome di progetto esiste già.

Se non si desidera sostituire il progetto esistente, utilizzare un nuovo nome di progetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


File già aperto (errore 55)

Talvolta è necessario che un file venga chiuso prima che sia possibile eseguire un'altra istruzione Open o un'altra operazione. Cause e soluzioni dell'errore:

•	È stata eseguita un'istruzione Open in modalità di output sequenziale per un file già aperto.

È necessario chiudere un file aperto per un tipo di accesso sequenziale prima di poterlo aprire per un altro tipo di accesso. È, ad esempio, necessario chiudere un file aperto per Input prima di poterlo aprire per Output.

•	Un'istruzione, ad esempio Kill, SetAttr o Name, si riferisce ad un file aperto.

Chiudere il file prima di eseguire l'istruzione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare il file (errore 53)

Il file non è stato trovato nella posizione specificata. Cause e soluzioni dell'errore:

•	Un'istruzione, ad esempio Kill, Name o Open, fa riferimento ad un file non esistente.

Controllare che il nome del file sia stato digitato correttamente e che il percorso indicato sia corretto.

•	Si è cercato di richiamare una routine in una libreria a collegamento dinamico (DLL) o in una risorsa codice Macintosh, ma è impossibile trovare il nome di file della libreria o del file di risorse specificato nella proposizione Lib dell'istruzione Declare.

Controllare che il nome del file sia stato digitato correttamente e che il percorso indicato sia corretto.

•	In ambiente di sviluppo questo errore viene generato se si cerca di aprire un progetto o di caricare un file di testo non esistente.

Controllare che il nome del file o del progetto sia stato digitato correttamente e che il percorso indicato sia corretto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Ciclo For non inizializzato (errore 92)

I contatori di ciclo For devono essere inizializzati. Causa e soluzione dell'errore:

•	Ci si è spostati al centro di un ciclo For...Next.

Rimuovere il passaggio al centro del ciclo. Non è consigliabile inserire etichette all'interno di un ciclo For...Next.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Input oltre la fine del file (errore 62)

Non è possibile leggere oltre la posizione di fine file. Causa e soluzione dell'errore:

•	Un'istruzione Input # o Line Input # sta leggendo un file vuoto o un file nel quale tutti i dati sono già stati letti.

Per individuare la fine del file, utilizzare la funzione EOF immediatamente prima dell'istruzione Input #.

•	È stata utilizzata la funzione EOF con un file aperto per accesso Binary.

EOF funziona solo con i file aperti per accesso Input sequenziale. Utilizzare Seek e Loc con i file aperti per accesso Binary.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore interno (errore 51)

Verificare che questo errore non sia stato generato dall'istruzione Error o dal metodo Raise. Causa e soluzione dell'errore:

•	Si è verificato un errore interno di Visual Basic.

Se questo errore non è stato generato dall'istruzione Error o dal metodo Raise, contattare il Servizio Supporto Tecnico Clienti Microsoft e riferire in quali condizioni è apparso il messaggio.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Formato degli Appunti non valido (errore 460)

Negli Appunti è possibile inserire dati solo in formati specifici. Causa e soluzione dell'errore:

•	Si è cercato di inserire dati di un componente negli Appunti ma i dati sono in un formato non compatibile con gli Appunti.

Consultare la documentazione del componente per determinare se è possibile utilizzare gli Appunti per trasferire dati dal componente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Formato di file non valido (errore 321)

I file su disco contengono spesso dati memorizzati in formati proprietari. Cause e soluzioni dell'errore:

•	Si è cercato di caricare un file in un componente, ma il formato dei dati nel file non è compatibile con il componente.

Consultare la documentazione del componente per determinare il formato corretto per i dati in file su disco e se il componente prevede il supporto per la conversione in formati diversi.

•	Si è cercato di salvare i dati di un componente su un file, ma il formato dei dati non è compatibile con il formato del file.

Consultare la documentazione del componente per determinare se prevede il supporto per la conversione in formati diversi.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Ordinale non valido (errore 452)

La chiamata di una DLL (libreria a collegamento dinamico) contiene l'indicazione di utilizzare un numero anziché un nome di routine utilizzando la sintassi #num. Cause e soluzioni dell'errore:

•	Non è stato possibile convertire l'espressione num in un ordinale.

Controllare che l'espressione rappresenti un numero valido oppure richiamare la routine utilizzandone il nome.

•	L'argomento num specificato non indica alcuna funzione della DLL.

Controllare che num identifichi una funzione valida della DLL.

•	Una libreria dei tipi include una dichiarazione non valida che comporta l'utilizzo interno di un numero ordinale non valido.

Aggiungere commenti al codice per isolare la chiamata di routine che causa il problema. Scrivere una istruzione Declare per la routine e comunicare il problema al fornitore della libreria di tipi.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Stringa campione non valida (errore 93)

La stringa campione specificata nell'operazione Like di una ricerca non è valida. Causa e soluzione dell'errore:

•	Un esempio di stringa campione non valida è l'elenco di caratteri [a-b, in cui manca la parentesi quadra di chiusura.

Verificare quali caratteri sono ammessi per le espressioni di elenco.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Chiamata di routine o argomento non validi (errore 5)

Una parte della chiamata non è stata completata. Cause e soluzioni dell'errore:

•	È probabile che l'argomento non rientri nell'intervallo dei valori consentiti. La funzione Sin, ad esempio, può accettare solo valori compresi in un determinato intervallo. Gli argomenti positivi minori di 2.147.483.648 vengono accettati, il valore 2.147.483.648 genera invece questo errore.

Verificare quali intervalli sono consentiti per gli argomenti.

•	Questo errore può inoltre essere generato se si cerca di richiamare una routine non valida nella piattaforma attiva. Alcune routine possono essere valide, ad esempio, solo in Macintosh, altre solo in Microsoft Windows e così via.

Controllare la documentazione della piattaforma per informazioni relative alla routine utilizzata.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Indice della matrice di proprietà non valido (errore 381)

È possibile che il valore di una proprietà sia composto da una matrice di valori. Causa e soluzione dell'errore:

•	È possibile che la matrice di proprietà di un componente abbia un limite inferiore di zero e un limite superiore uguale al numero di elementi della matrice meno 1. Oppure, il limite inferiore è 1 e il limite superiore è uguale al numero di elementi della matrice.

Controllare la documentazione del componente per verificare che l'indice rientri nell'intervallo valido per la proprietà specificata.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Utilizzo non valido di Null (errore 94)

Null è un sottotipo di Variant utilizzato per indicare che un elemento non contiene dati validi. Causa e soluzione dell'errore:

•	Si sta cercando di ottenere il valore di una variabile Variant o di un'espressione il cui valore è Null. Ad esempio:

MyVar = Null

For Count = 1 To MyVar

. . .

Next Count

Verificare che la variabile contenga un valore valido.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare argomento predefinito (errore 448)

Non è possibile utilizzare un argomento predefinito nella chiamata di una routine, a meno che non sia specificato nella definizione della routine. Causa e soluzione dell'errore:

•	È stato specificato un argomento predefinito con un nome non previsto nella definizione della routine.

Controllare l'ortografia del nome dell'argomento.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Necessario indice della matrice di proprietà (errore 385)

Il valore di questa proprietà è composta da una matrice anziché da un singolo valore. Causa e soluzione dell'errore:

•	Non è stato specificato l'indice per la matrice di proprietà a cui si è cercato di accedere.

Controllare la documentazione del componente per determinare l'intervallo di indici corretto per la matrice. Specificare un indice appropriato nell'istruzione di accesso alla proprietà.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


L'oggetto non supporta le impostazioni internazionali correnti (errore 447)

Alcuni oggetti non supportano tutte le impostazioni internazionali. Cause e soluzioni dell'errore:

•	L'oggetto a cui si sta cercando di accedere non supporta le impostazioni internazionali impostate per il progetto corrente. Se, ad esempio, sono state impostate le impostazioni internazionali per il francese, è necessario che esse siano supportate dall'oggetto a cui si sta cercando di accedere.

Controllare quali sono le impostazioni internazionali supportate dall'oggetto.

•	Le funzioni per il supporto internazionale dell'oggetto sono basate su una libreria a collegamento dinamico (DLL) o su una risorsa codice Macintosh, ad esempio, Ole2nls.dll, non aggiornata.

Installare una versione aggiornata della DLL che supporti le impostazioni internazionali del progetto corrente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


L'oggetto non supporta argomenti predefiniti (errore 446)

Alcuni oggetti non supportano argomenti predefiniti. Causa e soluzione dell'errore:

•	I metodi dell'oggetto a cui si sta cercando di accedere non supportano argomenti predefiniti.

Quando si eseguono metodi su questo oggetto, è necessario specificare gli argomenti in base alla posizione. Per ulteriori informazioni sulla posizione e sui tipi di argomento, consultare la documentazione dell'oggetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Azione non valida per l'oggetto (errore 445)

Alcuni oggetti non supportano tutte le azioni. Causa e soluzione dell'errore:

•	È stato fatto riferimento ad un metodo o proprietà non supportati da questo oggetto.

Consultare la documentazione dell'oggetto e controllare l'ortografia dei nomi delle proprietà e metodi specificati.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


La routine Property Let non è stata definita e la routine Property Get non ha restituito un oggetto (errore 451)

Alcune proprietà, metodi e operazioni sono valide solo con oggetti Collection. Causa e soluzione dell'errore:

•	È stata specificata un'operazione o una proprietà valida solo per gli insiemi, ma l'oggetto non è un insieme.

Controllare l'ortografia del nome dell'oggetto o della proprietà e controllare se l'oggetto è un oggetto Collection. Controllare, inoltre, la sintassi e l'ortografia degli identificatori del metodo Add utilizzato per aggiungere l'oggetto all'insieme.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Necessario oggetto (errore 424)

I riferimenti a proprietà e metodi richiedono spesso un qualificatore di oggetto esplicito. Cause e soluzioni dell'errore:

•	È stato fatto riferimento ad una proprietà o metodo specificando un qualificatore di oggetto non valido.

Specificare il qualificatore di oggetto se non è stato specificato. Il qualificatore di oggetto può essere omesso quando, ad esempio, si fa riferimento ad una proprietà di un form all'interno del modulo del form stesso, ma deve essere specificato in modo esplicito quando si fa riferimento alla proprietà da un modulo standard.

•	Il qualificatore di oggetto specificato non è riconosciuto come oggetto.

Controllare l'ortografia del qualificatore e assicurarsi che l'oggetto sia riconosciuto nella parte del programma in cui vi è stato fatto riferimento. Nel caso di oggetti Collection, controllare che la sintassi e l'ortografia dei componenti del metodo Add siano corrette.

•	È stato specificato un qualificatore di oggetto valido, ma alcune parti della chiamata includono un errore.

È possibile che l'errore sia causato da un percorso non corretto indicato come argomento per il comando File Apri di una applicazione host. Controllare gli argomenti.

•	Non è stata utilizzata l'istruzione Set per l'assegnazione di un riferimento di oggetto.

Se si assegna il valore restituito da una chiamata CreateObject ad una variabile Variant, l'omissione dell'istruzione Set non comporta necessariamente un errore. Nell'esempio di codice seguente, viene creata un'istanza implicita di Microsoft Excel e la corrispondente proprietà predefinita, ovvero la stringa "Microsoft Excel" viene restituita e assegnata alla variabile Variant RetVal. L'errore viene generato da un tentativo successivo di utilizzare RetVal come riferimento di oggetto:

Dim RetVal	' Variant implicita.

' La proprietà predefinita viene assegnata a

' Type 8 Variant RetVal.

RetVal = CreateObject("Excel.Application")

RetVal.Visible = True	' Si verifica l'errore.

Utilizzare l'istruzione Set per l'assegnazione di un riferimento di oggetto.

•	In casi rari, questo errore viene generato in presenza di un oggetto valido quando si cerca di eseguire un'operazione non valida sull'oggetto. È possibile, ad esempio, che questo errore venga visualizzato se si cerca di assegnare un valore a una proprietà di sola lettura.

Controllare la documentazione dell'oggetto e verificare che l'operazione che si sta cercando di eseguire sia valida.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Variabile oggetto o variabile del blocco With non impostata (errore 91)

La creazione di una variabile oggetto è costituita da due passaggi, ovvero la dichiarazione della variabile oggetto e l'assegnazione di un riferimento valido utilizzando l'istruzione Set. In modo analogo, un blocco With...End With deve essere inizializzato eseguendo il punto di ingresso dell'istruzione With. Cause e soluzioni dell'errore:

•	È stata utilizzata una variabile oggetto che fa riferimento ad un oggetto non valido.

Specificare un riferimento corretto per la variabile oggetto. Se, ad esempio, si omette l'istruzione Set nel codice riportato di seguito viene generato un errore per il riferimento a MyObject:

Dim MyObject As Object	' Crea una variabile oggetto.

Set MyObject = Sheets(1)	' Crea un riferimento di oggetto valido.

MyCount = MyObject.Count	' Assegna il valore Count a MyCount.

•	È stata utilizzata una variabile oggetto impostata su Nothing.

Set MyObject = Nothing	' Rilascia l'oggetto.

MyCount = MyObject.Count	' Crea un riferimento

' all'oggetto rilasciato.

Specificare di nuovo il riferimento per la variabile oggetto. Impostare, ad esempio, un nuovo riferimento all'oggetto utilizzando l'istruzione Set.

•	L'oggetto è valido, ma non è stato possibile impostarlo perché la libreria degli oggetti in cui viene descritto non è stata selezionata nella finestra di dialogo Riferimenti.

Selezionare la libreria degli oggetti nella finestra di dialogo Riferimenti.

•	La destinazione di un'istruzione GoTo è all'interno di un blocco With.

Non passare all'interno di un blocco With. Controllare che il blocco venga inizializzato eseguendo l'istruzione With iniziale.

•	È stata specificata una riga all'interno del blocco With con il comando Imposta istruzione successiva.

Il blocco With deve essere inizializzato eseguendo l'istruzione With iniziale.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore di automazione (errore 440)

Quando si accede a oggetti di automazione, possono essere generati tipi di errore specifici. Causa e soluzione dell'errore:

•	È stato generato un errore durante l'esecuzione di un metodo oppure durante l'accesso o l'impostazione di una proprietà di una variabile oggetto. L'errore è stato segnalato dall'applicazione con la quale è stato creato l'oggetto.

Controllare le proprietà dell'oggetto Err per individuare l'origine e la natura dell'errore. Quando si accede ad un oggetto di automazione, utilizzare l'istruzione On Error Resume Next immediatamente prima dell'istruzione di accesso e controllare se sono stati generati errori immediatamente dopo l'esecuzione dell'istruzione di accesso.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Proprietà o metodo non supportati dall'oggetto (errore 438)

Alcuni oggetti non supportano tutte le proprietà e i metodi. Cause e soluzioni dell'errore:

•	È stato specificato un metodo o proprietà che non esiste per questo oggetto di automazione.

Per ulteriori informazioni sull'oggetto e per controllare l'ortografia di proprietà e metodi, consultare la documentazione relativa all'oggetto.

•	È stata specificata una routine Friend con associazione tardiva.

Il nome di una routine Friend deve essere noto in fase di compilazione. Non può essere utilizzato in una chiamata con associazione tardiva.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Memoria esaurita (errore 7)

È stata richiesta una quantità di memoria superiore a quella disponibile oppure è stato individuato un limite di segmento di 64 KB. Cause e soluzioni dell'errore:

•	Sono aperti troppe applicazioni, documenti o file di origine.

Chiudere tutte le applicazioni, i documenti o i file di origine non necessari.

•	Si sta utilizzando un modulo o routine di dimensioni troppo grandi.

Suddividere i moduli o le routine di grandi dimensioni in più moduli e routine di dimensioni minori. In questo modo non si risparmia memoria, ma si evita di superare i limiti di segmento di 64 KB.

•	Si sta eseguendo Microsoft Windows in modalità standard.

Riavviare Microsoft Windows in modalità avanzata.

•	Si sta eseguendo Microsoft Windows in modalità avanzata e la memoria virtuale è esaurita.

Aumentare la quantità di memoria virtuale liberando spazio su disco o verificando che vi sia sufficiente spazio disponibile.

•	Sono in esecuzione programmi TSR.

Eliminare i programmi TSR.

•	Sono stati caricati troppi driver di periferica.

Eliminare i driver di periferica non necessari.

•	È stato esaurito lo spazio disponibile per le variabili Public.

Ridurre il numero di variabili Public.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Spazio dello stack esaurito (errore 28)

Lo stack è l'area di lavoro della memoria che viene aumentata o ridotta in modo dinamico in base alle richieste del programma. Cause e soluzioni dell'errore:

•	Sono attive troppe chiamate di routine Function, Sub o Property.

Controllare che le routine non siano nidificate su troppi livelli, in particolare nel caso di routine ricorsive, ovvero routine che richiamano se stesse. Controllare inoltre che le routine ricorsive siano concluse correttamente. È possibile individuare le routine attive (nello stack) nella finestra di dialogo Chiamate.

•	Le variabili locali richiedono una quantità di spazio locale maggiore di quella disponibile.

Dichiarare alcune variabili a livello di modulo. È inoltre possibile dichiarare come statiche tutte le variabili della routine facendo precedere l'istruzione Static alle parole chiave Property, Sub o Function. In alternativa è possibile utilizzare l'istruzione Static per dichiarare come statiche singole variabili all'interno delle routine.

•	Sono state specificate troppe stringhe di lunghezza fissa.

Le stringhe di lunghezza fissa richiedono tempi di accesso inferiori rispetto alle stringhe di lunghezza variabile, ma utilizzano uno spazio dello stack maggiore. Nello stack vengono infatti inseriti i dati delle stringhe. Ridefinire alcune stringhe di lunghezza fissa come stringhe di lunghezza variabile. In questo modo, nello stack viene inserita solo la descrizione della stringa (non i dati). È inoltre possibile definire la stringa a livello di modulo perché in questo modo non è richiesto alcuno spazio dello stack. Per impostazione predefinita le variabili dichiarate a livello di modulo sono di tipo Public e pertanto la stringa viene riconosciuta in tutte le routine del modulo.

•	Esistono troppe chiamate di funzioni DoEvents nidificate.

Aprire la finestra di dialogo Chiamate per individuare quali routine sono attive (nello stack).

•	Il codice ha generato un evento a catena.

Un evento a catena viene generato quando si verifica un evento che richiama una routine di eventi già presente nello stack. Questo tipo di evento è simile ad una chiamata di routine ricorsiva non conclusa, ma risulta meno evidente in quanto la chiamata viene eseguita da Visual Basic anziché da una chiamata esplicita nel codice. È possibile individuare le routine attive (nello stack) nella finestra di dialogo Chiamate.

Per visualizzare la finestra di dialogo Chiamate, scegliere il pulsante Chiamate a destra della casella Routine nella finestra Debug oppure scegliere il comando Chiamate.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Spazio stringa esaurito (errore 14)

In Visual Basic è possibile assegnare stringhe di grandi dimensioni. Questo errore può essere generato a causa di altri programmi o delle modalità di gestione delle stringhe. Cause e soluzioni dell'errore:

•	L'errore potrebbe essere causato da espressioni che vengono valutate utilizzando stringhe temporanee. In alcuni sistemi operativi, il codice riportato di seguito, ad esempio, genera l'errore Spazio stringa esaurito:

MyString = "Salve"

For Count = 1 To 100

MyString = MyString & MyString

Next Count

Assegnare la stringa ad una variabile con nome diverso.

•	La memoria del sistema potrebbe essere esaurita e di conseguenza potrebbe non essere stata allocata una stringa.

Rimuovere le applicazioni non necessarie in modo da creare spazio in memoria.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Overflow (errore 6)

Un overflow può essere il risultato di un'assegnazione superiore al valore massimo previsto. Cause e soluzioni dell'errore:

•	Il risultato di un'assegnazione, di un calcolo o di una conversione del tipo di dati ha dimensioni troppo grandi per poter essere rappresentato nell'intervallo di valori consentito per il tipo specifico di variabile.

Assegnare il valore ad una variabile associata ad un tipo di dati che accetta intervalli di valori maggiori.

•	Un'assegnazione ad una proprietà supera il valore massimo consentito per la proprietà.

Assicurarsi che il valore assegnato rientri nell'intervallo consentito per la proprietà.

•	Si è cercato di utilizzare un numero in un calcolo e si è impostato forzatamente il tipo Integer per tale numero, ma il risultato è più grande di un valore Integer. Ad esempio:

    Dim x As Long

    x = 2000 * 365   ' Errore: overflow

Per risolvere il problema, digitare il numero nel seguente modo:

    Dim x As Long

    x = CLng(2000) * 365

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare il percorso (errore 76)

Il percorso di un file include l'indicazione dell'unità più le directory e sottodirectory che individuano la posizione del file. Un percorso può essere relativo o assoluto (completo). Causa e soluzione dell'errore:

•	Nel corso di un'operazione di accesso a un file o a un disco, ad esempio Open, MkDir, ChDir o RmDir, non è stato possibile trovare il percorso specificato.

Specificare di nuovo il percorso.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore di accesso al percorso/file (errore 75)

Nel corso di un'operazione di accesso ad un file o ad un disco, ad esempio Open, MkDir, ChDir o RmDir, non è stato possibile creare un collegamento tra il percorso e il nome del file. Cause e soluzioni dell'errore:

•	Il file non è stato specificato in modo corretto.

Nel nome di un file è possibile includere un percorso completo (assoluto) o relativo. Un percorso completo include il nome dell'unità, se diversa da quella corrente, e l'elenco degli elementi del percorso compresi tra la directory principale e il file. I percorsi non completi sono relativi all'unità o directory correnti.

•	Si è cercato di salvare un file che sostituirebbe un file di sola lettura esistente.

Modificare l'attributo di sola lettura del file di destinazione oppure salvare il file con un diverso nome.

•	Si è cercato di aprire un file di sola lettura in modalità sequenziale Output o Append.

Aprire il file in modalità Input o modificare l'attributo di sola lettura del file.

•	Si è cercato di modificare un progetto Visual Basic in un database o in un documento.

Non è possibile apportare modifiche di progettazione nel progetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Autorizzazione negata (errore 70)

Si è cercato di scrivere su un disco protetto da scrittura o di accedere ad un file bloccato. Cause e soluzioni dell'errore:

•	Si è cercato di aprire un file protetto da scrittura per la modalità sequenziale Output o Append.

Aprire il file in modalità Input o modificare l'attributo di protezione da scrittura del file.

•	Si è cercato di aprire un file su un disco protetto da scrittura per la modalità sequenziale Output o Append.

Rimuovere la protezione da scrittura dal disco o aprire il file in modalità Input.

•	Si è cercato di scrivere su un file bloccato da un altro processo.

Attendere che il file venga sbloccato.

•	Si è cercato di accedere al registro di configurazione, ma le autorizzazioni disponibili non consentono questa operazione.

Nei sistemi Microsoft Windows a 32 bit è necessario che gli utenti dispongano delle autorizzazioni corrette per accedere al registro di sistema. Modificare le autorizzazioni o rivolgersi all'amministratore di sistema.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore della stampante (errore 482)

Causa e soluzione dell'errore:

•	Si è verificato un errore nella stampante, ma non sono state inviate altre informazioni al computer che ha inviato il file in stampa.

È necessario esaminare fisicamente la stampante. Verificare che tutte le connessioni tra il computer e la stampante siano attive. In alcune stampanti vengono visualizzati informazioni sugli errori come "Manca carta", "Offline" e così via.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile eseguire Property Get in fase di esecuzione (errore 393)

Non tutte le proprietà restituiscono informazioni in fase di esecuzione. Causa e soluzione dell'errore:

•	La proprietà a cui si sta cercando di accedere è di sola lettura in fase di esecuzione.

Interrompere l'esecuzione e visualizzare la proprietà in fase di progettazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile eseguire Property Get per proprietà in sola scrittura (errore 394)

Non tutte le proprietà restituiscono informazioni. Causa e soluzione dell'errore:

•	La proprietà a cui si sta cercando di accedere non restituisce informazioni.

Non è possibile determinare lo stato della proprietà.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare proprietà o metodo (errore 423)

Il nome di un oggetto deve corrispondere esattamente alla relativa definizione contenuta nella libreria degli oggetti. Causa e soluzione dell'errore:

•	È stato fatto riferimento ad un oggetto.metodo o oggetto.proprietà, ma non è stato definito il metodo o la proprietà.

Il nome dell'oggetto potrebbe non essere stato specificato correttamente. Per individuare le proprietà e i  metodi definiti per un determinato oggetto, aprire il Visualizzatore oggetti. Selezionare la libreria degli oggetti appropriata per visualizzare un elenco delle proprietà e metodi disponibili.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare la proprietà (errore 422)

Non tutti gli oggetti supportano lo stesso gruppo di proprietà. Causa e soluzione dell'errore:

•	Questo oggetto non supporta la proprietà specificata.

Controllare l'ortografia del nome della proprietà. È inoltre possibile che si stia cercando di utilizzare una proprietà "testo" generica mentre l'oggetto supporta effettivamente una proprietà Caption o una proprietà simile specifica. Controllare la documentazione dell'oggetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile eseguire Property Set in fase di esecuzione (errore 382)

Potrebbe non essere possibile ottenere un riferimento a una proprietà in fase di esecuzione. Causa e soluzione dell'errore:

•	Si è cercato di ottenere un riferimento a una proprietà che è di sola lettura o di sola scrittura in fase di esecuzione.

Poiché è possibile utilizzare un riferimento sia per la lettura che per la scrittura, è necessario che la proprietà supporti entrambe le operazioni in fase di esecuzione per ottenere un riferimento in fase di esecuzione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile utilizzare Property Set per proprietà in sola lettura (errore 383)

Potrebbe non essere possibile ottenere un riferimento a una proprietà in fase di esecuzione. Causa e soluzione dell'errore:

•	Si è cercato di ottenere un riferimento a una proprietà che è di sola lettura in fase di esecuzione.

Poiché è possibile utilizzare un riferimento sia per la lettura che per la scrittura, è necessario che la proprietà supporti entrambe le operazioni in fase di esecuzione per ottenere un riferimento in fase di esecuzione. È possibile utilizzare solo Property Get con questa proprietà.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Property Set non ammessa (errore 387)

Non tutte le proprietà supportano la restituzione di un riferimento. Causa e soluzione dell'errore:

•	Si è cercato di ottenere un riferimento a una proprietà che non restituisce un riferimento.

Limitare l'accesso a questa proprietà con Property Let e Property Get.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Sostituzioni troppo lunghe (errore 746)

Una sostituzione non può superare una lunghezza massima specificata. Causa e soluzione dell'errore:

•	È stata specificata una sostituzione che supera la lunghezza ammessa.

Consultare la documentazione del componente per verificare qual è il limite di lunghezza.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Resume senza Error (errore 20)

Un'istruzione Resume può essere specificata solo in un gestore di errori ed eseguita solo in un gestore di errori attivo. Cause e soluzioni dell'errore:

•	È stata inserita un'istruzione Resume in un punto esterno al codice di gestione degli errori.

Eliminare l'istruzione oppure spostarla in un gestore di errori.

•	Il codice è passato ad un gestore di errori anche se non è stato generato alcun errore.

Un'etichetta di riga potrebbe non essere stata scritta in modo corretto. Non è possibile eseguire passaggi ad etichette tra routine diverse. Eseguire pertanto una ricerca dell'etichetta che identifica il gestore di errori nella routine. Se viene individuata un'etichetta duplicata specificata come destinazione di un'istruzione GoTo diversa da un'istruzione On Error GoTo, modificare l'etichetta di riga in modo che identifichi la destinazione corretta.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Return senza GoSub (errore 3)

Ad un'istruzione Return deve sempre corrispondere un'istruzione GoSub. Causa e soluzione dell'errore:

•	Un'istruzione Return non è seguita dalla corrispondente istruzione GoSub.

Controllare che l'istruzione GoSub non sia stata inavvertitamente eliminata.

A differenza di For...Next, While...Wend e Sub...End Sub, che vengono abbinate in fase di compilazione, GoSub e Return vengono abbinate in fase di esecuzione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare nella DLL la funzione specificata (errore 453)

È stata trovata la libreria a collegamento dinamico (DLL) in un riferimento ad una libreria dell'utente, ma la funzione DLL specificata non è stata trovata nella DLL. Cause e soluzioni dell'errore:

•	Nella dichiarazione di funzione è stato specificato un ordinale non valido.

Specificare un ordinale valido o richiamare la funzione utilizzandone il nome.

•	Alla DLL è stato assegnato il nome corretto, ma potrebbe non essere la versione che contiene la funzione specificata.

La versione corretta della DLL potrebbe essere installata nel sistema, ma nel percorso la relativa directory è indicata dopo la directory contenente la versione non corretta, che verrà pertanto utilizzata. Controllare quali versioni della DLL sono installate nel sistema. Se la versione corretta non è disponibile, è necessario acquistarla.

•	Se si lavora in ambiente Microsoft Windows a 32 bit, devono essere corretti sia il nome della DLL che il relativo alias, se utilizzato.

Controllare che il nome e l'alias della DLL siano corretti.

•	Alcune DLL a 32 bit includono funzioni con versioni leggermente diverse in modo che vengano riconosciute sia stringhe Unicode che ANSI. Se il nome di una funzione termina con una "A", si tratta della versione ANSI, se invece termina con una "W", si tratta della versione Unicode.

Se la funzione accetta argomenti stringa, aggiungere una "A" alla fine del nome della funzione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Espressione troppo complessa (errore 16)

Il numero di sottoespressioni ammesse in un'espressione a virgola mobile varia a seconda delle piattaforme. In sistemi operativi Microsoft Windows a 32 bit, ad esempio, il limite è di otto livelli di espressioni in virgola mobile nidificate. Causa e soluzione dell'errore:

•	Un'espressione a virgola mobile contiene troppe sottoespressioni nidificate.

Suddividere l'espressione in più espressioni separate fino ad evitare l'errore.

Nota   Nelle versioni precedenti di Visual Basic, l'errore 16 era "Espressione stringa troppo complessa". Tale condizione di errore non può più verificarsi. Se si utilizza tuttavia codice di versioni precedenti per l'intercettazione e gestione di tale errore, è necessario rimuoverlo per evitare confusioni con il nuovo errore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare il testo di ricerca (errore 744)

Causa e soluzione dell'errore:

•	Il testo specificato non è stato trovato.

Il testo non esiste.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Sub, Function o Property non definita (errore 35)

Per poter richiamare le routine Sub, Function o Property, è necessario prima definirle. Cause e soluzioni dell'errore:

•	Il nome della routine non è stato scritto correttamente.

Controllare l'ortografia e correggere eventuali errori.

•	La routine è stata richiamata da un altro progetto senza aggiungere un riferimento esplicito al progetto nella finestra di dialogo Riferimenti.

Per aggiungere un riferimento

1.	Visualizzare la finestra di dialogo Riferimenti.

2.	Individuare il nome del progetto contenente la routine che si desidera richiamare. Se il nome del progetto non è incluso nell'elenco, scegliere il pulsante Sfoglia.

3.	Attivare la casella di controllo a sinistra del nome del progetto.

4.	Scegliere OK.

•	La routine specificata non è riconosciuta dalla routine di chiamata.

Le routine dichiarate come Private in un modulo  non possono essere richiamate da routine esterne al modulo. Se Option Private Module è attivata, le routine del modulo non sono disponibili per altri progetti. Cercare la routine.

•	È stata dichiarata una routine di una libreria a collegamento dinamico (DLL) Windows o di una risorsa codice Macintosh non inclusa nella libreria o nella risorsa codice specificata.

•	Controllare il numero ordinale, se utilizzato, o il nome della routine e verificare che la versione della DLL o della risorsa codice Macintosh sia valida. Le routine sono disponibili solo nelle versioni più recenti delle DLL o della risorsa codice Macintosh. Se una versione non aggiornata della DLL o della risorsa codice Macintosh è installata in una directory che nel percorso precede la directory in cui si trova la versione più recente, viene generato un errore. È stato specificato il nome corretto della DLL o della risorsa codice Macintosh, ma questa versione non contiene la funzione specificata.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Indice non compreso nell'intervallo (errore 9)

È possibile avere accesso solo agli elementi delle matrici e ai membri degli insiemi compresi negli intervalli specificati. Cause e soluzioni dell'errore:

•	È stato fatto riferimento ad un elemento di matrice non esistente.

L'indice è maggiore o minore dei valori consentiti per gli indici dall'intervallo specificato oppure la matrice non ha le dimensioni assegnate in questo punto dell'applicazione. Controllare nella dichiarazione della matrice quali sono i limiti massimo e minimo dell'intervallo specificato. Nel caso di matrici che sono state ridimensionate, definire i limiti di accesso utilizzando le funzioni UBound e LBound. Se l'indice è stato specificato come una variabile, controllare l'ortografia del nome della variabile.

•	È stata dichiarata una matrice senza specificare il relativo numero di elementi. L'errore potrebbe, ad esempio, essere generato dal codice seguente:

Dim MyArray() As Integer

MyArray(8) = 234	' Genera l'errore 9.

Gli intervalli di matrice non specificati non vengono definiti in modo implicito come 0-10. Il numero di elementi di una matrice deve essere definito in modo esplicito utilizzando Dim o ReDim.

•	È stato fatto riferimento ad un membro di insieme non esistente.

Utilizzare la struttura For Each...Next anziché specificare gli elementi dell'indice.

•	È stata utilizzata una forma abbreviata di indice che specifica in modo implicito un elemento non valido.

Ad esempio, se si utilizza l'operatore ! con un insieme, l'operatore ! specifica una chiave in modo implicito. Ad esempio, oggetto!nomechiave.valore equivale a oggetto.elemento(nomechiave).valore. In questo caso, verrà generato un errore se nomechiave rappresenta una chiave non valida nell'insieme. Per risolvere il problema. utilizzare un nome di chiave o un indice validi per l'insieme.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il componente non supporta questo gruppo di eventi (errore 459)

Non tutti i componenti supportano l'elaborazione client degli eventi. Causa e soluzione dell'errore:

•	Si è cercato di utilizzare una variabile WithEvents con un componente che non supporta il gruppo specificato di eventi. È possibile, ad esempio, che sia stato eseguito il tentativo di trasmettere gli eventi di un oggetto e quindi si sia creato un altro oggetto utilizzando Implements per il primo oggetto. Sebbene si possa supporre che sia possibile ereditare gli eventi dall'oggetto implementato, ciò non avviene automaticamente. Implements consente unicamente di implementare un'interfaccia per metodi e proprietà.

Non è possibile utilizzare gli eventi per un componente che non li supporta.

•	WithEvents non è supportato per oggetti UserControl privati. In fase di esecuzione infatti le informazioni sul tipo necessarie per attivare ObjectEvent non sono disponibili.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Troppe applicazioni client DLL (errore 47)

La libreria a collegamento dinamico (DLL) di Visual Basic consente solo l'accesso contemporaneo di 50 applicazioni host. Causa e soluzione dell'errore:

•	L'applicazione e altre applicazioni host a cui l'applicazione ha accesso hanno cercato di accedere alla DLL di Visual Basic contemporaneamente.

Ridurre il numero di applicazioni aperte che hanno accesso a Visual Basic.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Troppi file (errore 67)

Esiste un limite al numero di file su disco che possono essere aperti contemporaneamente. Cause e soluzioni dell'errore:

•	Sistema operativo MS-DOS: nella directory principale è stato creato un numero di file superiore al numero massimo consentito.

Il sistema operativo MS-DOS prevede un numero massimo di file per la directory principale (in genere 512). Se nel programma in uso si stanno aprendo, chiudendo o salvando file nella directory principale, apportare le modifiche necessarie al programma in modo che venga utilizzata una sottodirectory.

•	Sistema operativo MS-DOS: è stato aperto un numero di file maggiore del numero massimo specificato dall'impostazione files= nel file Config.sys.

Aumentare il valore impostato in files= nel file Config.sys e riavviare il computer.

•	Macintosh: nel programma in uso si è cercato di aprire più di 40 file.

In Macintosh, il numero massimo standard è pari a 40 file. È possibile modificare questo valore utilizzando un'utilità che consente di modificare il parametro MaxFiles nel blocco di avvio.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Tipo non corrispondente (errore 13)

In Visual Basic è possibile eseguire conversioni e assegnazioni del tipo di dati con valori non consentiti in versioni precedenti. Questo errore può tuttavia essere generato ugualmente. Cause e soluzioni dell'errore:

•	Il tipo della variabile o proprietà non è corretto. Una variabile che richiede un valore intero, ad esempio, non accetta un valore stringa a meno che l'intera stringa non venga riconosciuta come intero.

Assegnare solo tipi di dati compatibili. È sempre possibile, ad esempio, assegnare un tipo Integer ad un tipo Long, un tipo Single ad un tipo Double, e qualsiasi tipo ad un tipo Variant, ad eccezione di un tipo definito dall'utente.

•	È stato passato un oggetto ad una routine che prevede una proprietà o valore di tipo Single.

Passare la proprietà o richiamare un metodo adeguati per l'oggetto.

•	È stato utilizzato un nome di modulo o di progetto dove era prevista un'espressione. Esempio:

Debug.Print MyModule

Specificare un'espressione visualizzabile.

•	Si è cercato di utilizzare metodi tradizionali di gestione degli errori Basic con valori Variant caratterizzati dal sottotipo Error (10, vbError). Esempio:

Error CVErr(n)

Per rigenerare un errore, è necessario abbinarlo ad un errore Visual Basic intrinseco o definito dall'utente e quindi generarlo.

•	Non è possibile convertire un valore CVErr in valore Date. Esempio:

MyVar = CDate(CVErr(9))

Utilizzare un'istruzione Select Case o una struttura simile per abbinare il risultato di CVErr a tale valore.

•	In fase di esecuzione, questo errore in genere indica che un valore Variant utilizzato in un'espressione è caratterizzato da un sottotipo non corretto o che è stato utilizzato un valore Variant contenente una matrice in un'istruzione Print #.

Per stampare matrici, è necessario creare un ciclo che visualizzi ciascun elemento singolarmente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Interruzione dell'utente (errore 18)

Il processo di interruzione dell'esecuzione è utile, ma se non viene gestito correttamente può comportare la terminazione dell'applicazione. Causa e soluzione dell'errore:

•	Un utente ha premuto CTRL+INTERR o un altro tasto di interruzione.

Continuare l'esecuzione in ambiente di sviluppo. Per prevedere il verificarsi di questa condizione in fase di esecuzione, gestire l'errore nel modo appropriato.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


La variabile utilizza un tipo non supportato in Visual Basic (errore 458)

Non tutte le variabili incluse in una libreria dei tipi o in una libreria degli oggetti possono essere utilizzate da tutti i linguaggi di programmazione. Causa e soluzione dell'errore:

•	Si è cercato di utilizzare una variabile definita in una libreria dei tipi o in una libreria degli oggetti che ha un tipo di dati non supportato da Visual Basic.

Non è possibile utilizzare in un programma Visual Basic una variabile di un tipo non riconosciuto da Visual Basic.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Numero errato di argomenti o assegnazione di proprietà non valida (errore 450)

Il numero di argomenti di una routine deve corrispondere al numero di parametri indicato nella definizione della routine. Cause e soluzioni dell'errore:

•	Il numero di argomenti nella chiamata della routine è diverso dal numero di argomenti previsti dalla routine.

Confrontare l'elenco degli argomenti nella chiamata con gli argomenti indicati nella dichiarazione o nella definizione della routine.

•	È stato specificato un indice per un controllo che non fa parte di una matrice di controlli.

L'indicazione dell'indice viene interpretata come argomento, ma viene generato l'errore poiché non sono previsti indici o argomenti. Rimuovere l'indice oppure seguire la procedura per la creazione di una matrice di controlli, ovvero impostare la proprietà Index su un valore diverso da zero nella scheda o nella finestra delle proprietà in fase di progettazione.

•	Si è cercato di assegnare un valore ad una proprietà in sola lettura oppure si è cercato di assegnare un valore ad una proprietà per cui non esiste una routine Property Let.

L'assegnazione di un valore ad una proprietà equivale a passare il valore come argomento alla routine Property Let dell'oggetto. Definire la routine Property Let in modo corretto. È necessario che includa un argomento in più rispetto alla routine Property Get corrispondente. Se la proprietà è in sola lettura, non è possibile assegnarle un valore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il componente ActiveX non è in grado di creare l'oggetto o di restituire un riferimento a questo oggetto (errore 429)

Per poter creare oggetti è necessario che la classe dell'oggetto sia registrata nel registro di sistema e che siano disponibili le eventuali librerie a collegamento dinamico (DLL) associate. Cause e soluzioni dell'errore:

•	La classe non è registrata. Nel database di registrazione di sistema, ad esempio, la classe non è citata oppure è citata ma specifica un file di tipo non corretto o un file che non è possibile trovare.

Se possibile, avviare l'applicazione oggetto. Se le informazioni contenute nel database di registrazione non sono aggiornate oppure non sono corrette, l'applicazione dovrebbe verificarle e correggerle automaticamente. Se anche dopo aver avviato l'applicazione il problema sussiste, rieseguire il programma di installazione dell'applicazione.

•	Non è possibile utilizzare una DLL richiesta dall'oggetto perché non viene trovata oppure è danneggiata.

Verificare che tutte le DLL associate siano disponibili. Un oggetto di accesso ai dati (DAO), ad esempio, richiede DLL di supporto diverse a seconda della piattaforma. Potrebbe essere necessario rieseguire il programma di installazione.

•	L'oggetto è disponibile nel computer ma si tratta di un oggetto di automazione con licenza e non è possibile verificare che sia disponibile la licenza necessaria per crearne un'istanza.

Per alcuni oggetti è possibile creare istanze solo se il server individua le informazioni di licenza necessarie per verificare che l'oggetto sia correttamente registrato nel computer in uso. Se si fa riferimento ad un oggetto utilizzando una libreria dei tipi o una libreria degli oggetti correttamente installati, le informazioni di licenza corrette verranno fornite automaticamente

Se tuttavia il tentativo di creazione dell'istanza è il risultato di una chiamata CreateObject o GetObject, è necessario che l'oggetto trovi le informazioni, cercandole nel database di registrazione di sistema o cercando un file specifico, quale ad esempio un file con estensione LIC, creato durante l'installazione. Se non è possibile trovare le informazioni, non sarà possibile creare un'istanza dell'oggetto. È inoltre possibile che non tutte le informazioni dell'oggetto vengano trovate se un utente non ha installato correttamente l'applicazione oggetto, ha eliminato inavvertitamente un file necessario o ha modificato il database di registrazione di sistema. Se le informazioni non vengono trovate, non sarà possibile creare un'istanza dell'oggetto e in questo caso la procedura potrebbe funzionare correttamente nel sistema dello sviluppatore ma non nel sistema dell'utente. In questi casi potrebbe essere necessario reinstallare l'oggetto con licenza.

•	Si sta cercando di utilizzare la funzione GetObject per recuperare un riferimento ad una classe creata con Visual Basic.

Non è possibile utilizzare GetObject per ottenere un riferimento ad una classe creata con Visual Basic.

•	L'accesso all'oggetto è stato negato in modo esplicito.

È possibile, ad esempio, che si sia cercato di accedere ad un oggetto già in uso e protetto per evitare blocchi. In questi casi, è sufficiente rimandare il tentativo di accesso all'oggetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Valore di proprietà non valido (errore 380)

La maggior parte delle proprietà accetta valori solo di un tipo specifico, entro un determinato intervallo. Causa e soluzione dell'errore:

•	È stato assegnato un valore non appropriato a una proprietà.

Consultare l'argomento della Guida relativo alla proprietà per determinare i tipi e i valori ammessi per la proprietà.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Immagine non valida (errore 481)

Solo un'immagine può essere assegnata alla proprietà Picture o all'oggetto Picture. Causa e soluzione dell'errore:

•	Si è cercato di assegnare qualcosa a una proprietà Picture o a un oggetto Picture che non è riconosciuto come icona, bitmap o metafile di Microsoft Windows.

Consultare gli argomenti della Guida relativi all'oggetto Picture o alla proprietà Picture dell'oggetto che si sta utilizzando per determinare quali sono i tipi di immagine validi.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Formato non valido nel file di risorse (errore 325)

Quando si accede a un file di risorse, le risorse che si cerca di recuperare devono avere un formato valido. Causa e soluzione dell'errore:

•	Il file di risorse che si sta cercando di recuperare ha un formato non valido o una risorsa specifica nel file ha un formato non valido.

Se il contenuto del file è stato danneggiato, reinstallare il file dal disco originale. Se l'errore persiste, rivolgersi al fornitore della risorsa per ottenere un nuovo file o una versione della risorsa nel formato previsto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Questa chiave è già associata ad un elemento dell'insieme (errore 457)

Una chiave è una stringa specificata nel metodo Add che identifica in modo univoco un membro specifico di un insieme. Causa e soluzione dell'errore:

•	È stata specificata una chiave per un membro di un insieme che identifica già altri membri dell'insieme.

Scegliere una chiave diversa per questo membro.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Questa matrice è fissa o temporaneamente bloccata (errore 10)

Non tutte le matrici possono essere ridimensionate. Anche le matrici dichiarate in modo specifico come dinamiche e le matrici di variabili Variant a volte sono bloccate temporaneamente. Cause e soluzioni dell'errore:

•	Si è cercato di utilizzare ReDim per modificare il numero di elementi di una matrice fissa. Nel codice seguente, ad esempio, la matrice fissa FixedArr viene ricevuta da SomeArr nella routine NextOne e si cerca di ridimensionare SomeArr:

Sub FirstOne

Dim FixedArr(25) As Integer	' Crea una matrice fissa

NextOne FixedArr()	' e la passa a un'altra routine.

End Sub

Sub NextOne(SomeArr() As Integer)

ReDim SomeArr(35)	' Qui viene generato l'errore 10.

. . .

End Sub

Impostare la matrice originale come dinamica anziché come fissa dichiarandola con ReDim (se la matrice è dichiarata in una routine) oppure dichiarandola senza specificare il numero di elementi (se la matrice è dichiarata a livello di modulo).

•	Si è cercato di ridimensionare una matrice dinamica a livello di modulo, in cui un elemento è stato passato come argomento a una routine. Ad esempio, nel codice seguente ModArray è una matrice dinamica a livello di modulo, il cui quarantacinquesimo elemento viene passato per riferimento alla routine Test:

Dim ModArray () As Integer	' Crea una matrice dinamica a livello di modulo.

. . .

Sub AliasError()

ReDim ModArray (1 To 73) As Integer

Test ModArray (45)	' Passa un elemento della matrice

' a livello di modulo alla routine Test.

End Sub

Sub Test(SomeInt As Integer)

ReDim ModArray (1 To 40) As Integer  ' Qui viene generato l'errore 10.

End Sub

Non è necessario passare un elemento della matrice a livello di modulo in questo caso, poiché è visibile in tutte le routine del modulo. Tuttavia, se viene passato un elemento la matrice viene bloccata per evitare la deallocazione di memoria per il parametro di riferimento nella routine, con conseguenze imprevedibili al termine della routine.

•	Si è cercato di assegnare un valore a una variabile Variant che contiene una matrice, ma la variabile Variant è bloccata. Ad esempio, se il codice utilizza un ciclo For Each...Next per iterare in una variabile Variant che contiene una matrice, la matrice viene bloccata all'entrata nel ciclo e quindi rilasciata al termine del ciclo:

SomeArray = Array(9,8,7,6,5,4,3,2,1)

For Each X In SomeArray

SomeArray = 301	' Causa l'errore perché la matrice è bloccata.

Next X

Utilizzare For...Next anziché un ciclo For Each...Next per eseguire l'iterazione. Quando una matrice è l'oggetto di un ciclo For Each...Next è possibile leggere la matrice ma non scrivere in essa.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare nome di file o nome di classe durante un'operazione di automazione (errore 432)

La funzione GetObject richiede un nome di file valido con una specifica di percorso o il nome di una classe registrata nel sistema. Causa e soluzione dell'errore:

•	Impossibile trovare il nome specificato per il file o la classe in una chiamata alla funzione GetObject.

Controllare i nomi e riprovare. Verificare che il nome utilizzato per il parametro classe corrisponda a quello registrato nel sistema.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


L'oggetto di automazione non ha un valore predefinito (errore 443)

Quando si specifica un nome di oggetto senza una proprietà o un metodo, Visual Basic presume che si stia facendo riferimento al membro predefinito dell'oggetto (proprietà o metodo). Tuttavia, non tutti gli oggetti espongono un membro predefinito. Causa e soluzione dell'errore:

•	Visual Basic non riesce a determinare il membro predefinito dell'oggetto specificato.

Controllare la documentazione dell'oggetto e specificare in modo esplicito la proprietà o il metodo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il computer server remoto non esiste o non è disponibile (errore 462)

La funzione CreateObject richiede un server valido. Causa e soluzione dell'errore:

•	È stato specificato un parametro di server, ma non è stato possibile raggiungere o trovare il server corrispondente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Classe non registrata nel computer locale (errore 463)

La funzione CreateObject richiede un server valido. Causa e soluzione dell'errore:

•	È stato specificato un parametro di server, ma il valore ProgID (ID programmatico) specificato, che corrisponde al primo parametro della funzione CreateObject, non è registrato nel sistema locale.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare il metodo o il membro dei dati (errore 461)

L'insieme, l'oggetto o il tipo definito dall'utente non include il membro a cui viene fatto riferimento. Cause e soluzioni dell'errore:

•	Il nome del membro o dell'oggetto non è stato scritto correttamente.

Controllare che il nome specificato sia corretto. Verificare l'istruzione Type o consultare la documentazione degli oggetti per stabilire quali sono i membri disponibili e il nome corretto di membri o oggetti.

•	È stato specificato un indice di insieme non compreso nell'intervallo di valori validi.

Verificare la proprietà Count per stabilire se un membro di insieme esiste o meno. Si noti che gli indici di insieme iniziano da 1 anziché da zero. Di conseguenza, la proprietà Count restituirà il numero di indice massimo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


<Elemento> non è un tipo di controllo valido (errore 720)

È possibile assegnare come controlli di form soltanto componenti ActiveX validi. Causa e soluzione dell'errore:

•	Si è cercato di assegnare come controllo di un form un componente ActiveX non riconosciuto come componente controllo valido.

Consultare gli argomenti della Guida relativi alla creazione di controlli ActiveX per determinare quali sono i requisiti dei controlli validi.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore imprevisto. L'esecuzione verrà terminata

Si è verificato un errore imprevisto e non è possibile continuare l'esecuzione di Visual Basic. L'errore può essere dovuto a problemi hardware o ad altre applicazioni del sistema.


I valori validi sono numeri interi compresi tra 1 e 32

Si è cercato di impostare un valore non compreso nell'intervallo consentito nel campo Tabulazione. Per questo campo è necessario specificare un numero compreso tra 1 e 32 inclusi.


I valori validi sono numeri interi compresi tra 2 e 60

Si è cercato di impostare un valore non compreso nell'intervallo consentito nei campi Altezza e Larghezza relativi alla griglia. In questi campi è necessario specificare un valore compreso tra 2 e 60 inclusi.


L'elemento specificato è un form binario. Impossibile caricarlo in Visual Basic

Non è possibile caricare in questa versione di Visual Basic i form binari creati con versioni precedenti del programma. La conversione dei form binari in formato ASCII è infatti supportata solo dalle versioni 2.0 e 3.0 di Visual Basic. Se è disponibile una copia di Visual Basic versione 2.0 o 3.0, è possibile caricare il form creato con la versione 1.0, 2.0 o 3.0 e quindi salvarlo come testo. Sarà quindi possibile importare il form in Visual Basic.


Il file di progetto è in sola lettura

Non è possibile scrivere nel file di progetto. Per modificarlo, è necessario salvarlo con un nome differente o rimuovere l'attributo di sola lettura.


Il file è in sola lettura

Non è possibile scrivere nel file. Per modificarlo, è necessario salvarlo con un nome differente o rimuovere l'attributo di sola lettura.


Routine già esistente

I nomi delle routine che hanno la stessa area di validità devono essere univoci. Modificare il nome della routine.


Il file di progetto specificato contiene un valore di chiave non valido. I valori validi sono compresi nell'intervallo da 0 a 'elemento3'

L'intervallo dei valori di chiave è limitato. Utilizzare un valore di chiave che rientra nell'intervallo specificato.


Nome del progetto troppo lungo. Il nome è stato abbreviato

Se un nome di progetto supera la lunghezza consentita, verrà abbreviato in modo da rientrare nel limite massimo consentito.


Il file di progetto specificato contiene un valore di chiave non valido. Impossibile caricare il progetto

Non è possibile caricare il progetto se il file di progetto contiene la chiave non valida.


L'elemento specificato non è una chiave valida. Impossibile caricare il file specificato

Non è possibile caricare il file se contiene la chiave non valida.


Il file di progetto specificato contiene un valore di chiave non valido

Il valore della chiave specificato non è valido. È necessario modificarlo.


Memoria insufficiente per l'esecuzione. L'esecuzione verrà terminata

Non è disponibile la quantità di memoria necessaria per l'esecuzione di Visual Basic. Chiudere altre applicazioni e riprovare.


Versione errata del sistema operativo. È necessaria la build specificata di Windows NT 3.51 o di Windows 95

Per utilizzare questa versione di Visual Basic, è necessario eseguire la versione specificata di Windows 95 o di Windows NT 3.51.


Si è verificato l'errore di sistema specificato

Si è verificato un errore generato dal sistema o da un componente esterno.


La versione del file specificato non è supportata da questa versione di Visual Basic. Il file non verrà caricato

Si è cercato di caricare un form di Visual Basic versione 1.0 oppure di una versione successiva non supportato.


Il file di progetto specificato è danneggiato ed è impossibile caricarlo

Non è possibile leggere il file di progetto. Ciò può dipendere dal fatto che il file è stato modificato da un editor esterno a Visual Basic. Per risolvere il problema, annullare le modifiche apportate al file.


Impossibile scrivere nel file cache specificato della finestra di progettazione. Per il caricamento verranno utilizzati file normali

La finestra di progettazione ActiveX non è stata in grado di scrivere i dati in un file cache e quindi verrà caricata utilizzando dati di file normali.

La scrittura dei dati in un file cache consente di migliorare le prestazioni al successivo avvio di Visual Basic. La finestra di progettazione non è stata in grado di scrivere nel file cache a causa di memoria insufficiente o di autorizzazioni non appropriate per l'unità. Accertarsi di disporre di spazio sufficiente e delle autorizzazioni di scrittura appropriate per l'unità. Se il problema persiste, contattare il fornitore del controllo ActiveX.


Memoria insufficiente per caricare il file

Non è disponibile la quantità di memoria necessaria per caricare il file. Chiudere altre applicazioni e riprovare.


Nome di routine già esistente

Sono state definite (oppure si è cercato di definire) più versioni di una routine con lo stesso nome. Rinominare una delle routine e verificare che i duplicati di istruzioni Declare per la stessa routine abbiano la stessa proposizione Alias.


Impossibile visualizzare la Guida

L'applicazione della Guida di Windows non è disponibile. Se nel computer in uso è disponibile il visualizzatore di MSDN Library viewer, verificare che sia stato specificato nel percorso. In caso contrario, per poter visualizzare la Guida è necessario installare il visualizzatore.


Impossibile visualizzare informazioni di sistema

Non è possibile visualizzare le informazioni sul sistema quando si sceglie System Info nella finestra di dialogo Informazioni su Microsoft Visual Basic. È possibile che la memoria di sistema disponibile sia insufficiente oppure un file richiesto può essere danneggiato o mancante.


La descrizione dell'applicazione non può essere composta da più di 2000 caratteri

La descrizione di un'applicazione non può includere più di 2000 caratteri. Eliminare alcuni caratteri dalla descrizione.


È necessario specificare gli elementi da stampare

Non è stato specificato alcun elemento da stampare. Selezionare almeno una delle caselle di controllo relative al form o al codice all'interno della finestra di dialogo Stampa dopo aver scelto Stampa dal menu File.


Il nome specificato non è un nome di oggetto valido

I nomi dei form e dei controlli devono iniziare con una lettera e possono contenere al massimo 40 caratteri, incluse lettere, numeri e caratteri di sottolineatura (_).

Si noti che la proprietà Name di un form o di un controllo si differenzia dalle proprietà Label, ovvero Caption, Text e Value, che consentono di assegnare un'etichetta ad un controllo oppure di visualizzarne il contenuto in fase di esecuzione. I nomi di tali proprietà possono corrispondere a parole chiave riservate, iniziare con un numero e contenere caratteri non alfanumerici.


Il nome specificato è in conflitto con un modulo, un progetto o una libreria degli oggetti esistente

Cause dell'errore:

•	È stato caricato un form, un controllo utente, un documento utente o una pagina delle proprietà contenente oggetti i cui nomi sono in conflitto. È probabile che il file sia stato modificato all'esterno di Visual Basic.

•	È possibile che sia stato rinominato un form assegnandovi lo stesso nome del progetto, di un altro form o di un modulo, oppure che sia stato rinominato il progetto assegnandovi lo stesso nome di un form o di un modulo.


Impossibile assegnare il nome al progetto in questa fase

In questa fase non è possibile assegnare un nome al progetto.


Componente ActiveX registrato non correttamente o non trovato

Il componente specificato deve essere registrato nel registro di configurazione del sistema. Causa e soluzione dell'errore:

•	Le informazioni del registro di configurazione del componente non sono corrette e di conseguenza non è possibile individuare il componente.

Correggere il registro di configurazione e se necessario reinstallare il componente.

•	Il componente è stato rimosso tramite un'operazione di eliminazione anziché eseguire il programma di disinstallazione.

Sostituire i file del componente nella directory specificata nel registro di configurazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure il tasto AIUTO (in Macintosh).


Il progetto è protetto. Impossibile eseguire l'operazione

Quando un progetto è protetto, non è possibile eseguire determinate operazioni. Causa e soluzione dell'errore:

•	Il progetto è stato protetto inavvertitamente.

Rimuovere la protezione e rieseguire l'azione.

•	Il progetto è stato protetto volutamente.

Rieseguire l'operazione soltanto dopo la rimozione della protezione da parte dell'utente che l'ha applicata.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure il tasto AIUTO (in Macintosh).


Impossibile avviare una nuova registrazione fino al termine della sessione corrente

Non è possibile "nidificare" registrazioni. Causa e soluzione dell'errore:

•	Il registratore è già in esecuzione.

Prima di avviare una nuova registrazione, interrompere quella corrente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure il tasto AIUTO (in Macintosh).


Esportare l'oggetto specificato prima di rimuoverlo?

È possibile esportare form e moduli e caricarli in un momento successivo. Causa e soluzione dell'errore:

•	Si è cerato di rimuovere un form o un modulo dal progetto.

Per conservare il modulo, esportarlo. Sarà quindi possibile importarlo in un momento successivo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure il tasto AIUTO (in Macintosh).


La classe di form inclusa nel file specificato non è supportata in Visual Basic, Applications Edition. Impossibile caricare il file

Visual Basic, Applications Edition supporta soltanto oggetti form UserForm. Causa e soluzione dell'errore:

•	Si è cercato di caricare un form di una precedente versione di Visual Basic oppure un form di una versione autonoma di Visual Basic.

In questo caso risulta più conveniente riprogettare il form tramite gli strumenti UserForm disponibili in Visual Basic, Applications Edition. I form che è possibile salvare in formato ASCII possono essere modificati e importati. È tuttavia necessario capire a fondo i formati e le limitazioni dei vari pacchetti di form.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure il tasto AIUTO (in Macintosh).


Impossibile caricare il file specificato

Non tutti i file sono caricabili in Visual Basic, Applications Edition. Causa e soluzione dell'errore:

•	Il formato del file che si desidera caricare non è riconosciuto in Visual Basic oppure il file è danneggiato.

Non è possibile caricare il file.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure il tasto AIUTO (in Macintosh).


Con questo comando verranno interrotte le operazioni di debug

Quando si eseguono determinati comandi e operazioni, l'analisi del codice Visual Basic viene interrotta. Causa e soluzione dell'errore:

•	Quando si apportano determinate modifiche, ad esempio la dichiarazione di una variabile Static, o si eseguono determinati comandi, ad esempio i comandi per l'aggiunta di un nuovo modulo o form, il codice in esecuzione o sospeso viene interrotto.

Se si desidera che l'esecuzione del codice non sia interrotta, non aggiungere o eseguire il comando.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure il tasto AIUTO (in Macintosh).


Impossibile aggiungere un riferimento a un progetto non salvato

Non è possibile aggiungere un riferimento a un progetto che non è stato ancora salvato. Causa e soluzione dell'errore:

•	Si è cercato di aggiungere un riferimento a un progetto che non è ancora stato salvato.

Salvare il progetto, quindi aggiungere il riferimento.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure il tasto AIUTO (in Macintosh).


Utilizzo non valido dell'oggetto (errore 425)

La maggior parte degli oggetti può essere utilizzata solo in modi specifici, specialmente nel caso in cui si cerchi di utilizzare un oggetto al di fuori della relativa area di validità. È probabile, ad esempio, che un riferimento a un oggetto passato in un evento di selezione e trascinamento possa essere utilizzato solo all'interno del contesto di tale evento.


Impossibile stampare l'immagine del form su questo tipo di stampante (errore 486)

Per stampare l'immagine di un form è necessario che la stampante in uso sia in grado di stampare elementi di grafica.


Impossibile utilizzare l'oggetto specificato come form proprietario per Show() (errore 371)

Per il metodo Show è necessario utilizzare un oggetto appropriato.


Impossibile trovare il controllo ActiveX specificato (errore 363)

Il form che viene caricato contiene un controllo ActiveX che non è disponibile nel progetto corrente. Cause e soluzioni dell'errore:

•	È possibile che il file vbp del progetto sia stato modificato manualmente per aggiungervi un form contenente un controllo ActiveX che non fa ancora parte del progetto.

Dopo che il progetto è stato caricato, utilizzare il comando Aggiungi file del menu File per aggiungere il controllo ActiveX al progetto.

•	È possibile che il file vbp del progetto sia stato modificato manualmente per aggiungervi un form contenente un controllo ActiveX che è una versione precedente del controllo ActiveX già presente nel progetto.

Dopo che il progetto è stato caricato, eliminare la versione precedente del controllo dal form e posizionare la versione più recente del controllo nel form.


Componente ActiveX non registrato correttamente (errore 336)

Il componente ActiveX non è stato registrato in modo corretto nel registro di configurazione del sistema.


Impossibile trovare il valore dati (errore 327)

Non è stato possibile trovare il valore dei dati.


Immagine non valida (errore 481)

È stato assegnato un formato grafico non valido alla proprietà Picture. Causa e soluzione dell'errore:

•	Si è cercato di assegnare un formato grafico diverso dal formato bitmap, icona o metafile di Windows alla proprietà Picture di un form o di un controllo.

Accertarsi che il file che si cerca di caricare nella proprietà Picture sia un file di grafica supportato da Visual Basic.


Errore della stampante (errore 482)

Si è verificato un problema che impedisce la stampa. Cause e soluzioni dell'errore:

•	Non è stata installata alcuna stampante dal Pannello di controllo di Windows.

Aprire il Pannello di controllo, fare doppio clic sull'icona Stampanti e quindi fare clic sul pulsante Aggiungi per installare una stampante.

•	La stampante non è in linea.

Accendere la stampante.

•	La stampante è inceppata oppure manca carta.

Sbloccare la stampante o aggiungere carta.

•	Si è cercato di stampare un form su una stampante in grado di stampare solo testo.

Passare a una stampante in grado di stampare grafica.


Il driver della stampante non supporta la proprietà specificata (errore 483)

Il driver della stampante in uso non supporta questa proprietà dell'oggetto Printer. Causa e soluzione dell'errore:

•	L'effetto delle proprietà dell'oggetto Printer dipende dal driver in dotazione con la stampante. Alcune impostazioni potrebbero non avere alcun effetto oppure più proprietà potrebbero avere tutte lo stesso effetto. Le impostazioni non comprese nell'intervallo dei valori accettabili potrebbero o meno generare un errore.

Per ulteriori informazioni, vedere la documentazione specifica del driver in uso.


Problemi di recupero delle informazioni sulla stampante nel sistema. Verificare che la stampante sia impostata correttamente (errore 484)

Esiste qualche problema che impedisce di ottenere dal sistema informazioni sulla stampante. Cause e soluzioni dell'errore:

•	Non è stata installata alcuna stampante nel Pannello di controllo di Windows.

Aprire il Pannello di controllo, fare doppio clic sull'icona Stampanti e fare clic sul pulsante Aggiungi per installare una stampante.

•	La stampante non è in linea.

Accendere la stampante.

•	La stampante è inceppata oppure non è in linea.

Sbloccare la stampante o aggiungere carta.


Tipo di immagine non valido (errore 485)

Il formato immagine del file di risorse che si è cercato di caricare non corrisponde alla proprietà dell'oggetto specificata. Cause e soluzioni dell'errore:

•	Si è cercato di utilizzare il metodo LoadResPicture per caricare una risorsa bitmap come proprietà Icon di un form.

Impostare la proprietà sulla proprietà Picture oppure modificare l'argomento formato di LoadResPicture impostandolo su vbResIcon.

•	Si è cercato di utilizzare il metodo LoadResPicture per caricare una risorsa cursore come proprietà di un oggetto o controllo diversa dalla proprietà MousePointer.

Sostituire il riferimento alla proprietà MousePointer.


Impossibile svuotare gli Appunti (errore 520)

L'oggetto Clipboard è stato aperto, ma non è possibile svuotarlo. Causa e soluzione dell'errore:

•	L'oggetto Clipboard è già utilizzato da un'altra applicazione e pertanto non è disponibile.

Impostare nel codice un'intercettazione di errore per questo tipo di situazione e fornire una finestra di messaggio in cui siano disponibili i pulsanti Riprova e Annulla per consentire di riprovare.


Impossibile aprire gli Appunti (errore 521)

L'oggetto Clipboard è già stato aperto da un'altra applicazione. Causa e soluzione dell'errore:

•	L'oggetto Clipboard è già utilizzato da un'altra applicazione e pertanto non è disponibile.

Impostare nel codice un'intercettazione di errore per questo tipo di situazione e fornire una finestra di messaggio in cui siano disponibili i pulsanti Riprova e Annulla per consentire di riprovare.


Il formato specificato non corrisponde al formato dei dati (errore 461)

Il formato Clipboard specificato non è compatibile con il metodo in esecuzione. Cause e soluzioni dell'errore:

•	Si è cercato di utilizzare il metodo GetText o SetText con un formato Clipboard diverso da vbCFText o vbCFLink.

Prima di utilizzare questi metodi, eseguire il metodo GetFormat per verificare se il contenuto corrente di Clipboard corrisponde al formato specificato.

•	Si è cercato di utilizzare il metodo GetData o SetData con un formato Clipboard diverso da vbCFBitmap, vbCFDIB o vbCFMetafile.

Prima di utilizzare questi metodi, eseguire il metodo GetFormat per verificare se il contenuto corrente di Clipboard corrisponde al formato grafico specificato.


Formato degli Appunti non valido (errore 460)

Il formato Clipboard specificato non è compatibile con il metodo in esecuzione. Cause e soluzioni dell'errore:

•	Si è cercato di utilizzare il metodo GetText o SetText con un formato Clipboard diverso da vbCFText o vbCFLink.

Rimuovere il formato non valido e specificare uno dei due formati validi.

•	Si è cercato di utilizzare il metodo GetData o SetData con un formato Clipboard diverso da vbCFBitmap, vbCFDIB o vbCFMetafile.

Rimuovere il formato non valido e specificare uno dei tre formati grafici validi.


Non sono disponibili informazioni sui diritti di licenza per questo componente. Non sono disponibili i diritti di licenza necessari per utilizzare questa funzione in ambiente di progettazione (errore 429)

Non si dispone della licenza per l'utilizzo di questo controllo ActiveX. Cause e soluzioni dell'errore:

•	Si è cercato di aggiungere in un form un controllo ActiveX in fase di progettazione oppure si è cercato di aggiungere un form che include un controllo ActiveX a un progetto, ma non è possibile trovare le informazioni relative nel database di registrazione.

Le informazioni nel registro di configurazione potrebbero essere state eliminate oppure sono danneggiate. Reinstallare il controllo ActiveX o contattare il produttore.


Form già visualizzato. Impossibile visualizzarlo a scelta obbligatoria (errore 400)

Non è possibile utilizzare il metodo Show per visualizzare un form già visibile come form a scelta obbligatoria. Causa e soluzione dell'errore:

•	Si è cercato di utilizzare il metodo Show, con l'argomento stile impostato su 1 – vbModal, su un form già visibile.

Prima di visualizzare il form come form a scelta obbligatoria, utilizzare l'istruzione Unload o il metodo Hide sul form.


È innanzitutto necessario chiudere o nascondere il form a scelta obbligatoria in primo piano (errore 402)

Il form a scelta obbligatoria che si sta cercando di chiudere o nascondere non è il primo nell'ordine z. Causa e soluzione dell'errore:

•	Esiste un altro form a scelta obbligatoria che nell'ordine z precede quello che si sta cercando di chiudere o nascondere.

Utilizzare l'istruzione Unload o il metodo Hide sui form a scelta obbligatoria precedenti nell'ordine z. Un form a scelta obbligatoria è un form visualizzato dal metodo Show, con l'argomento stile impostato su 1 – vbModal.


Impossibile caricare o scaricare l'oggetto (errore 361)

In un'istruzione Load o Unload viene fatto riferimento a un oggetto o controllo non valido. Cause e soluzioni dell'errore:

•	Si è cercato di caricare o scaricare un oggetto che non può essere caricato, quale un oggetto Screen, Printer o Clipboard.

Eliminare dal codice l'istruzione non corretta.

•	Si è cercato di caricare o scaricare un controllo esistente che non fa parte di una matrice di controlli. Questo errore viene ad esempio generato da Load Text1 se esiste un controllo TextBox con la proprietà Name impostata su Text1.

Eliminare dal codice l'istruzione non corretta oppure modificare il riferimento al controllo di una matrice.

•	Si è cercato di scaricare un controllo Menu nell'evento Click del relativo menu principale.

Scaricare il controllo Menu eseguendo una routine diversa.

•	Si è cercato di scaricare l'ultima voce di menu visibile di un controllo Menu.

Prima di scaricare una voce di menu o eliminare dal codice l'istruzione non corretta, verificare l'impostazione della proprietà Visible degli altri elementi della matrice di controlli.


Oggetto già caricato (errore 360)

Il controllo della matrice di controlli è già stato caricato. Causa e soluzione dell'errore:

•	Si è cercato di aggiungere un controllo a una matrice di controlli in fase di esecuzione con l'istruzione Load, ma il valore dell'indice a cui viene fatto riferimento esiste già.

Impostare il riferimento dell'indice su un altro valore oppure controllare che non venga eseguita più volte la stessa istruzione Load con lo stesso riferimento al valore dell'indice.


Impossibile trovare il form (errore 424)

Non è stato possibile trovare il form specificato. Causa e soluzione dell'errore:

Si è cercato di aggiungere un form all'insieme UserForms utilizzando il metodo Add, ma non esiste una classe di form con il nome specificato. Questo messaggio verrà visualizzato, ad esempio, se viene utilizzata l'istruzione UserForms.Add "MyForm" e MyForm non esiste.

Nota   Accertarsi che il nome della classe sia disponibile per il progetto.


Impossibile scaricare in questo contesto (errore 365)

In alcuni casi non è consentito scaricare un form o un controllo da un form. Cause e soluzioni dell'errore:

•	Esiste un'istruzione Unload nell'evento Paint del form o di un controllo del form che include l'evento Paint.

Rimuovere l'istruzione Unload dall'evento Paint.

•	Gli eventi Change, Click o DropDown di un controllo ComboBox includono un'istruzione Unload.

Rimuovere l'istruzione Unload dall'evento.

•	Nell'evento Scroll di un controllo HScrollBar o VScrollBar è presente un'istruzione Unload.

Rimuovere l'istruzione Unload dall'evento.

•	Nell'evento Resize di un controllo Data, Form, MDIForm o PictureBox è presente un'istruzione Unload.

Rimuovere l'istruzione Unload dall'evento.

•	Nell'evento Resize di un MDIForm è presente un'istruzione Unload che sta cercando di scaricare un form MDI secondario.

Rimuovere l'istruzione Unload dall'evento.

•	Nell'evento Reposition o Validate di un controllo Data è presente un'istruzione Unload.

Rimuovere l'istruzione Unload dall'evento.

•	Nell'evento ObjectMove di un controllo OLE Container è presente un'istruzione Unload.

Rimuovere l'istruzione Unload dall'evento.


Impossibile caricare la DLL di sistema specificata (errore 298)

Non è stato possibile trovare un file dll fornito dal sistema operativo, ad esempio Ddeml.dll, Version.dll o Winspool.drv. Cause e soluzioni dell'errore:

•	Il file non si trova nella posizione corretta.

Verificare che il file dll si trovi nella sottodirectory System della directory di Windows.

•	Il file dll è danneggiato o è stato eliminato.

Caricare di nuovo il file dll.

•	La memoria o lo spazio di swap non è sufficiente.

Liberare memoria chiudendo le altre applicazioni aperte.


Impossibile utilizzare nomi di periferiche per i nomi di file (errore 320)

In Visual Basic non è possibile assegnare a un file lo stesso nome di un driver di periferica. Causa e soluzione dell'errore:

•	È stato specificato come nome per un file AUX, CON, COM1, COM2, LPT1, LPT2, LPT3, LPT4 o NUL.

Assegnare un nome diverso al file.


Formato di file non valido (errore 321)

Un file di un form di Visual Basic è danneggiato. Cause e soluzioni dell'errore:

•	Il form include un controllo ActiveX danneggiato.

Provare a sostituire il controllo ActiveX del form.

•	Il numero delle proprietà della versione corrente del controllo ActiveX non corrisponde al numero di proprietà previsto.

Provare a sostituire il controllo ActiveX con una versione precedente o successiva a quella corrente.


Parametro non valido. Impossibile scrivere nelle matrici (errore 328)

È stato passato al metodo un parametro non valido. Causa e soluzione dell'errore:

•	Nell'evento WriteProperties del controllo utente si è cercato di specificare una PropBag.WriteProperty X, dove X è una matrice. Questa operazione non è supportata.

È necessario specificare singolarmente ciascun elemento di una matrice.


Impossibile accedere al registro di configurazione del sistema (errore 335)

Il tentativo di leggere o scrivere nel registro di configurazione del sistema non è riuscito.


Impossibile trovare il componente ActiveX (errore 337)

Non è possibile trovare il file exe o dll richiesto.


Impossibile eseguire correttamente il componente ActiveX (errore 338)

Il file EXE del componente ActiveX non è stato eseguito correttamente. Ci potrebbe essere un problema con le informazioni contenute nel registro di configurazione.


L'oggetto è stato scaricato (errore 364)

Un form è stato scaricato dalla relativa routine Form_Load. Causa e soluzione dell'errore:

•	È stato caricato un form in modo implicito utilizzando l'istruzione Unload nella relativa routine Form_Load. La riga che segue carica, ad esempio, YourForm in modo implicito se non è già caricato:

MyForm.BackColor = YourForm.BackColor.

Rimuovere l'istruzione Unload dalla relativa routine Form_Load.


La versione del file specificato non è più valida. Il programma richiede una versione aggiornata (errore 368)

Un controllo ActiveX non è più valido perchè non è aggiornato. Causa e soluzione dell'errore:

•	Il numero delle proprietà della versione corrente di un controllo ActiveX non corrisponde al numero di proprietà previsto.

Sostituire il controllo ActiveX con una versione aggiornata.


Valore di proprietà non valido (errore 380)

È stato assegnato un valore inadeguato a una proprietà. Causa e soluzione dell'errore:

•	Si è cercato di impostare una proprietà di un oggetto o di un controllo su un valore non compreso nell'intervallo valido.

Impostare la proprietà su un valore valido. La proprietà MousePointer, ad esempio, deve essere impostata su un valore intero compreso tra 0 e 15 o 99.


Impossibile impostare la proprietà specificata in fase di esecuzione (errore 382)

La proprietà è di sola lettura in fase di esecuzione. Causa e soluzione dell'errore:

•	Si è cercato di impostare o modificare il valore di una proprietà che può essere impostata solo in fase di progettazione.

Rimuovere dal codice il riferimento alla proprietà o modificare il riferimento in modo che il valore della proprietà venga restituito solo in fase di esecuzione.


La proprietà specificata è in sola lettura (errore 383)

La proprietà è di sola lettura sia in fase si progettazione che in fase di esecuzione. Causa e soluzione dell'errore:

•	Si è cercato di impostare o modificare il valore di una proprietà di sola lettura.

Rimuovere dal codice il riferimento alla proprietà o modificare il riferimento in modo che il valore della proprietà venga restituito solo in fase di esecuzione.


Impossibile leggere la proprietà specificata in fase di esecuzione (errore 393)

La proprietà è disponibile solo in fase di progettazione. Causa e soluzione dell'errore:

•	Si è cercato di leggere in fase di esecuzione una proprietà accessibile solo in fase di progettazione.

Modificare il codice e rimuovere il riferimento alla proprietà.


La proprietà specificata è in sola scrittura (errore 394)

Non è possibile leggere la proprietà. Causa e soluzione dell'errore.

•	La proprietà non è leggibile. Mentre ctl.property = 3, ad esempio, è valido, "Print ctl.property" genera questo errore.

Modificare il codice e rimuovere il riferimento alla proprietà.


Autorizzazione negata per utilizzare l'oggetto (errore 419)

Non sono disponibili le autorizzazioni necessarie per l'oggetto specificato. Causa e soluzione dell'errore:

•	Non si dispone dell'autorizzazione di accesso a questo oggetto.

Per modificare le assegnazioni di autorizzazioni, rivolgersi all'amministratore di sistema o al creatore dell'oggetto.


Impossibile creare un'immagine AutoRedraw (errore 480)

In Visual Basic non è possibile creare una bitmap fissa per aggiornamenti automatici di form o immagini. Causa e soluzione dell'errore:

•	La memoria disponibile non è sufficiente per poter impostare la proprietà AutoRedraw su True.

Impostare la proprietà AutoRedraw su False ed eseguire l'aggiornamento nella routine di eventi Paint oppure ridurre le dimensioni del controllo PictureBox o dell'oggetto Form e riprovare con la proprietà AutoRedraw impostata su True.


Memoria esaurita (errore 31001)

La memoria o lo spazio su disco disponibile non è sufficiente per eseguire l'operazione specificata.


Impossibile trovare l'oggetto (errore 31004)

Si è cercato di eseguire un'operazione su un oggetto che non esiste.


Classe non impostata (errore 31018)

Quando si imposta Action = 0 (metodo CreateEmbed) senza specificare un documento di origine (proprietà SourceDoc), la proprietà Class deve essere impostata sul nome di una classe disponibile nel sistema.

Per visualizzare un elenco dei nomi di classe disponibili in fase di progettazione, fare clic con il pulsante destro del mouse sul controllo contenitore OLE e scegliere il comando Inserisci oggetto.


Impossibile attivare l'oggetto (errore 31027)

Non è possibile caricare il documento di origine dell'oggetto oppure l'applicazione in cui è stato creato l'oggetto non è disponibile.

Questo errore viene generato quando si cerca di attivare un oggetto collegato (Action = 7) e il file specificato nella proprietà SourceDoc è stato eliminato o non esiste più.

Questo errore viene inoltre generato quando si attiva un oggetto (Action = 7) e l'azione specificata dalla proprietà Verb non è valida. Alcune applicazioni che forniscono oggetti possono supportare verbi diversi a seconda dello stato dell'applicazione. Tutti i verbi supportati da un'applicazione sono elencati nella proprietà ObjectVerbs. Alcuni verbi, tuttavia, potrebbero non essere validi per lo stato corrente dell'applicazione.


Impossibile creare oggetto incorporato (errore 31032)

L'applicazione non può creare l'oggetto come specificato nella proprietà SourceDoc.

Questo errore viene ad esempio generato quando si cerca di incorporare un oggetto foglio di calcolo e nella proprietà SourceDoc è specificato un foglio di calcolo di dimensioni troppo grandi per essere caricato nell'applicazione per fogli di calcolo.


Errore di salvataggio su file (errore 31036)

Non è possibile scrivere l'oggetto nel file specificato (Action = 11 o 18). Possibili cause:

•	La proprietà FileNumber non è valida.

•	Il file non è stato aperto in modalità Binary.

•	Lo spazio su disco non è sufficiente.


Errore di caricamento dal file (errore 31037)

È stato generato un errore durante la lettura del file specificato (Action = 12). Possibili cause:

•	La proprietà FileNumber non è valida.

•	Il file non è stato aperto in modalità Binary.

•	Il file non è stato salvato correttamente (Action = 11).

•	Il file è danneggiato.

•	Il file non è posizionato all'inizio di un oggetto OLE valido.


Riga 'elemento1': il nome 'elemento2' del form non è valido. Impossibile caricare il form

Il file ASCII contiene un nome di form che non è una stringa valida in Visual Basic. Il form non verrà caricato.


Riga 'elemento1': impossibile creare l'oggetto incorporato specificato

Non è stato possibile creare un oggetto incorporato durante il caricamento di un form, un controllo utente, un documento utente o una pagina delle proprietà da un file di testo. Questo messaggio di errore verrà visualizzato se, ad esempio, nel form è stato inserito in precedenza un documento di Microsoft Word e quindi Microsoft Word è stato rimosso dal sistema. Il messaggio viene scritto nel file di registro degli errori.


Riga 'elemento1': impossibile creare l'oggetto incorporato specificato; licenza non disponibile

Non è stato possibile creare un oggetto incorporato durante il caricamento di un form, un controllo utente, un documento utente o una pagina delle proprietà da un file di testo poiché non è stato trovato il file di licenza. Per utilizzare questo oggetto, è necessario disporre di una licenza. Per ulteriori informazioni, contattare il fornitore dell'oggetto. Questo messaggio viene scritto nel file di registro degli errori.


Riga 'elemento1': superato il livello massimo di nidificazione per i controlli con 'elemento2'

Il file ASCII contiene controlli nidificati in più di sette livelli.


Riga 'elemento1': tutti i controlli devono precedere i menu. Impossibile caricare il controllo 'elemento2'

Il file ASCII del form contiene un controllo che si trova in una posizione non corretta. Tutti i controlli devono essere caricati prima dei menu.


Riga 'elemento1': impossibile caricare il menu principale 'elemento2' come separatore

Il file ASCII contiene un controllo Menu il cui menu principale è definito come un separatore di menu. I menu principali non possono essere separatori di menu. Il separatore non verrà impostato.


Riga 'elemento1': impossibile impostare la proprietà.Checked per il menu 'elemento2'. I menu principali non possono avere segni di spunta
Riga 'elemento1': impossibile impostare la proprietà Checked per il menu 'elemento2'. I menu principali non possono avere segni di spunta

Il file ASCII contiene un controllo Menu principale la cui proprietà Checked è impostata su True. I menu principali non possono avere segni di spunta. Il controllo Menu verrà caricato, ma la proprietà Checked non verrà impostata.


Riga 'elemento1': impossibile impostare la proprietà Shortcut per il menu 'elemento2. Non è possibile assegnare un tasto di scelta rapida al menu principale
Riga 'elemento1': impossibile impostare la proprietà Shortcut per il menu 'elemento2'. Non è possibile assegnare un tasto di scelta rapida al menu principale

Il file ASCII contiene un controllo Menu principale per il quale è stato definito un tasto di scelta rapida. Non è possibile assegnare un tasto di scelta rapida al menu principale. Il controllo Menu verrà caricato, ma la relativa proprietà Shortcut non verrà impostata.


Riga 'elemento1': il nome 'elemento2' per il form è già in uso. Impossibile caricare il form

Il file ASCII contiene un form con un nome che è già utilizzato nell'applicazione. Il form non verrà caricato.


Attributi in conflitto in 'elemento'. Verranno utilizzate le impostazioni predefinite

Alcune delle istruzioni relative agli attributi di un form, un controllo utente, una pagina delle proprietà, un documento utente o un modulo di classe sono in conflitto con le impostazioni richieste per il relativo tipo. Ad esempio, l'attributo VB_PredeclaredId dei form deve sempre essere impostato su True. Questo errore può essere generato se il file è stato modificato con un editor diverso da Visual Basic.


'Elemento' è un file di sola lettura

È stato richiesto di salvare i dati in un file che è di sola lettura. I file di sola lettura vengono visualizzati in Gestione progetti come [image]. Non è possibile salvare dati in file di sola lettura. Utilizzare il comando Salva con nome.


Riga 'elemento1': impossibile creare riferimento: 'elemento2'

Non è possibile creare il riferimento indicato nella riga specificata.


Riga 'elemento1': impossibile caricare 'elemento2'

Gli errori di sintassi impediscono in Visual Basic l'analisi e il caricamento di un file oppure eventuali conflitti di nome del form impediscono il caricamento di un form ASCII. Il form non verrà caricato e il relativo nome non verrà visualizzato in Gestione progetti.

Accertarsi che il file che provoca l'errore sia un form ASCII in un formato valido e che non esistano conflitti tra i diversi form del progetto.


Errore durante il caricamento

Per informazioni più descrittive, controllare il registro degli errori.


Impossibile caricare 'elemento'. Rimuoverlo dall'elenco delle aggiunte disponibili?

Non è possibile caricare in Visual Basic l'aggiunta (add-in) che si è cercato di selezionare dall'elenco Aggiunte disponibili della finestra di dialogo Gestione aggiunte. Fare clic su Sì per rimuoverla dall'elenco o su No per lasciarla nell'elenco. In ogni caso, l'aggiunta non può essere caricata.


Impossibile caricare 'elemento' in Visual Basic perché non è incluso nel registro di configurazione del sistema. Verificare che tutte le aggiunte siano state installate correttamente

Non è possibile caricare in Visual Basic l'aggiunta (add-in) che si è cercato di selezionare dall'elenco Aggiunte disponibili della finestra di dialogo Gestione aggiunte, poiché non è stata registrata correttamente oppure non è più registrata nel registro di configurazione del sistema.


Visualizzare altri errori di caricamento?

Fare clic su OK per visualizzare altri errori, altrimenti fare clic su Annulla.


Impossibile caricare 'elemento'

Gli errori di sintassi impediscono in Visual Basic l'analisi e il caricamento di un file oppure eventuali conflitti di nome del form impediscono il caricamento di un form ASCII. Il form non verrà caricato e il relativo nome non verrà visualizzato in Gestione progetti.

Accertarsi che il file che provoca l'errore sia in un formato ASCII valido e che non esistano conflitti tra i diversi form del progetto.


Numero di versione mancante o non valido

La signature della versione non è stata trovata oppure la versione specificata non viene riconosciuta. Accertarsi che nella prima riga non vuota o diversa da un commento del file ASCII sia specificata la versione corretta.


Il progetto 'elemento2' fa riferimento ad 'elemento1' che pertanto non può essere caricato

Al controllo specificato fanno riferimento più progetti. Se il controllo viene aggiornato per un progetto, è possibile che esso risulti non valido per un altro progetto.


Impossibile rimuovere il controllo o il riferimento. Sono in uso

Il controllo ActiveX o il riferimento che si è cercato di rimuovere viene correntemente utilizzato da uno dei form del progetto. Eliminare innanzitutto il controllo o l'oggetto a cui si fa riferimento dal form e quindi deselezionarlo dall'elenco.


Impossibile uscire in questa fase

Non è possibile uscire da Windows mentre Visual Basic è in modalità di esecuzione o in modalità interruzione e neppure quando è visualizzata una finestra di dialogo o una finestra di messaggio.


Errore nel caricamento di 'elemento'. Si è verificato un errore nel caricamento di una proprietà. Continuare?

È possibile che si sia cercato di caricare un form che include controlli i cui nomi sono in conflitto con i form già presenti nel progetto. Questo errore viene ad esempio generato se si cerca di caricare un form denominato Form2 che include un controllo Form1.


Errore nel caricamento di 'elemento1'. Impossibile caricare un controllo a causa di un errore nel caricamento. Continuare?

Questo messaggio viene visualizzato dopo che è stato generato un altro errore. Dopo aver eseguito le operazioni appropriate per risolvere tale errore, apparirà questo messaggio. Per caricare comunque il controllo, fare clic su Sì. Per annullare il caricamento, fare clic su No.


'Elemento' è in un formato obsoleto. Salvandolo verrà memorizzato in formato aggiornato

Questo file è stato creato con una versione precedente di Visual Basic. Se viene salvato, verrà salvato nel formato di file della versione corrente.


'Elemento' esiste già nel progetto

Il file specificato fa già parte del progetto. Non è possibile aggiungere più volte lo stesso file a un progetto e nemmeno salvare un file con lo stesso nome di un altro file del progetto.


Errore durante il caricamento. Per informazioni fare riferimento a 'elemento'

Il file ASCII contiene qualcosa di non previsto. In Visual Basic è stato creato un file di registro degli errori in cui vengono fornite informazioni dettagliate sugli errori generati. È consigliabile consultare tale file per determinare la gravità del problema. A volte è possibile ignorare gli errori (ad esempio errori quali Numero di versione mancante o non valido...). In altri casi, tuttavia, un errore può far sì che un form non venga eseguito nel modo previsto (ad esempio, l'errore La classe MyClass del controllo MyControl non era una classe di controllo caricata).


Valore stringa troppo lungo per essere elaborato. Caricamento form interrotto

Una stringa incorporata nel form che viene caricato è troppo lunga per essere elaborata.


Sono stati modificati uno o più file del progetto. Salvare le modifiche ora?

In uno o più file del progetto è stata modificata una delle impostazioni delle proprietà oppure un'istruzione del codice e le modifiche non sono ancora state salvate. Questa è l'ultima occasione per salvarle prima che venga caricato un altro progetto.


Impossibile registrare 'elemento'

Non è possibile registrare il file specificato nel registro di configurazione del sistema. L'errore è correlato alle librerie dei tipi utilizzate dai componenti dell'ambiente di sviluppo di Visual Basic e indica che la voce corrispondente al file specificato nel registro di configurazione del sistema è danneggiata o la stessa DLL è mancante o è danneggiata.


Altre applicazioni stanno utilizzando un oggetto del programma. La chiusura del programma potrebbe creare errori in tali applicazioni. Chiudere il programma?

Un oggetto di automazione del programma Visual Basic in esecuzione viene correntemente utilizzata da almeno un'altra applicazione. Se il programma viene chiuso, è possibile che venga generato un errore nell'altra applicazione. Fare clic su Sì per uscire dal programma o su No per non chiuderlo e continuare.


Una o più proprietà in 'elemento1' erano errate. È possibile che alcune o tutte le proprietà non siano state impostate correttamente

Il file di progetto specificato contiene una o più impostazioni di proprietà non valide. Questo errore viene generato solo in un file di progetto.


Nomi in conflitto in 'elemento1'. Verrà utilizzato il nome specificato

Il nome di un form compare due volte nel file di origine di un form, un controllo utente, una pagina delle proprietà o un documento utente. Questo errore viene generato se il file è stato modificato utilizzando un editor diverso da Visual Basic.


Riga 'elemento1': il nome del controllo 'elemento2' non è valido

Il file ASCII contiene il nome di un controllo che non è una stringa valida in Visual Basic. Il controllo non verrà caricato.


Riga 'elemento1': il nome della proprietà specificato non è valido

Il file ASCII contiene il nome di una proprietà che non è valida per il controllo.


Riga 'elemento1': 'elemento2' ha una stringa tra virgolette nel punto in cui dovrebbe esserci il nome della proprietà

Il file ASCII contiene una stringa tra virgolette nel punto in cui dovrebbe esserci il nome della proprietà. I nomi di proprietà non vengono inseriti tra virgolette (" ").


Riga 'elemento1': la proprietà specificata ha un indice di proprietà non valido

Il file ASCII contiene un nome di proprietà con un indice di proprietà maggiore di 255.


Riga 'elemento1': impossibile caricare la proprietà specificata

Il file ASCII contiene una proprietà sconosciuta. La proprietà verrà ignorata durante il caricamento del form.


Riga 'elemento1': la proprietà specificata deve essere una stringa tra virgolette

Il file ASCII contiene una proprietà che dovrebbe apparire tra virgolette (" "), ma le virgolette non compaiono. Questa riga di descrizione del form verrà ignorata.


Riga 'elemento1': valore non valido nella proprietà specificata

Il file ASCII contiene una proprietà con un valore non corretto per questo controllo. Per la proprietà verrà impostato il valore predefinito.


Riga 'elemento1': riferimento di file non valido nella proprietà specificata

Il file ASCII contiene un riferimento a un file che non è stato trovato nella directory specificata.


Riga 'elemento1': impossibile impostare la proprietà specificata

Non è possibile impostare la proprietà del controllo specificato in base alle indicazioni della descrizione del form contenute nel file ASCII.


Riga 'elemento1': la classe 'elemento2' del controllo 'elemento3' non era una classe di controllo caricata

Il file ASCII contiene una classe di controlli che non viene riconosciuta. Aggiungere al progetto il controllo aggiuntivo insieme a questa classe.


Riga 'elemento1': impossibile trovare una proprietà Index e il controllo 'elemento2' esiste già

Non è possibile caricare il controllo poiché non esiste un indice e il controllo ha lo stesso nome di un controllo già caricato.


Riga 'elemento1': nome del controllo troppo lungo. Abbreviato in 'elemento2'

Il file ASCII contiene un nome di controllo con più di 40 caratteri. Il controllo verrà caricato e il relativo nome verrà abbreviato in modo che non superi i 40 caratteri.


Riga 'elemento1': nome della classe troppo lungo. Abbreviato in 'elemento2'

Il file ASCII contiene un nome di classe più lungo di 40 caratteri. La classe verrà caricata e il nome verrà abbreviato in modo che non superi i 40 caratteri.


Riga 'elemento1': errore di sintassi: per la proprietà specificata manca un segno di uguale (=)

Il file ASCII contiene un nome e un valore di una proprietà che non sono separati da un segno di uguale (=). La proprietà non verrà caricata.


Riga 'elemento1': impossibile caricare il controllo 'elemento2'; il controllo che lo contiene non è un contenitore valido

Si è cercato di caricare un controllo in un altro controllo che non è un contenitore valido.


Riga 'elemento1': Impossibile caricare il controllo 'elemento2'. Nome già in uso

Il controllo specificato nel file di testo ASCII non può essere caricato poiché il relativo nome è già in uso nell'applicazione.


Riga 'elemento1': classe del controllo mancante o non valida nel file 'elemento2'

Il file ASCII contiene nella descrizione del form una classe del controllo sconosciuta oppure il nome della classe non è una stringa valida in Visual Basic.


Riga 'elemento1': nome del controllo mancante o non valido nel file 'elemento2'

Il file ASCII contiene nella descrizione del form un nome di controllo sconosciuto oppure il nome del controllo non è una stringa valida in Visual Basic.


Riga 'elemento1': impossibile caricare il controllo 'elemento2'; licenza non disponibile

Non è stato possibile creare un controllo ActiveX durante il caricamento di un form, un controllo utente, un documento utente o una pagina delle proprietà da un file di testo. È possibile che il controllo sia mancante o danneggiato. Reinstallare il controllo e riprovare. Questo messaggio viene scritto nel file di registro degli errori.


Riga 'elemento1': il CLSID specificato non è valido

Non è stato possibile caricare un oggetto durante il caricamento di un form, un controllo utente, un documento utente o una pagina delle proprietà da un file di testo. Il CLSID specificato nel file non è valido. Questo messaggio è valido solo per gli oggetti che sono proprietà, quali l'oggetto Font, e viene scritto nel file di registro degli errori.


Impossibile creare il riferimento all'elemento specificato

Si è verificato un errore nella definizione di un riferimento durante il caricamento del file e quindi il riferimento non è stato aggiunto.


'Elemento' non verrà caricato. Nome già in uso

Non possono essere caricati contemporaneamente due elementi del tipo specificato.


Esempio di istruzione ChDir

In questo esempio l'istruzione ChDir viene utilizzata per cambiare la directory o cartella corrente.  In Macintosh, il nome dell'unità predefinita è "HD" e le parti del percorso sono separate da due punti anziché da una barra rovesciata. Inoltre, è necessario specificare cartelle Macintosh anziché \Windows. Infine, i caratteri jolly non hanno alcun significato particolare e vengono considerati come semplici caratteri.

' Rende "MIADIR" la directory o cartella corrente.

ChDir "MIADIR"

' Supponendo che "C:" sia l'unità corrente,

' l'istruzione seguente cambia la directory predefinita

' dell'unità "D:". "C:" rimane l'unità corrente.

ChDir "d:\Windows\System"


Esempio di istruzione ChDrive

In questo esempio l'istruzione ChDrive viene utilizzata per cambiare l'unità corrente. In Macintosh, il nome dell'unità predefinita è "HD:" e l'istruzione ChDrive consente di passare alla cartella radice dell'unità specificata. Nell'esempio seguente si presume che nel computer in uso sia disponibile un'unità D.

ChDrive "D"	' "D" diventa l'unità corrente.


Esempio di funzione CurDir

In questo esempio la funzione CurDir viene utilizzata per restituire il percorso corrente. In Macintosh, le specifiche unità passate alla funzione CurDir vengono ignorate. Il nome dell'unità predefinita è "HD" e le parti del percorso sono separate da due punti anziché da una barra rovesciata. Inoltre, è necessario specificare cartelle Macintosh anziché \Windows.

' Presupposto: percorso corrente nell'unità c: "c:\Windows\System" (in Microsoft Windows).

' Presupposto: percorso corrente nell'unità d: "d:\Excel".

' Presupposto: c: è l'unità corrente.

Dim MyPath

MyPath = CurDir	' Restituisce "c:\Windows\System".

MyPath = CurDir("C")	' Restituisce "c:\Windows\System".

MyPath = CurDir("D")	' Restituisce "d:\Excel".


Esempio di funzione Dir

In questo esempio la funzione Dir viene utilizzata per controllare se esistono determinati file e directory.In Macintosh, il nome dell'unità predefinita è "HD:" e le parti del percorso sono separate da due punti anziché da una barra rovesciata. Inoltre, i caratteri jolly di Microsoft Windows sono considerati come caratteri validi per i nomi di file. È tuttavia possibile utilizzare la funzione MacID per specificare gruppi di file.

Dim MyFile, MyPath, MyName

' Restituisce "WIN.INI" (in Microsoft Windows)se esiste.

MyFile = Dir("C:\WINDOWS\WIN.INI")

' Restituisce il nome dei file con l'estensione

' specificata. Se esistono più file con estensione.ini,

' viene restituito il nome del primo file.

MyFile = Dir("C:\WINDOWS\*.INI")

' Richiama l'istruzione Dir senza argomenti per

' restituire il successivo file con estensione ini

' contenuto nella stessa directory.

MyFile = Dir

' Restituisce il primo file con estensione txt

' impostato come nascosto.

MyFile = Dir("*.TXT", vbHidden)

' Visualizza i nomi in c:\ che rappresentano directory.

MyPath = "c:\"	' Imposta il percorso.

MyName = Dir(MyPath, vbDirectory)	' Recupera la prima voce.

Do While MyName <> ""	' Avvia il ciclo.

' Ignora la directory corrente e quella di livello superiore.

If MyName <> "." And MyName <> ".." Then

' Usa il confronto bit per bit per verificare se MyName è una directory.

If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then

Debug.Print MyName	' Visualizza la voce solo

End If	' se rappresenta una directory.

End If

MyName = Dir	' Legge la voce successiva.

Loop


Esempio di funzione Environ

In questo esempio la funzione Environ viene utilizzata per fornire il numero di voce e la lunghezza dell'istruzione PATH contenuta nella tabella delle stringhe di ambiente.Non disponibile in Macintosh.

Dim EnvString, Indx, Msg, PathLen	' Dichiara le variabili.

Indx = 1	' Inizializza l'indice su 1.

Do

EnvString = Environ(Indx)	' Legge la variabile di

' ambiente.

If Left(EnvString, 5) = "PATH=" Then	' Verifica la voce PATH.

PathLen = Len(Environ("PATH"))	' Legge la lunghezza.

Msg = "Voce PATH = " & Indx & " e lunghezza = " & PathLen

Exit Do

Else

Indx = Indx + 1	' La voce PATH non esiste

End If	' perciò incrementa.

Loop Until EnvString = ""

If PathLen > 0 Then

MsgBox Msg	' Visualizza il messaggio.

Else

MsgBox "Non esiste alcuna variabile di ambiente PATH."

End If


Esempio di istruzione FileCopy

In questo esempio l'istruzione FileCopy viene utilizzata per copiare un file su un altro. Nell'esempio, FILEORIG è un file che contiene dati.

Dim SourceFile, DestinationFile

SourceFile = "FILEORIG"	' Definisce il nome del file di origine.

DestinationFile = "FILEDEST"	' Definisce il nome del file di destinazione.

FileCopy SourceFile, DestinationFile	' Copia il file di origine sul file di destinazione.


Esempio di funzione FileDateTime

In questo esempio la funzione FileDateTime viene utilizzata per ottenere la data e l'ora di creazione e dell'ultima modifica di un file. Il formato di data e ora visualizzato sarà quello delle impostazioni internazionali del sistema.

Dim MyStamp

' Presupposto: FILEPROV è stato modificato l'ultima

' volta il 12 febbraio 1994 alle 16.35.47.

' Presupposto: impostazioni internazionali

' Italia/Italiano.

MyStamp = FileDateTime("FILEPROV")	' Restituisce "12/2/94 16.35.47".


Esempio di funzione FileLen

In questo esempio la funzione FileLen viene utilizzata per restituire la lunghezza di un file espressa in byte. Nell'esempio FILEPROV è un file che contiene dati.

Dim MySize

MySize = FileLen("FILEPROV")	' Restituisce la lunghezza

' del file espressa in byte.


Esempio di funzione GetAttr

In questo esempio la funzione GetAttr viene utilizzata per determinare gli attributi di un file, di una directory o di una cartella. In Macintosh, sono disponibili solo le costanti vbNormal, vbReadOnly, vbHidden e vbAlias.

Dim MyAttr

' Presupposto: per il file FILEPROV è stato impostato

' l'attributo Nascosto.

MyAttr = GetAttr("FILEPROV")	' Restituisce 2.

' Restituisce un valore diverso da zero se l'attributo

' Nascosto è impostato per FILEPROV.

Debug.Print MyAttr And vbHidden

' Presupposto: per il file FILEPROV sono stati

' impostati gli attributi Nascosto e Sola lettura.

MyAttr = GetAttr("FILEPROV")	' Restituisce 3.

' Restituisce un valore diverso da zero se l'attributo

' Nascosto è impostato per FILEPROV.

Debug.Print MyAttr And (vbHidden + vbReadOnly)

' Presupposto: MIADIR è una directory o una cartella.

MyAttr = GetAttr("MIADIR")	' Restituisce 16.


Esempio di istruzione Kill

In questo esempio l'istruzione Kill viene utilizzata per eliminare un file da un disco.

' Presupposto: il file FILEPROV contiene dati.

Kill "FILEPROV"	' Elimina il file.

' Elimina tutti i file con estensione txt

' nella directory corrente.

Kill "*.txt"


Esempio di istruzione MkDir

In questo esempio l'istruzione MkDir viene utilizzata per creare una directory o una cartella. Se l'unità non è specificata, la nuova directory o la nuova cartella verrà creata nell'unità corrente.

MkDir "MIADIR"	' Crea una nuova directory o cartella.


Esempio di istruzione Name

In questo esempio l'istruzione Name viene utilizzata per rinominare un file. Nell'esempio si parte dal presupposto che le directory o cartelle specificate esistano.In Macintosh, il nome dell'unità predefinita è "HD:" e l eparti del percorso sono separate da due punti anziché da una barra rovesciata.

Dim OldName, NewName

OldName = "VECCHIO": NewName = "NUOVO"	' Definisce i

' nomi di file.

Name OldName As NewName	' Rinomina il file.

OldName = "C:\MIADIR\VECCHIO": NewName = "C:\TUADIR\NUOVO"

Name OldName As NewName	' Sposta e rinomina il file.


Esempio di funzione QBColor

In questo esempio la funzione QBColor viene utilizzata per modificare la proprietà BackColor del form specificato come MyForm , assegnando il colore indicato da ColorCode. QBColor riconosce come valori i numeri interi compresi tra 0 e 15.

Sub ChangeBackColor (ColorCode As Integer, MyForm As Form)

MyForm.BackColor = QBColor(ColorCode)

End Sub


Esempio di funzione RGB

In questo esempio la funzione RGB viene utilizzata per restituire un numero intero che rappresenta un valore di colore RGB. La funzione viene utilizzata per i metodi e le proprietà delle applicazioni che accettano le specifiche di colore. L'oggetto MyObject e la sua proprietà sono utilizzati solo a titolo esemplificativo. Se MyObject non esiste oppure se non ha la proprietà Color, verrà generato un errore.

Dim RED, I, RGBValue, MyObject

Red = RGB(255, 0, 0)	' Restituisce il valore per Red.

I = 75	' Inizializza l'offset.

RGBValue = RGB(I, 64 + I, 128 + I) 	' Equivale a RGB(75, 139, 203).

MyObject.Color = RGB(255, 0, 0)	' Imposta la

' proprietà Color di MyObject su Red.


Esempio di istruzione RmDir

In questo esempio l'istruzione RmDir viene utilizzata per rimuovere una directory o cartella esistente.

' Presupposto: MIADIR è una directory o cartella vuota.

RmDir "MIADIR"	' Rimuove MIADIR.


Esempio di istruzione SetAttr

In questo esempio l'istruzione SetAttr viene utilizzata per impostare gli attributi di un file. In Macintosh, sono disponibili solo le costanti vbNormal, vbReadOnly, vbHidden e vbAlias.

SetAttr "FILEPROV", vbHidden	' Imposta l'attributo Nascosto.

SetAttr "FILEPROV", vbHidden + vbReadOnly	' Imposta gli attibuti Nascosto e Sola lettura.


Istruzione ChDir

Imposta una diversa directory o cartella predefinita.

Sintassi

ChDir percorso

L'argomento obbligatorio percorso è costituito da un'espressione stringa che identifica quale sarà la nuova directory o cartella predefinita. È possibile specificare l'unità. Se non si indica alcuna unità, ChDir imposterà la directory o cartella predefinita nell'unità corrente.

Osservazioni

L'istruzione ChDir cambia la directory predefinita ma non l'unità predefinita. Se, ad esempio, l'unità predefinita è C, la seguente istruzione imposterà la directory predefinita sull'unità D, ma C resterà l'unità predefinita:

ChDir "D:\TMP"

In Power Macintosh, l'unità predefinita viene sempre impostata sull'unità specificata in percorso. La specifica del percorso completo inizia con il nome del volume e i percorsi relativi iniziano con due punti (:). ChDir risolve qualsiasi alias specificato nel percorso:

ChDir "MacDrive:Tmp"	' In Macintosh.

Si noti che i simboli utilizzati in Microsoft Windows e in Macintosh per eseguire spostamenti di directory relativi sono diversi:

ChDir ".."	' Sposta di una directory verso l'alto in Microsoft Windows.

ChDir "::"	' Sposta di una directory verso l'alto in Macintosh.


Istruzione ChDrive

Passa a un'unità diversa dalla corrente.

Sintassi

ChDrive unità

L'argomento obbligatorio unità è un'espressione stringa che specifica un'unità esistente. Se viene specificata una stringa di lunghezza zero (""), l'unità corrente resterà invariata. Se l'argomento unità è costituito da una stringa di più caratteri, ChDrive utilizzerà solo la prima lettera.

In Macintosh, l'istruzione ChDrive consente di passare dalla cartella corrente alla cartella radice dell'unità specificata.


Funzione CurDir

Restituisce un valore Variant (String) che rappresenta il percorso corrente dell'unità specificata.

Sintassi

CurDir[(unità)]

L'argomento facoltativo unità è un'espressione stringa che specifica un'unità esistente. Se non è specificata alcuna unità o se l'argomento unità è una stringa di lunghezza zero (""), CurDir restituirà il percorso dell'unità corrente. In Macintosh, la funzione CurDir ignora l'eventuale valore di unità specificato e restituisce semplicemente il percorso dell'unità corrente.


Funzione Dir

Restituisce un valore String che rappresenta un nome di file, directory, o cartella che corrisponde a un attributo o tipo di file specificato o a un'etichetta di volume di un'unità.

Sintassi

Dir[(nomepercorso[, attributi])]

La sintassi della funzione Dir è composta dalle seguenti parti:

Parte	Descrizione
nomepercorso	Facoltativa. Espressione stringa che specifica il nome del file. Può includere la directory o cartella e unità. Se nomepercorso non viene trovato, la funzione restituisce una stringa di lunghezza zero ("").
attributi	Facoltativa. Costante o espressione numerica, la cui somma specifica gli attributi del file. Se omessa, vengono restituiti i file che corrispondono a nomepercorso ma che non hanno attributi
Impostazioni

Le possibili impostazioni dell'argomento attributi sono:

Costante	Valore	Descrizione
vbNormal	0	(Predefinita). Specifica i file senza attributi.
vbReadOnly	1	Specifica i file di sola lettura oltre ai file senza attributi.
vbHidden	2	Specifica i file nascosti oltre ai file senza attributi.
vbSystem	4	Specifica i file di sistema oltre ai file senza attributi. Non disponibile in Macintosh.
vbVolume	8	Specifica l'etichetta di volume. Viene ignorata se si specifica qualsiasi altro attributo. Non disponibile in Macintosh.
vbDirectory	16	Specifica le directory o le cartelle oltre ai file senza attributi.
vbAlias	64	Il nome di file specificato è un alias. Disponibile solo in Macintosh.
Nota   Queste costanti vengono specificate da Visual Basic, Applications Edition e possono essere utilizzate nel codice in sostituzione dei valori effettivi.

Osservazioni

In Microsoft Windows Dir supporta i caratteri jolly per più caratteri (*) e per singoli caratteri (?) per indicare più file. In Macintosh, tali caratteri sono considerati caratteri validi per i nomi di file e non possono essere utilizzati come caratteri jolly per indicare più file.

Poiché in Macintosh i caratteri jolly non sono supportati, è possibile utilizzare il tipo di file per identificare gruppi di file. Utilizzare la funzione MacID per specificare il tipo di file anziché utilizzare i nomi di file. Ad esempio, la seguente istruzione restituisce il nome del primo file di tipo TEXT nella cartella corrente:

Dir("Percorso", MacID("TEXT"))

Per eseguire un'iterazione in tutti i file di una cartella, specificare una stringa vuota:

Dir("")

Se la funzione MacID viene utilizzata con Dir in Microsoft Windows, viene generato un errore.

Se all'argomento attributi viene assegnato un valore maggiore di 256, verrà considerato come valore MacID.

È necessario specificare nomepercorso alla prima chiamata della funzione Dir, altrimenti verrà generato un errore. Se si specificano gli attributi del file occorre includere anche nomepercorso.

Dir restituisce il primo nome di file che corrisponde a quello specificato in nomepercorso. Per ottenere i successivi nomi di file corrispondenti a nomepercorso, chiamare di nuovo la funzione Dir senza alcun argomento. Se non vengono trovati altri nomi di file corrispondenti, Dir restituirà una stringa di lunghezza zero, dopodiché sarà necessario utilizzare di nuovo nomepercorso nelle successive chiamate, altrimenti verrà generato un errore. È possibile passare a un nuovo nomepercorso senza trovare tutti i nomi di file che corrispondono al nomepercorso corrente. Non è possibile tuttavia chiamare la funzione Dir in modo ricorsivo. Richiamando Dir con l'attributo vbDirectory non verranno restituite sottodirectory in modo continuo.

Suggerimento   Dato che i nomi di file vengono individuati senza rispettare un ordine particolare, potrebbe essere utile salvarli in una matrice e quindi ordinarla.


Funzione Environ

Restituisce un valore di tipo String associato a una variabile di ambiente del sistema operativo. Non disponibile in Macintosh.

Sintassi

Environ({envstring | number})

La sintassi della funzione Environ è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
envstring	Facoltativa. Espressione stringa contenente il nome di una variabile di ambiente.
number	Facoltativa. Espressione numerica corrispondente alla posizione della stringa di ambiente nella tabella delle stringhe. L'argomento number può essere una qualsiasi espressione numerica, ma verrà arrotondato a un numero intero prima della valutazione.
Osservazioni

Se envstring non è presente nella tabella delle stringhe di ambiente, verrà restituita una stringa di lunghezza zero. In caso contrario, Environ restituirà il testo assegnato alla stringa indicata da envstring, ovvero il testo relativo alla variabile di ambiente che segue il segno di uguale nella tabella delle stringhe di ambiente.

Se l'argomento number viene specificato, verrà restituita la stringa che occupa la posizione corrispondente nella tabella delle stringhe di ambiente. In tal caso, Environ restituirà tutto il testo, compresa envstring. Se nella posizione specificata non è presente alcuna stringa di ambiente, Environ restituirà una stringa di lunghezza zero ("").


Istruzione FileCopy

Copia un file.

Sintassi

FileCopy source, destination

La sintassi dell'istruzione FileCopy è composta dagli argomenti predefiniti di seguito descritti:

Parte	Descrizione
source	Obbligatoria. Espressione stringa che specifica il nome del file da copiare. Può includere la directory o cartella e unità.
destination	Obbligatoria. Espressione stringa che specifica il nome del file di destinazione. Può includere la directory o cartella e unità.
Osservazioni

Se si cerca di utilizzare l'istruzione FileCopy per un file aperto, verrà generato un errore.


Funzione FileDateTime

Restituisce un valore Variant (Date) che indica la data e l'ora in cui un file è stato creato o modificato.

Sintassi

FileDateTime(nomepercorso)

L'argomento obbligatorio nomepercorso è un'espressione stringa che specifica il nome del file. Può includere la directory o cartella e l'unità.


Funzione FileLen

Restituisce un valore Long che specifica la lunghezza di un file espressa in byte.

Sintassi

FileLen(nomepercorso)

L'argomento obbligatorio nomepercorso è un'espressione stringa che specifica il nome del file. Può includere la directory o cartella e l'unità.

Osservazioni

Se il file specificato è aperto nel momento in cui viene chiamata la funzione FileLen il valore restituito rappresenterà la dimensione del file prima dell'apertura.

Nota   Per ottenere la lunghezza di un file aperto, utilizzare la funzione LOF.


Funzione GetAttr

Restituisce un valore Integer che rappresenta l'attributo di un file, di una directory o di una cartella.

Sintassi

GetAttr(nomepercorso)

L'argomento obbligatorio nomepercorso è un'espressione stringa che specifica il nome del file. Può includere la directory o cartella e l'unità.

Valori restituiti

Il valore restituito da GetAttr è la somma dei seguenti valori di attributo:

Costante	Valore	Descrizione
vbNormal	0	Normale.
vbReadOnly	1	Sola lettura.
vbHidden	2	Nascosto.
vbSystem	4	File di sistema. Non disponibile in Macintosh.
vbDirectory	16	Directory o cartella.
vbArchive	32	Il file è stato modificato dall'ultimo backup.  Non disponibile in Macintosh.
vbAlias	64	Il nome di file specificato è un alias.Disponibile solo in Macintosh.
Nota   Queste costanti vengono specificate da Visual Basic, Applications Edition e possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi.

Osservazioni

Per determinare quali attributi vengono impostati, è possibile utilizzare l'operatore And per eseguire un confronto bit per bit tra il valore restituito dalla funzione GetAttr e il valore del singolo attributo di file desiderato. Se il risultato è diverso da zero, significa che l'attributo è impostato per il file indicato. Nell'esempio che segue, il valore restituito dall'espressione And è zero se non è impostato l'attributo vbArchive:

Result = GetAttr(FName) And vbArchive

Se l'attributo vbArchive è impostato, verrà restituito un valore diverso da zero.


Istruzione Kill

Elimina i file specificati da un disco.

Sintassi

Kill nomepercorso

L'argomento obbligatorio nomepercorso è un'espressione stringa che specifica se uno o più nomi di file devono essere eliminati. Può includere la directory o cartella e l'unità.

Osservazioni

In Microsoft Windows Kill supporta i caratteri jolly per più caratteri (*) e per singoli caratteri (?) per indicare più file. In Macintosh, tali caratteri sono considerati caratteri validi per i nomi di file e non possono essere utilizzati come caratteri jolly per indicare più file.

Poiché in Macintosh i caratteri jolly non sono supportati, è possibile utilizzare il tipo di file per identificare gruppi di file da eliminare. Utilizzare la funzione MacID per specificare il tipo di file anziché ripetere il comando con nomi di file diversi. Ad esempio, la seguente istruzione elimina tutti i file di tipo TEXT nella cartella corrente.

Kill MacID("TEXT")

Se la funzione MacID viene utilizzata con Kill in Microsoft Windows, viene generato un errore.

L'utilizzo di Kill per eliminare un file aperto, genererà un errore.

Nota   Per eliminare le directory utilizzare l'istruzione RmDir.


Istruzione MkDir

Crea una nuova directory o cartella.

Sintassi

MkDir percorso

L'argomento obbligatorio percorso è un'espressione stringa che identifica la directory o la cartella da creare. Può includere l'unità. Se l'unità non viene specificata, MkDir crea una nuova directory o cartella nell'unità corrente.


Istruzione Name

Cambia il nome di un file o di una directory o cartella.

Sintassi

Name vecchionomepercorso As nuovonomepercorso

La sintassi dell'istruzione Name è composta dalle seguenti parti:

Parte	Descrizione
vecchionomepercorso	Obbligatoria. Espressione stringa che specifica il nome e la posizione di un file esistente. Può includere la directory o cartella e l'unità.
nuovonomepercorso	Obbligatoria. Espressione stringa che specifica il nuovo nome e la nuova posizione del file. Può includere la directory o cartella e l'unità. È importante che il nome del file specificato con nuovonomepercorso non sia già esistente.
Osservazioni

L'istruzione Name consente di rinominare un file e, se necessario, di spostarlo in un'altra directory o cartella. Name consente di spostare un file da un'unità all'altra, ma se nuovonomepercorso e vecchionomepercorso si trovano nella stessa unità, consente unicamente di rinominare una directory o cartella esistente. L'istruzione Name non consente di creare un nuovo file, una nuova directory o una nuova cartella.

L'utilizzo di Name per un file aperto, genererà un errore. È necessario chiudere un file prima di rinominarlo. Gli argomenti di Name non possono includere i caratteri jolly per più caratteri (*) e per singoli caratteri (?).


Funzione QBColor

Restituisce un valore Long che rappresenta il codice di colore RGB corrispondente a un numero di colore specificato.

Sintassi

QBColor(colore)

L'argomento obbligatorio colore è un numero intero compreso tra 0 e 15.

Impostazioni

Le possibili impostazioni dell'argomento colore sono:

Numero	Colore	Numero	Colore
0	Nero	8	Grigio
1	Blu	9	Blu chiaro
2	Verde	10	Verde limone
3	Azzurro	11	Azzurro chiaro
4	Rosso	12	Rosso chiaro
5	Fucsia	13	Fucsia chiaro
6	Giallo	14	Giallo chiaro
7	Bianco	15	Bianco brillante
Osservazioni

L'argomento colore rappresenta valori di colore utilizzati da versioni precedenti di Basic, quali Microsoft Visual Basic per MS-DOS e il Compilatore Basic. A partire dal byte meno significativo, il valore restituito specifica i valori di rosso, verde e blu utilizzati per l'impostazione del colore appropriato nel sistema RGB utilizzato da Visual Basic, Applications Edition.


Funzione RGB

Restituisce un numero intero Long che rappresenta un valore di colore RGB.

Sintassi

RGB(red, green, blue)

La sintassi della funzione RGB è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
red	Obbligatoria. Variant (Integer). Numero compreso nell'intervallo tra 0 e 255 inclusi che rappresenta il componente rosso del colore.
green	Obbligatoria. Variant (Integer). Numero compreso nell'intervallo tra 0 e 255 inclusi che rappresenta il componente verde del colore.
blue	Obbligatoria. Variant (Integer). Numero compreso nell'intervallo tra 0 e 255 inclusi che rappresenta il componente blu del colore.
Osservazioni

Le specifiche di colore ammesse per i metodi e le proprietà delle applicazioni sono rappresentate da un numero che rappresenta un valore di colore RGB. Il valore di colore RGB specifica l'intensità relativa dei colori rosso, verde e blu che uniti producono un colore specifico.

Il valore per qualsiasi argomento della funzione RGB superiore a 255 verrà considerato uguale a 255.

Nella tabella che segue vengono indicati alcuni colori standard e i relativi valori di rosso, verde e blu:

Colore	Valore rosso	Valore verde	Valore blu
Nero	0	0	0
Blu	0	0	255
Verde	0	255	0
Azzurro	0	255	255
Rosso	255	0	0
Fucsia	255	0	255
Giallo	255	255	0
Bianco	255	255	255
I valori di colore RGB restituiti da questa funzione non sono compatibili con quelli utilizzati nel sistema operativo Macintosh. Anche se possono essere utilizzati all'interno del contesto di applicazioni Microsoft per Macintosh, non è tuttavia consigliabile utilizzarli per l'invio diretto al sistema operativo Macintosh di modifiche ai colori.


Istruzione RmDir

Rimuove una directory o cartella esistente.

Sintassi

RmDir percorso

L'argomento obbligatorio percorso è un'espressione stringa che identifica la directory o la cartella da rimuovere. Può includere l'unità. Se questa non viene specificata, RmDir rimuove la directory o cartella dall'unità corrente.

Osservazioni

Se si tenta di utilizzare RmDir per rimuovere una directory o una cartella contenente dei file, verrà generato un errore. Prima di rimuovere la directory o la cartella, è necessario eliminare tutti i file con l'istruzione Kill.


Istruzione SetAttr

Imposta gli attributi di un file.

Sintassi

SetAttr pathname, attributes

La sintassi dell'istruzione SetAttr è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
pathname	Obbligatoria. Espressione stringa che specifica il nome di file. Può includere la directory o cartella e l'unità.
attributes	Obbligatoria. Costante o espressione numerica, la cui somma specifica gli attributi del file.
Impostazioni

Le possibili impostazioni dell'argomento attributes sono:

Costante	Valore	Descrizione
vbNormal	0	Normale (predefinito).
vbReadOnly	1	Sola lettura.
vbHidden	2	Nascosto.
vbSystem	4	File di sistema.  Non disponibile in Macintosh.
vbArchive	32	Il file è stato modificato dall'ultimo backup.
vbAlias	64	Il nome di file specificato è un alias. Disponibile solo in Macintosh.
Nota   Queste costanti vengono specificate da Visual Basic, Applications Edition e possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi.

Osservazioni

Se si cerca di impostare attributi per un file aperto, verrà generato un errore di run-time.


Esempio di istruzione Close

In questo esempio l'istruzione Close viene utilizzata per chiudere tutti e tre i file aperti in modalità Output.

Dim I, FileName

For I = 1 To 3	' Ripete 3 volte.

FileName = "PROVA" & I	' Crea il nome del file.

Open FileName For Output As #I	' Apre il file.

Print #I, "Questa è una prova."	' Scrive la stringa nel file.

Next I

Close	' Chiude i 3 file aperti.


Esempio di funzione EOF

In questo esempio la funzione EOF viene utilizzata per individuare la fine di un file. Nell'esempio MIOFILE è un file di testo contenente alcune righe di testo.

Dim InputData

Open "MIOFILE" For Input As #1	' Apre il file per l'input.

Do While Not EOF(1)	' Cerca la fine del file.

Line Input #1, InputData	' Legge la riga di dati.

Debug.Print InputData	' Scrive nella finestra Immediata.

Loop

Close #1	' Chiude il file.


Esempio di funzione FileAttr

In questo esempio la funzione FileAttr viene utilizzata per restituire la modalità e l'handle di un file aperto. L'handle del file viene restituito solo nei sistemi a 16 bit. Nei sistemi a 32 bit, se viene passato 2 come secondo argomento, verrà generato un errore.

Dim FileNum, Mode, Handle

FileNum = 1	' Assegna il numero di file.

Open "PROVA" For Append As FileNum	' Apre il file.

Mode = FileAttr(FileNum, 1)	' Restituisce 8

'(modalità Append).

Handle = FileAttr(FileNum, 2)	' Restituisce

' l'handle del file.

Close FileNum	' Chiude il file.


Esempio di funzione FreeFile

In questo esempio la funzione FreeFile viene utilizzata per restituire il successivo numero di file disponibile. Nell'esempio, vengono aperti cinque file per l'output all'interno del ciclo e vengono scritti alcuni dati in ogni file.

Dim MyIndex, FileNumber

For MyIndex = 1 To 5	' Ripete 5 volte.

FileNumber = FreeFile	' Ottiene un numero

' di file libero.

Open "PROVA" & MyIndex For Output As #FileNumber	' Crea un nome di file.

Write #FileNumber, "Questa è una prova."	' Testo di output.

Close #FileNumber	' Chiude il file.

Next MyIndex


Esempio di istruzione Get

In questo esempio l'istruzione Get viene utilizzata per leggere i dati da un file su disco ed assegnarli ad una variabile. Nell'esempio, FILEPROV è un file che contiene cinque record di tipo Record definito dall'utente.

Type Record	' Definisce il tipo dell'utente.

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record, Position	' Dichiara le variabili.

' Apre il file di esempio per accesso casuale.

Open "FILEPROV" For Random As #1 Len = Len(MyRecord)

' Legge il file di esempio utilizzando l'istruzione Get.

Position = 3	' Definisce il numero di record.

Get #1, Position, MyRecord	' Legge il terzo record.

Close #1	' Chiude il file.


Esempio di istruzione Input #

In questo esempio l'istruzione Input # viene utilizzata per leggere i dati di un file ed assegnarli a due variabili. Nell'esempio FILEPROV è un file che contiene alcune righe di dati scritti utilizzando l'istruzione Write #, ovvero ogni riga include una stringa racchiusa tra virgolette ed un numero separati da virgola, ad esempio, ("Salve", 234).

Dim MyString, MyNumber

Open "FILEPROV" For Input As #1	' Apre il file per l'input.

Do While Not EOF(1)	' Ripete fino alla fine del file.

Input #1, MyString, MyNumber	' Legge i dati nelle variabili.

Debug.Print MyString, MyNumber	' Scrive i dati nella finestra Immediata.

Loop

Close #1	' Chiude il file.


Esempio di funzione Input

In questo esempio la funzione Input viene utilizzata per leggere un file un carattere alla volta e stampare ogni carattere nella finestra Immediata. Nell'esempio, FILEPROV è un file di testo che include alcune righe di dati.

Dim MyChar

Open "FILEPROV" For Input As #1	' Apre il file.

Do While Not EOF(1)	' Ripete fino alla fine del file.

MyChar = Input(1, #1)	' Legge un carattere.

Debug.Print MyChar	' Scrive nella finestra Immediata.

Loop

Close #1	' Chiude il file.


Esempio di istruzione Line Input #

In questo esempio l'istruzione Line Input # viene utilizzata per leggere una riga in un file sequenziale ed assegnarla ad una variabile. Nell'esempio, FILEPROV è un file di testo che include alcune righe di dati.

Dim TextLine

Open "FILEPROV" For Input As #1	' Apre il file.

Do While Not EOF(1)	' Ripete fino alla fine del file.

Line Input #1, TextLine	' Assegna la riga a una variabile.

Debug.Print TextLine	' Scrive nella finestra Immediata.

Loop

Close #1	' Chiude il file.


Esempio di funzione Loc

In questo esempio la funzione Loc viene utilizzata per restituire la posizione corrente di lettura/scrittura in un file aperto. Nell'esempio, FILEPROV è un file di testo che include alcune righe di dati.

Dim MyLocation, MyLine

Open "FILEPROV" For Binary As #1	' Apre il file appena creato.

Do While MyLocation < LOF(1)	' Ripete fino alla fine del file.

MyLine = MyLine & Input(1, #1)	' Assegna la riga ad una variabile.

MyLocation = Loc(1)	' Legge la posizione corrente nel file.

' Stampa nella finestra Immediata.

Debug.Print MyLine; Tab; MyLocation

Loop

Close #1	' Chiude il file.


Esempio di istruzioni Lock e Unlock

In questo esempio viene illustrato l'utilizzo delle istruzioni Lock e Unlock. Durante la modifica di un record, viene negato l'accesso ad altri processi. Nell'esempio, FILEPROV è un file che include cinque record di tipo Record definito dall'utente.

Type Record	' Definisce il tipo dell'utente.

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record, RecordNumber	' Dichiara la variabile.

' Apre il file di esempio per accesso casuale.

Open "FILEPROV" For Random Shared As #1 Len = Len(MyRecord)

RecordNumber = 4	' Definisce il numero di record.

Lock #1, RecordNumber	' Blocca il record.

Get #1, RecordNumber, MyRecord	' Legge il record.

MyRecord.ID = 234	' Modifica il record.

MyRecord.Name = "Paolo Rossi"

Put #1, RecordNumber, MyRecord	' Scrive il record modificato.

Unlock #1, RecordNumber	' Sblocca il record corrente.

Close #1	' Chiude il file.


Esempio di funzione LOF

In questo esempio la funzione LOF viene utilizzata per determinare le dimensioni di un file aperto. Nell'esempio, FILEPROV è un file di testo che include alcuni dati.

Dim FileLength

Open "FILEPROV" For Input As #1	' Apre il file.

FileLength = LOF(1)	' Legge la lunghezza del file.

Close #1	' Chiude il file.


Esempio di istruzione Open

In questo esempio vengono illustrati i vari utilizzi dell'istruzione Open per eseguire operazioni di input/output su un file.

Il codice che segue apre il file in modalità input sequenziale.

Open "FILEPROV" For Input As #1

' Chiude prima di riaprire in una modalità diversa.

Close #1

Questo esempio apre il file in modalità binaria solo per operazioni di scrittura.

Open "FILEPROV" For Binary Access Write As #1

' Chiude prima di riaprire in una modalità diversa.

Close #1

Questo esempio apre il file in modalità casuale. Il file contiene record di tipo Record definito dall'utente.

Type Record	' Definisce il tipo dell'utente.

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record	' Dichiara la variabile.

Open "FILEPROV" For Random As #1 Len = Len(MyRecord)

' Chiude prima di riaprire in una modalità diversa.

Close #1

Questo esempio apre il file per output sequenziale; qualsiasi processo può leggere/scrivere sul file.

Open "FILEPROV" For Output Shared As #1

' Chiude prima di riaprire in una modalità diversa.

Close #1

Questo esempio apre il file in modalità binaria per la lettura; altri processi non possono leggere il file.

Open "FILEPROV" For Binary Access Read Lock Read As #1


Esempio di istruzione Print #

In questo esempio l'istruzione Print # viene utilizzata per scrivere i dati su file.

Open "FILEPROV" For Output As #1	' Apre il file per l'output.

Print #1, "Questa è una prova"	' Scrive il testo nel file.

Print #1,	' Scrive una riga vuota nel file.

Print #1, "Area 1"; Tab ; "Area 2"	' Scrive in due aree di stampa.

Print #1, "Salve" ; " " ; "gente"	' Separa le stringhe con uno spazio.

Print #1, Spc(5) ; "5 spazi iniziali"	' Scrive 5 spazi iniziali.

Print #1, Tab(10) ; "Salve"	' Scrive la parola nella colonna 10.

' Assegna i valori Boolean, Date, Null e Error.

Dim MyBool, MyDate, MyNull, MyError

MyBool = False : MyDate = # 12 Febbraio 1969# : MyNull = Null

MyError = CVErr(32767)

' True, False, Null e Error vengono tradotti in base

' alle impostazioni internazionali del sistema.

' I valori letterali di data vengono scritti

' utilizzando il formato di data breve.

Print #1, MyBool ; " è un valore booleano"

Print #1, MyDate ; " è una data"

Print #1, MyNull ; " è un valore nullo"

Print #1, MyError ; " è un valore di errore"

Close #1	' Chiude il file.


Esempio di istruzione Put

In questo esempio l'istruzione Put viene utilizzata per scrivere i dati in un file. Cinque record di tipo Record definito dall'utente vengono scritti in un file.

Type Record	' Definisce il tipo definito dall'utente.

ID As Integer

Name As String * 20

End Type

Dim MyRecord As Record, RecordNumber	' Dichiara la variabile.

' Apre il file per accesso casuale.

Open "FILEPROV" For Random As #1 Len = Len(MyRecord)

For RecordNumber = 1 To 5	' Ripete 5 volte.

MyRecord.ID = RecordNumber	' Definisce l'ID.

MyRecord.Name = "Mio nome" & RecordNumber	' Crea una stringa.

Put #1, RecordNumber, MyRecord	' Scrive il record nel file.

Next RecordNumber

Close #1	' Chiude il file.


Esempio di istruzione Reset

In questo esempio l'istruzione Reset viene utilizzata per chiudere tutti i file aperti e scrivere il contenuto di tutti i buffer su disco. La variabile Variant FileNumber è utilizzata sia come stringa che come numero.

Dim FileNumber

For FileNumber = 1 To 5	' Ripete 5 volte.

' Apre il file per l'output. FileNumber

' è concatenata alla stringa

' PROVA anche se è # seguito

' da un numero.

Open "PROVA" & FileNumber For Output As #FileNumber

Write #FileNumber, "Salve gente"	' Scrive i dati nel file.

Next FileNumber

Reset	' Chiude i file e ne scrive il contenuto

' su disco.


Esempio di funzione Seek

In questo esempio la funzione Seek viene utilizzata per restituire la posizione corrente del file. Nell'esempio si presume che FILEPROV sia un file contenente record del tipo Record definito dall'utente.

Type Record	' Definisce il tipo definito dall'utente.

ID As Integer

Name As String * 20

End Type

Per i file aperti in modalità casuale, Seek restituisce il numero del record successivo.

Dim MyRecord As Record	' Dichiara la variabile.

Open "FILEPROV" For Random As #1 Len = Len(MyRecord)

Do While Not EOF(1)	' Ripete fino alla fine del file.

Get #1, , MyRecord	' Legge il record successivo.

Debug.Print Seek(1)	' Scrive il numero di record

' nella finestra Immediata

Loop

Close #1	' Chiude il file.

Per i file aperti in modalità diverse dalla modalità casuale, Seek restituisce la posizione del byte nel quale verrà eseguita l'operazione successiva. Si presuppone che FILEPROV sia un file contenente alcune righe di testo.

Dim MyChar

Open "FILEPROV" For Input As #1	' Apre il file per la lettura.

Do While Not EOF(1)	' Ripete fino alla fine del file.

MyChar = Input(1, #1)	' Legge il carattere successivo dei dati.

Debug.Print Seek(1)	' Stampa la posizione del byte nella finestra Immediata

Loop

Close #1	' Chiude il file.


Esempio di istruzione Seek

In questo esempio l'istruzione Seek viene utilizzata per impostare la successiva posizione di lettura o scrittura in un file. Nell'esempio si presume che FILEPROV sia un file contenente record del tipo Record definito dall'utente.

Type Record	' Definisce il tipo definito dall'utente.

ID As Integer

Name As String * 20

End Type

Per i file aperti in modalità casuale, Seek imposta il record successivo.

Dim MyRecord As Record, MaxSize, RecordNumber	' Dichiara la variabile.

' Apre il file in modalità casuale.

Open "FILEPROV" For Random As #1 Len = Len(MyRecord)

MaxSize = LOF(1) \ Len(MyRecord)	' Legge il numero di record nel file.

' Il ciclo legge tutti i record a partire dall'ultimo.

For RecordNumber = MaxSize To 1 Step - 1

Seek #1, RecordNumber	' Imposta la posizione.

Get #1, , MyRecord	' Legge il record.

Next RecordNumber

Close #1	' Chiude il file.

Per i file aperti in modalità diverse dalla modalità casuale, Seek imposta la posizione del byte in cui viene eseguita l'operazione successiva. Si suppone che FILEPROV sia un file contenente alcune righe di testo.

Dim MaxSize, NextChar, MyChar

Open "FILEPROV" For Input As #1	' Apre il file per l'input.

MaxSize = LOF(1)	' Legge la dimensione del file in byte.

' Il ciclo legge tutti i caratteri a partire dall'ultimo.

For NextChar = MaxSize To 1 Step -1

Seek #1, NextChar	' Imposta la posizione.

MyChar = Input(1, #1)	' Legge il carattere.

Next NextChar

Close #1	' Chiude il file.


Esempio di funzione Spc

In questo esempio la funzione Spc viene utilizzata per posizionare l'output in un file e nella finestra Immediata.

' La funzione Spc può essere utilizzata con l'istruzione Print #.

Open "FILEPROV" For Output As #1	' Apre il file per l'output.

Print #1, "10 spazi tra qui"; Spc(10); "e qui."

Close #1	' Chiude il file.

La seguente istruzione consente di scrivere il testo nella finestra Immediata (utilizzando il metodo Print) e di farlo precedere da 30 spazi.

Debug.Print Spc(30); "Trenta spazi dopo..."


Esempio di funzione Tab

In questo esempio la funzione Tab viene utilizzata per posizionare l'output in un file e nella finestra Immediata.

' La funzione Tab può essere utilizzata con l'istruzione Print #.

Open "FILEPROV" For Output As #1	' Apre il file per l'output.

' La seconda parola viene scritta nella colonna 20.

Print #1, "Salve"; Tab(20); "Gente."

' Se l'argomento viene omesso, il cursore verrà spostato nell'area di stampa successiva.

Print #1, "Salve"; Tab; "Gente"

Close #1	' Chiude il file.

La funzione Tab può inoltre essere utilizzata con il metodo Print. L'istruzione seguente consente di scrivere il testo a partire dalla colonna 10.

Debug.Print Tab(10); "10 colonne dall'inizio."


Esempio di istruzione Width #

In questo esempio l'istruzione Width # viene utilizzata per impostare la larghezza della riga di output per un file.

Dim I

Open "FILEPROV" For Output As #1	' Apre il file per l'output.

VBA.Width 1, 5	' Imposta la larghezza della riga di output su 5.

For I = 0 To 9	' Ripete 10 volte.

Print #1, Chr(48 + I);	' Stampa 5 caratteri per riga.

Next I

Close #1	' Chiude il file.


Esempio di istruzione Write #

In questo esempio l'istruzione Write # viene utilizzata per scrivere dati non elaborati in un file sequenziale.

Open "FILEPROV" For Output As #1	' Apre il file perl'output.

Write #1, "Salve gente", 234	' I dati scritti sono delimitati da virgole.

Write #1,	' Scrive una riga vuota.

Dim MyBool, MyDate, MyNull, MyError

' Assegna i valori Boolean, Date, Null e Error.

MyBool = False : MyDate = # 12 Febbraio 1969# : MyNull = Null

MyError = CVErr(32767)

' I dati booleani vengono scritti come #TRUE# o

' #FALSE#. I valori letterali di data vengono

' scritti nel formato di data universale, ad esempio #1994-07-13# corrisponde al 13 luglio 1994.

' I dati Null vengono scritti come #NULL#. I dati

' di errore vengono scritti come #ERROR numeroerrore#.

Write #1, MyBool ; " è un valore booleano"

Write #1, MyDate ; " è una data"

Write #1, MyNull ; " è un valore nullo"

Write #1, MyError ; " è un valore di errore"

Close #1	' Chiude il file.


Istruzione Close

Termina le operazioni di input/output (I/O) su un file aperto con la funzione Open.

Sintassi

Close [elenconumerofile]

L'argomento facoltativo elenconumerofile può includere uno o più numeri di file sulla base della sintassi di seguito indicata, dove numerofile è un qualsiasi numero di file valido:

[[#]numerofile] [, [#]numerofile] . . .

Osservazioni

Se si omette elenconumerofile, vengono chiusi tutti i file aperti con l'istruzione Open.

Quando l'istruzione Close viene utilizzata per un file aperto in modalità Output o Append, essa trasferisce il buffer finale dell'output al buffer del sistema operativo relativo a tale file, lasciando libero tutto lo spazio del buffer associato al file chiuso.

L'esecuzione dell'istruzione Close interrompe la corrispondenza tra un file e il suo numero.


Funzione EOF

Restituisce un valore Integer che contiene il valore Boolean True se è stata raggiunta la fine di un file aperto in modalità Random o Input sequenziale.

Sintassi

EOF(numerofile)

L'argomento obbligatorio numerofile è un Integer che contiene un qualsiasi numero di file valido.

Osservazioni

È consigliabile utilizzare la funzione EOF per evitare errori dovuti al tentativo di leggere altri dati dopo aver raggiunto la fine del file.

La funzione EOF restituisce False fino a quando non viene raggiunta la fine del file. Quando la funzione viene utilizzata con file aperti in modalità Random o Binary, restituirà False se l'ultima istruzione Get eseguita non è stata in grado di leggere un intero record.

Se si tenta di leggere i file aperti in modalità Binary utilizzando la funzione Input fino a quando EOF non restituisce True, verrà generato un errore. Utilizzare le funzioni LOF e Loc al posto di EOF se per la lettura di file binari viene utilizzata Input oppure utilizzare Get con la funzione EOF. Con i file aperti in modalità Output, EOF restituisce sempre True.


Funzione FileAttr

Restituisce un valore Long che rappresenta la modalità di accesso a un file aperto con l'istruzione Open.

Sintassi

FileAttr(filenumber, returntype)

La sintassi della funzione FileAttr è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
filenumber	Obbligatoria. Integer. Qualsiasi numero di file valido.
returntype	Obbligatoria. Integer. Numero che indica il tipo di informazione da restituire. Specificare 1 per ottenere come risultato un valore che indica la modalità di accesso al file. Per i sistemi a 16 bit, specificare 2 per ottenere come risultato un valore che indica l'handle del sistema operativo. L'utilizzo di Returntype 2 nei sistemi a 32 bit non è supportato e genera un errore.
Valori restituiti

Se per l'argomento returntype viene indicato il valore 1, verranno restituiti i seguenti valori che indicano la modalità di accesso al file:

Modalità	Valore
Input	1
Output	2
Random	4
Append	8
Binary	32


Funzione FreeFile

Restituisce un valore Integer che rappresenta il successivo numero di file disponibile da utilizzare con l'istruzione Open.

Sintassi

FreeFile[(numerointervallo)]

L'argomento facoltativo numerointervallo è un valore di tipo Variant che specifica l'intervallo entro il quale restituire il successivo numero di file disponibile. Specificare 0 (impostazione predefinita) per restituire un numero di file compreso nell'intervallo da 1 a 255 inclusi. Specificare 1 per restituire un numero di file nell'intervallo da 256 a 511.

Osservazioni

La funzione FreeFile viene utilizzata quando è necessario fornire un numero di file e si desidera verificare che il numero di file non sia in uso.


Istruzione Get

Trasferisce i dati da un file aperto in una variabile.

Sintassi

Get [#]numerofile, [numerorecord], nomevariabile

La sintassi dell'istruzione Get è composta dalle seguenti parti:

Parte	Descrizione
numerofile	Obbligatoria. Qualsiasi numero di file valido.
numerorecord	Facoltativa. Variant (Long). Indica il numero di record (file modalità Random) oppure il numero di byte (file modalità Binary) dove inizia la lettura.
nomevariabile	Obbligatoria. Indica il nome valido della variabile in cui vengono trasferiti i dati del file.
Osservazioni

I dati letti tramite Get vengono in genere scritti in un file utilizzando l'istruzione Put.

Il primo record o byte di un file si trova nella posizione 1, il secondo record o byte nella posizione 2 e così via. Se numerorecord viene omesso verrà letto il record o byte successivo, ovvero quello successivo all'ultima istruzione Get o Put oppure quello indicato dall'ultima funzione Seek. Sarà necessario tuttavia includere le virgole di delimitazione. Ad esempio:

Get #4,,FileBuffer

Nel caso di file aperti in modalità Random verranno applicate le seguenti regole:

•	Se la lunghezza dei dati letti è inferiore alla lunghezza specificata nella proposizione Len dell'istruzione Open, Get leggerà comunque i record successivi entro i limiti di lunghezza dei record. Lo spazio compreso tra la fine di un record e l'inizio del record successivo viene occupato dal contenuto esistente del buffer del file. Poiché la quantità dei dati immessi per riempire lo spazio non può essere determinata con sicurezza, è in genere consigliabile verificare che la lunghezza del record corrisponda a quella dei dati che verranno letti.

•	Se la variabile in lettura è una stringa di lunghezza variabile, l'istruzione Get leggerà un descrittore a 2 byte contenente la lunghezza della stringa e quindi i dati che verranno trasferiti nella variabile. È quindi necessario che la lunghezza del record specificata dalla proposizione Len dell'istruzione Open sia maggiore di almeno 2 byte rispetto alla lunghezza effettiva della stringa.

•	Se la variabile in lettura è una Variant di tipo numerico, l'istruzione Get leggerà 2 byte che identificano il VarType della Variant e quindi i dati che verranno trasferiti nella variabile. Quando l'istruzione Get legge, ad esempio, una Variant con valore VarType 3, verranno letti 6 byte, vale a dire 2 byte che identificano la Variant come VarType 3 (Long) e 4 byte che contengono i dati di tipo Long. È necessario che la lunghezza del record specificata dalla proposizione Len dell'istruzione Open sia maggiore di almeno 2 byte rispetto al numero effettivo di byte richiesti per memorizzare la variabile.

Nota   È possibile utilizzare l’istruzione Get per leggere una matrice Variant dal disco, ma non per leggere una Variant scalare che include una matrice, né per leggere oggetti dal disco.

•	Se la variabile in lettura è una Variant di VarType 8 (String), l'istruzione Get leggerà 2 byte che identificano il VarType, quindi 2 byte che indicano la lunghezza della stringa e infine i dati della stringa. È necessario che la lunghezza del record specificata dalla proposizione Len dell'istruzione Open sia maggiore di almeno 4 byte rispetto alla lunghezza effettiva della stringa.

•	Se la variabile in lettura è una matrice dinamica, l'istruzione Get leggerà un descrittore di lunghezza pari a 2 più 8 volte il numero delle dimensioni, ovvero 2 + 8 * NumeroDiDimensioni. È necessario che la lunghezza del record specificata dalla proposizione Len dell'istruzione Open sia maggiore o uguale alla somma di tutti i byte necessari per leggere i dati della matrice e il descrittore della matrice. La seguente dichiarazione di matrice, ad esempio, richiede 118 byte quando la matrice viene scritta su disco.

Dim MyArray(1 To 5,1 To 10) As Integer

I 118 byte sono distribuiti come segue: 18 byte per il descrittore (2 + 8 * 2) e 100 byte per i dati (5 * 10 * 2).

•	Se la variabile in lettura è una matrice a dimensioni fisse, l’istruzione Get leggerà solo i dati. Non viene letto il descrittore.

•	Se la variabile in lettura è di qualsiasi altro tipo, ovvero non è una stringa di lunghezza variabile o una Variant, Get leggerà solo i dati variabili. È necessario che la lunghezza del record specificata dalla proposizione Len dell'istruzione Open sia maggiore o uguale alla lunghezza dei dati letti.

•	Gli elementi di tipo definito dall'utente vengono letti utilizzando l'istruzione Get come se ciascuno di essi venisse letto singolarmente, con la differenza che in questo caso non vengono immessi dati per riempire lo spazio tra gli elementi. Su disco, a una matrice dinamica di tipo definito dall'utente (scritta con l’istruzione Put) viene anteposto un descrittore di lunghezza uguale a 2 + 8 volte il numero delle dimensioni, ovvero 2+8 * NumeroDiDimensioni. È necessario che la lunghezza del record specificata dalla proposizione Len dell'istruzione Open sia maggiore o uguale alla somma di tutti i byte richiesti per la lettura dei singoli elementi, incluse eventuali matrici e i corrispondenti descrittori.

Nel caso di file aperti in modalità Binary verranno applicate tutte le regole relative alla modalità Random con le seguenti eccezioni:

•	La proposizione Len dell'istruzione Open non ha effetto. L'istruzione Get legge tutte le variabili dal disco in successione, senza riempire lo spazio tra i record.

•	Per matrici diverse da quelle in tipi definiti dall’utente, l’istruzione Get legge solo i dati. Non viene letto il descrittore.

•	L'istruzione Get legge stringhe di lunghezza variabile che non sono elementi di tipo definito dall'utente senza prevedere il descrittore di lunghezza 2 byte. Il numero di byte letti equivale al numero di caratteri della stringa. Le istruzioni seguenti, ad esempio, leggono 10 byte dal numero di file 1:

VarString = String(10," ")

Get #1,,VarString


Istruzione Input #

Legge i dati da un file ad accesso sequenziale aperto e li assegna a delle variabili.

Sintassi

Input #numerofile, elencovariabili

La sintassi dell'istruzione Input # è composta dalle seguenti parti:

Parte	Descrizione
numerofile	Obbligatoria. Qualsiasi numero di file valido.
elencovariabili	Obbligatoria. Elenco delle variabili separate da virgole, alle quali vengono assegnati i valori letti dal file. Non è possibile includere una matrice o una variabile oggetto. È possibile, comunque, utilizzare variabili che descrivono un elemento di una matrice o di tipo definito dall'utente.
Osservazioni

I dati letti con Input # vengono in genere scritti su un file con l'istruzione Write #. Utilizzare questa istruzione solo per i file aperti in modalità Input o Binary.

Dopo la lettura, le stringhe standard o i dati numerici vengono assegnati alle variabili nella forma di origine. Nella tabella di seguito riportata, vengono descritte le assegnazioni per altri dati di input:

Dati	Valore assegnato alla variabile
Virgola di separazione o riga vuota	Empty
#NULL#	Null
#TRUE# o #FALSE#	True o False
#yyyy-mm-dd hh:mm:ss#	La data e l'ora rappresentati da un'espressione
#ERROR numeroerrore#	numeroerrore (la variabile è di tipo Variant etichettata come errore)
Le virgolette doppie (" ") all'interno dei dati di input verranno ignorate.

Nota   Con l'instruzione Input # non utilizzare stringhe in cui sono incorporate virgolette doppie. La stringa "1,2""X", ad esempio, viene analizzata come se se si trattasse di due stringhe complete distinte.

È necessario che i dati di un file compaiano nello stesso ordine delle variabili in elencovariabili e corrispondano alle variabili dello stesso tipo di dati. Se la variabile è di tipo numerico e i dati non lo sono, il valore assegnato alla variabile sarà zero.

Se viene raggiunta la fine del file durante l'input dei dati, l'input verrà interrotto e verrà generato un errore.

Nota   Per poter trasferire correttamente i dati da un file a variabili tramite Input #, utilizzare l'istruzione Write # anziché Print # per scrivere i dati nei file. L'istruzione Write # garantisce la corretta delimitazione di ogni campo di dati.


Funzione Input

Restituisce un valore String che contiene i caratteri letti da un file aperto in modalità Input o Binary .

Sintassi

Input(numero, [#]numerofile)

La sintassi della funzione Input è composta dalle seguenti parti:

Parte	Descrizione
numero	Obbligatoria. Qualsiasi espressione numerica valida che specifica il numero di caratteri che devono essere restituiti.
numerofile	Obbligatoria. Qualsiasi numero di file valido.
Osservazioni

I dati letti tramite la funzione Input vengono in genere scritti su file con Print # o Put. Utilizzare questa funzione solo per i file aperti in modalità Input o Binary.

A differenza dell'istruzione Input #, la funzione Input restituisce tutti i caratteri letti, incluse virgole, ritorni a capo, caratteri di avanzamento riga, virgolette e spazi iniziali.

Se si tenta di leggere i file aperti in modalità Binary utilizzando la funzione Input fino a quando EOF non restituisce True, verrà generato un errore. Utilizzare le funzioni LOF e Loc al posto di EOF se per la lettura di file binari viene utilizzata Input oppure utilizzare Get con la funzione EOF.

Nota   Con i dati byte contenuti in file di testo è possibile utilizzare la funzione InputB. In questo caso numero consente di specificare il numero di byte da restituire anziché il numero di caratteri.


Istruzione Line Input #

Legge una singola riga in un file aperto ad accesso sequenziale e la assegna a una variabile String.

Sintassi

Line Input #numerofile, nomevariabile

La sintassi dell'istruzione Line Input # è composta dalle seguenti parti:

Parte	Descrizione
numerofile	Obbligatoria. Qualsiasi numero di file valido.
nomevariabile	Obbligatoria. Qualsiasi Variant o nome di variabile String valido.
Osservazioni

I dati letti tramite Line Input # vengono in genere scritti su file con Print #.

L'istruzione Line Input # consente di leggere tutti i caratteri in un file un carattere per volta, fino al ritorno a capo (Chr(13)) o alla sequenza ritorno a capo–avanzamento riga (Chr(13) + Chr(10)). Le sequenze ritorno a capo–avanzamento riga vengono ignorate e non aggiunte alla stringa di caratteri.


Funzione Loc

Restituisce un valore Long che specifica la posizione corrente di lettura/scrittura all'interno di un file aperto.

Sintassi

Loc(numerofile)

L'argomento obbligatorio numerofile è un qualsiasi numero di file Integer valido.

Osservazioni

Di seguito vengono descritti i valori restituiti per ciascun tipo di modalità di accesso al file:

Modalità	Valore restituito
Random	Numero dell'ultimo record letto o scritto nel file.
Sequential	Posizione corrente dei byte nel file divisa per 128. Si noti che le informazioni restituite da Loc per i file sequenziali non vengono utilizzate e non sono obbligatorie.
Binary	Posizione dell'ultimo byte letto o scritto nel file.


Istruzioni Lock e Unlock

Controllano l'accesso di altri processi a file o parti di file aperti con l'istruzione Open.

Sintassi

Lock [#]numerofile[, intervallorecord]
. . .

Unlock [#]numerofile[, intervallorecord]

La sintassi delle istruzioni Lock e Unlock è composta dalle seguenti parti:

Parte	Descrizione
numerofile	Obbligatoria. Qualsiasi numero di file valido.
intervallorecord	Facoltativa. Intervallo di record che si desidera bloccare o sbloccare.
Impostazioni

Le possibili impostazioni dell'argomento intervallorecord sono:

numerorecord | [inizio] To fine

Impostazione	Descrizione
numerorecord	Numero del record (file modalità Random) o numero di byte (file modalità Binary) dove si desidera iniziare a bloccare o sbloccare.
inizio	Numero del primo record o byte che si desidera bloccare o sbloccare
fine	Numero dell'ultimo record o byte che si desidera bloccare o sbloccare
Osservazioni

Le istruzioni Lock e Unlock vengono utilizzate in ambienti in cui gli stessi file sono coinvolti in più processi.

Le istruzioni Lock e Unlock vengono sempre utilizzate insieme. È necessario che gli argomenti di Lock e Unlock corrispondano esattamente.

Il primo record o byte di un file corrisponde alla posizione 1, il secondo alla posizione 2 e così via. Se viene specificato solo un record, solo tale record verrà bloccato o sbloccato. Se viene specificato un intervallo di record e viene omesso il record iniziale (inizio), verranno bloccati o sbloccati tutti i record, dal primo del file all'ultimo dell'intervallo (fine). L'utilizzo di Lock o Unlock senza l'argomento numerorecord consentirà di bloccare o sbloccare l'intero file.

Se il file è stato aperto per input o output sequenziale, Lock e Unlock influiranno sull'intero file, indipendentemente dall'intervallo specificato con inizio e fine.

Attenzione   Verificare di aver rimosso tutti i blocchi tramite l'istruzione Unlock prima di chiudere un file o di uscire dal programma. La mancata rimozione dei blocchi potrebbe comportare conseguenze impreviste.


Funzione LOF

Restituisce un valore Long che rappresenta le dimensioni in byte di un file aperto con l'istruzione Open.

Sintassi

LOF(numerofile)

L'argomento obbligatorio numerofile è un valore Integer che contiene un qualsiasi numero di file valido.

Nota   Per ottenere la lunghezza di un file non aperto, utilizzare la funzione FileLen.


Istruzione Open

Consente di eseguire operazioni di input/output (I/O) su un file.

Sintassi

Open nomepercorso For modalità [Access accesso] [blocco] As [#]numerofile [Len=lunghezzarec]

La sintassi dell'istruzione Open è composta dalle seguenti parti:

Parte	Descrizione
nomepercorso	Obbligatoria. Espressione stringa che specifica il nome del file e può includere la directory o cartella e l'unità.
modalità	Obbligatoria. Parola chiave che specifica la modalità di accesso al file, ovvero Append, Binary, Input, Output o Random. Se non viene specificata, il file verrà aperto in modalità Random.
accesso	Facoltativa. Parola chiave che specifica le operazioni consentite nel file aperto, ovvero: Read, Write o Read Write.
blocco	Facoltativa. Parola chiave che specifica le operazioni consentite nel file aperto tramite altri processi, ovvero Shared, Lock Read, Lock Write e Lock Read Write.
numerofile	Obbligatoria. Numero di file valido compreso tra 1 e 511 inclusi. La funzione FreeFile restituisce il primo numero di file disponibile.
lunghezzarec	Facoltativa. Numero inferiore o uguale a 32.767 (byte). Nel caso di file aperti per accesso casuale, sarà uguale alla lunghezza del record. Nel caso di file ad accesso sequenziale, sarà uguale al numero di caratteri memorizzati temporaneamente nel buffer.
Osservazioni

Prima di eseguire su un file una qualsiasi operazione di I/O, è necessario aprirlo. L'istruzione Open assegna un buffer per eseguire le operazioni di I/O sul file e stabilisce la modalità di accesso utilizzata con il buffer.

Se il file specificato con nomepercorso non esiste, verrà creato all'apertura di un file in modalità Append, Binary, Output o Random.

Se il file è già stato aperto con un altro processo e il tipo di accesso specificato non è consentito, l'istruzione Open non verrà eseguita e verrà generato un errore.

La proposizione Len viene ignorata se modalità è Binary.

Importante   Nelle modalità Binary, Input e Random è possibile aprire un file già aperto utilizzando un numero di file diverso senza dover chiudere il file. Nelle modalità Append e Output è necessario chiudere il file prima di aprirlo con un numero di file diverso.


Istruzione Print #

Scrive dati formattati per la visualizzazione in un file ad accesso sequenziale.

Sintassi

Print #numerofile, [elencooutput]

La sintassi dell'istruzione Print # è composta dalle seguenti parti:

Parte	Descrizione
numerofile	Obbligatoria. Qualsiasi numero di file valido.
elencooutput	Facoltativa. Espressione o elenco di espressioni che si desidera scrivere nel file.
Impostazioni

Le possibili impostazioni dell'argomento elencooutput sono:

[{Spc(n) | Tab[(n)]}] [espressione] [poscarattere]

Impostazione	Descrizione
Spc(n)	Utilizzata per inserire caratteri spazio nell'output, dove n è il numero di spazi da inserire.
Tab(n)	Utilizzata per posizionare il punto di inserimento in corrispondenza di un numero di colonna assoluto, dove n è il numero di colonna. Utilizzare Tab senza argomento per posizionare il punto di inserimento all'inizio dell'area di stampa successiva.
espressione	Espressione numerica o espressione stringa da scrivere nel file.
poscarattere	Specifica la posizione del punto di inserimento per il carattere successivo. Utilizzare un punto e virgola per indicare che il punto di inserimento deve essere posizionato subito dopo l'ultimo carattere visualizzato. Utilizzare Tab(n) per posizionare il punto di inserimento in corrispondenza di un numero di colonna assoluto. Utilizzare Tab senza argomento per posizionare il punto di inserimento all'inizio dell'area di stampa successiva. Se poscarattere viene omesso, il carattere successivo verrà stampato nella riga successiva.
Osservazioni

I dati scritti tramite Print # vengono in genere letti dai file con Line Input # o Input.

Se l'argomento elencooutput viene omesso e si include solo un separatore di elenco dopo numerofile, nel file verrà stampata una riga vuota. Più espressioni possono essere separate con spazi o punti e virgola. Lo spazio in questo caso ha la stessa funzione del punto e virgola.

Per i dati di tipo Boolean verranno scritti i risultati True o False. Le parole chiave True e False non vengono tradotte, indipendentemente dalle impostazioni internazionali.

I dati Date verranno scritti nel file utilizzando il formato standard di data breve riconosciuto dal sistema. Se uno dei componenti di data o orario manca o è uguale a zero, nel file verrà scritta soltanto la parte specificata.

Nel file non verrà scritto niente se i dati inclusi in elencooutput sono di tipo Empty. Se, tuttavia, i dati inclusi in elencooutput sono Null, nel file verrà scritto Null.

Per i dati di tipo Error l'output verrà espresso nella forma Error codiceerrore. La parola chiave Error non viene tradotta, indipendentemente dalle impostazioni internazionali.

Tutti i dati vengono scritti nel file tramite Print # tenendo in considerazione le impostazioni internazionali, ovvero vengono formattati correttamente con il separatore decimale appropriato.

Dato che Print # consente di scrivere un'immagine dei dati nel file, è necessario delimitare i dati in modo che la stampa venga eseguita correttamente. Se si utilizza Tab senza argomenti per spostare la posizione di stampa nell'area di stampa successiva, Print # consentirà di scrivere nel file anche gli spazi tra i campi.

Nota   Se si prevede di dover leggere in seguito i dati di un file utilizzando l'istruzione Input #, è consigliabile utilizzare l'istruzione Write # anziché l'istruzione Print # per scrivere i dati nel file in quanto ogni campo di dati separato risulterà integro e adeguatamente delimitato e potrà quindi essere letto senza problemi utilizzando l'istruzione Input #. L'utilizzo dell'istruzione Write # garantisce inoltre la possibilità di leggere correttamente il file con qualsiasi impostazione internazionale.


Istruzione Put

Scrive i valori di una variabile in un file su disco.

Sintassi

Put [#]numerofile, [numerorecord], nomevariabile

La sintassi dell'istruzione Put è composta dalle seguenti parti:

Parte	Descrizione
numerofile	Obbligatoria. Qualsiasi numero di file valido.
numerorecord	Facoltativa. Variant (Long). Il numero di record (modalità Random) oppure il numero di byte (modalità Binary) dove inizia la scrittura.
nomevariabile	Obbligatoria. Nome della variabile contenente i dati da scrivere sul disco.
Osservazioni

I dati scritti tramite Put vengono in genere letti da un file con Get.

Il primo record o byte di un file si trova nella posizione 1, il secondo record o byte nella posizione 2 e così via. Se numerorecord viene omesso verrà scritto il record o byte successivo, vale a dire quello successivo all'ultima istruzione Get o Put oppure quello indicato dall'ultima funzione Seek. Sarà necessario tuttavia includere le virgole di delimitazione. Ad esempio:

Put #4,,FileBuffer

Nel caso di file aperti in modalità Random, verranno applicate le seguenti regole:

•	Se la lunghezza dei dati scritti è inferiore alla lunghezza specificata nella proposizione Len dell'istruzione Open, Put scriverà comunque i record successivi entro i limiti della lunghezza dei record. Lo spazio compreso tra la fine di un record e l'inizio del record successivo viene occupato dal contenuto esistente del buffer del file. Dal momento che la quantità dei dati immessi per riempire lo spazio non può essere determinata con sicurezza è in genere consigliabile verificare che la lunghezza del record corrisponda a quella dei dati che verranno scritti. Se la lunghezza dei dati da scrivere è maggiore di quanto specificato nella proposizione Len dell'istruzione Open, verrà generato un errore.

•	Se la variabile scritta è una stringa di lunghezza variabile, l'istruzione Put scriverà un descrittore di 2 byte contenente la lunghezza della stringa e quindi la variabile. È necessario che la lunghezza del record specificata dalla proposizione Len dell'istruzione Open sia maggiore di almeno 2 byte rispetto alla lunghezza effettiva della stringa.

•	Se la variabile scritta è una Variant di tipo numerico, l'istruzione Put scriverà 2 byte identificando il VarType della Variant e quindi la variabile. Quando si scrive, ad esempio, una Variant con valore VarType 3, l'istruzione Put scriverà 6 byte, di cui 2 byte identificheranno Variant come VarType 3 (Long) e 4 byte conterranno i dati di tipo Long. È necessario che la lunghezza del record specificata dalla proposizione Len dell'istruzione Open sia maggiore di almeno 2 byte rispetto al numero effettivo di byte richiesti per memorizzare la variabile.

Nota   È possibile utilizzare l’istruzione Put per scrivere una matrice Variant su disco, ma non per scrivere una Variant scalare che include una matrice, né per scrivere oggetti su disco.

•	Se la variabile scritta è una Variant con valore VarType 8 (String), l'istruzione Put scriverà 2 byte che identificano il valore VarType, 2 byte che indicano la lunghezza della stringa e quindi i dati della stringa. È necessario che la lunghezza del record specificata dalla proposizione Len dell'istruzione Open sia maggiore di almeno 4 byte rispetto alla lunghezza effettiva della stringa.

•	Se la variabile scritta è una matrice dinamica, l'istruzione Put scriverà un descrittore di lunghezza pari a 2 più 8 volte il numero delle dimensioni, ovvero 2 + 8 * NumeroDiDimensioni. È necessario che la lunghezza del record specificata dalla proposizione Len dell'istruzione Open sia maggiore o uguale alla somma di tutti i byte necessari per scrivere i dati della matrice e il descrittore della matrice. La seguente dichiarazione di matrice, ad esempio, richiede 118 byte quando la matrice viene scritta su disco.

Dim MyArray(1 To 5,1 To 10) As Integer

•	I 118 byte sono distribuiti come segue: 18 byte per il descrittore (2 + 8 * 2) e 100 byte per I dati (5 * 10 * 2).

•	Se la variabile in scrittura è una matrice a dimensioni fisse, l’istruzione Put scriverà solo i dati. Non viene scritto il descrittore.

•	Se la variabile scritta è di qualsiasi altro tipo, ovvero né una stringa di lunghezza variabile né di tipo Variant, l'istruzione Put scriverà solo i dati della variabile. È necessario che la lunghezza del record specificata dalla proposizione Len dell'istruzione Open sia maggiore o uguale alla lunghezza dei dati scritti.

•	Gli elementi di tipo definito dall'utente vengono scritti utilizzando Put come se ciascuno di essi venisse scritto singolarmente, con la sola differenza che in questo caso non vengono immessi dati per riempire lo spazio tra gli elementi. Su disco, a una matrice dinamica in un tipo definito dall'utente scritta con Put viene anteposto un descrittore, la cui lunghezza è uguale a 2 più il numero delle dimensioni moltiplicato per 8, ovvero 2+8 * NumeroDiDimensioni. È necessario che la lunghezza del record specificata dalla proposizione Len dell'istruzione Open sia maggiore o uguale alla somma di tutti i byte richiesti per la scrittura dei singoli elementi, incluse matrici e corrispondenti descrittori.

Nel caso di file aperti in modalità Binary, verranno applicate tutte le regole relative alla modalità Random con le seguenti eccezioni:

•	La proposizione Len dell'istruzione Open non ha effetto. L'istruzione Put scrive tutte le variabili sul disco in successione, ovvero senza riempire lo spazio tra i record.

•	Per matrici diverse da quelle in tipi definiti dall’utente, l’istruzione Put scrive solo i dati e non i descrittori.

•	L'istruzione Put scrive stringhe di lunghezza variabile che non sono elementi di tipo definito dall'utente senza il descrittore di lunghezza 2 byte. Il numero di byte scritti equivale al numero di caratteri della stringa. Le seguenti istruzioni, ad esempio, scrivono 10 byte nel file numero 1:

VarString$ = String$(10," ")

Put #1,,VarString$


Istruzione Reset

Chiude tutti i file su disco aperti con la funzione Open.

Sintassi

Reset

Osservazioni

L'istruzione Reset consente di chiudere tutti i file attivi aperti con l'istruzione Open e di scrivere il contenuto di tutti i buffer su disco.


Funzione Seek

Restituisce un valore Long che specifica la posizione di lettura/scrittura corrente in un file aperto con l'istruzione Open.

Sintassi

Seek(numerofile)

L'argomento obbligatorio numerofile è un valore Integer che contiene un qualsiasi numero di file valido.

Osservazioni

La funzione Seek restituisce un valore compreso tra 1 e 2.147.483.647 (equivalente a 2^31 – 1) inclusi.

Di seguito sono descritti i valori restituiti per ciascuna modalità di accesso ai file.

Modalità	Valore restituito
Random	Numero del successivo record letto o scritto
Binary, Output, Append, Input	Posizione di byte nella quale l'operazione successiva verrà eseguita. Il primo byte di un file si trova nella posizione 1, il secondo byte nella posizione 2 e così via.


Istruzione Seek

Imposta la posizione all'interno di un file aperto con la funzione Open in cui avrà luogo la successiva operazione di lettura o scrittura.

Sintassi

Seek [#]numerofile, posizione

La sintassi dell'istruzione Seek è composta dalle seguenti parti:

Parte	Descrizione
numerofile	Obbligatoria. Qualsiasi numero di file valido.
posizione	Obbligatoria. Numero compreso tra 1 e 2.147.483.647 inclusi, che indica la posizione nella quale verrà eseguita la successiva operazione di lettura o scrittura.
Osservazioni

I numeri di record specificati con le istruzioni Get e Put hanno la precedenza rispetto alla posizione impostata tramite l'istruzione Seek.

Se si esegue un'operazione di scrittura su file dopo aver oltrepassato la fine del file con un'operazione Seek, i dati verranno aggiunti alla fine del file. Se si tenta di eseguire un'operazione Seek in una posizione corrispondente a un numero negativo o uguale a zero, verrà generato un errore.


Funzione Spc

Utilizzata con l'istruzione Print # o con il metodo Print per specificare la posizione dell'output.

Sintassi

Spc(n)

L'argomento obbligatorio n è costituito dal numero di spazi da inserire prima di visualizzare o scrivere la successiva espressione di un elenco.

Osservazioni

Se n è minore della larghezza della riga di output, la successiva posizione di scrittura sarà immediatamente successiva al numero di spazi scritti. Se n è maggiore della riga di output la funzione Spc calcolerà la successiva posizione di scrittura con la seguente formula:

posizionecorrentescrittura + (n Mod larghezza)

Se, ad esempio, la posizione di scrittura corrente è 24, la larghezza della riga di output è 80 e si specifica Spc(90), la scrittura successiva inizierà alla posizione 34 (posizione corrente di scrittura + il resto di 90/80). Se la differenza tra la posizione corrente di scrittura e la larghezza della riga di output è minore di n (oppure n Mod larghezza), la funzione Spc passerà all'inizio della riga successiva e genererà un numero di spazi ugualea n – (larghezza – posizionecorrentescrittura).

Nota   È consigliabile verificare che la larghezza delle colonne in formato tabellare utilizzate sia sufficiente per contenere lettere che richiedono maggiore spazio.

Quando si utilizza il metodo Print con un tipo di carattere a spaziatura proporzionale, la larghezza dei caratteri spazio scritti utilizzando la funzione Spc è sempre costituita da una media della larghezza di tutti i caratteri nella dimensione in punti relativa al tipo di carattere scelto. Non esiste comunque una correlazione tra il numero di caratteri scritti e il numero di colonne a larghezza fissa occupate da tali caratteri. La lettera maiuscola M, ad esempio, occupa uno spazio maggiore di quello di una colonna a larghezza fissa e la lettera minuscola l occupa uno spazio minore.


Funzione Tab

Utilizzata con l'istruzione Print # o con il metodo Print per specificare la posizione dell'output.

Sintassi

Tab[(n)]

L'argomento facoltativo n rappresenta il numero di colonna in cui spostarsi tramite una tabulazione prima di visualizzare o scrivere l'espressione successiva di un elenco. Se l'argomento viene omesso, la funzione Tab consente di spostare il punto di inserimento all'inizio dell'area di stampa successiva. Ciò consente di utilizzare la funzione Tab al posto della virgola in caso di impostazioni internazionali che prevedono la virgola come separatore decimale.

Osservazioni

Se la posizione di scrittura corrente calcolata è maggiore di n, Tab passerà direttamente alla colonna n nella riga di output successiva. Se n è minore di 1, Tab sposterà la posizione di scrittura alla colonna 1. Se n è maggiore della larghezza della riga di output, Tab calcolerà la successiva posizione di scrittura utilizzando la seguente formula:

n Mod larghezza

Se, ad esempio, larghezza è 80 e si specifica Tab(90), la successiva posizione di scrittura inizierà alla colonna 10 (resto della divisione 90/80). Se n è inferiore alla posizione di scrittura corrente, la scrittura avrà inizio a partire dalla riga successiva nella posizione di scrittura calcolata. Se la posizione di scrittura calcolata è maggiore della posizione di scrittura corrente, la scrittura avrà inizio dalla posizione di scrittura calcolata nella stessa riga.

La prima posizione di scrittura in una riga di output è sempre 1. Quando si utilizza l'istruzione Print # per scrivere sui file, l'ultima posizione di scrittura corrisponde alla larghezza corrente del file di output, che può essere impostata con l'istruzione Width #.

Nota   È consigliabile verificare che la larghezza delle colonne in formato tabellare utilizzate sia sufficiente per contenere lettere che richiedono maggiore spazio.

Quando la funzione Tab viene utilizzata con il metodo Print, l'area di stampa viene suddivisa in colonne uniformi a larghezza fissa. La larghezza di ciascuna colonna è costituita dalla media della larghezza di tutti i caratteri nella dimensione in punti relativa al tipo di carattere scelto. Non esiste comunque una correlazione tra il numero di caratteri scritti e il numero di colonne a larghezza fissa occupate da tali caratteri. La lettera maiuscola M, ad esempio, occupa uno spazio maggiore di quello di una colonna a larghezza fissa e la lettera minuscola l occupa uno spazio minore.


Istruzione Width #

Imposta la larghezza della riga di output per un file aperto utilizzando l'istruzione Open.

Sintassi

Width #numerofile, larghezza

La sintassi dell'istruzione Width # è composta dalle seguenti parti:

Parte	Descrizione
numerofile	Obbligatoria. Qualsiasi numero di file valido.
larghezza	Obbligatoria. Espressione numerica compresa nell'intervallo fra 0 e 255 inclusi, che indica quanti caratteri vengono visualizzati su una riga prima che inizi una nuova riga. Se larghezza è uguale a 0, non esisterà alcun limite alla lunghezza della riga. Il valore predefinito relativo alla larghezza della riga corrisponde a 0.


Istruzione Write #

Scrive i dati in un file ad accesso sequenziale.

Sintassi

Write #numerofile, [elencooutput]

La sintassi dell'istruzione Write # è composta dalle seguenti parti:

Parte	Descrizione
numerofile	Obbligatoria. Qualsiasi numero file valido.
elencooutput	Facoltativa. Una o più espressioni numeriche o espressioni stringa delimitate da virgole che si desidera scrivere sul file.
Osservazioni

I dati scritti tramite Write # vengono in genere letti da un file con Input #.

Se l'argomento elencooutput viene omesso e si include solo una virgola dopo numerofile, nel file verrà scritta una riga vuota. Più espressioni possono essere separate con spazi, virgole e punti e virgola. Lo spazio in questo caso ha la stessa funzione del punto e virgola.

Quando si utilizza la funzione Write # per scrivere dati in un file, vengono adottati criteri universali che consentono di leggere e interpretare correttamente i dati con l'istruzione Input #, indipendentemente dalle impostazioni internazionali:

•	I dati numerici vengono sempre scritti utilizzando il punto (.) come separatore decimale.

•	Per i dati di tipo Boolean vengono stampati i valori #TRUE# o #FALSE#. Le parole chiave True e False non verranno tradotte, indipendentemente dalle impostazioni internazionali.

•	I dati di tipo Date verranno scritti nel file utilizzando il formato di data universale. Se uno dei componenti di data o orario manca o è uguale a zero, nel file verrà scritta solo la parte specificata.

•	Se i dati inclusi in elencooutput sono Empty non verrà scritto niente nel file. Se, invece, i dati sono Null, l'output sarà #NULL#.

•	Se i dati di elencooutput sono Null, nel file verrà scritto #NULL#.

•	Nell'output i dati relativi agli errori verranno espressi nella forma #ERROR codiceerrore#. La parola chiave Error non verrà tradotta, indipendentemente dalle impostazioni internazionali.

A differenza dell'istruzione Print #, l'istruzione Write # inserisce virgole tra gli elementi e racchiude le stringhe tra virgolette mentre vengono scritte nel file. Non è necessario inserire nell'elenco delimitatori espliciti. Write # inserisce un carattere di nuova riga, ovvero una sequenza ritorno a capo–avanzamento riga (Chr(13) + Chr(10)), dopo aver scritto nel file l'ultimo carattere dell'argomento elencooutput.

Nota   Con l'instruzione Input # non utilizzare stringhe in cui sono incorporate virgolette doppie. La stringa "1,2""X", ad esempio, viene analizzata come se se si trattasse di due stringhe complete distinte.


Esempio di funzione DDB

Questo esempio utilizza la funzione DDB per restituire l'ammortamento di un bene in un periodo di tempo specificato. Sono specificati il costo iniziale (InitCost), il valore di realizzo al termine della vita utile del bene (SalvageVal), la vita utile totale del bene espressa in anni (LifeTime) e il periodo per il quale viene calcolato l'ammortamento, anch'esso espresso in anni (Depr).

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, Depr

Const YRMOS = 12	' Numero di mesi in un anno.

Fmt = "###,##0.00"

InitCost = InputBox("Costo iniziale del bene:")

SalvageVal = InputBox("Digitare il valore del bene al termine della vita utile.")

MonthLife = InputBox("Durata in mesi della vita utile del bene:")

Do While MonthLife < YRMOS	' Verifica che il periodo sia >= 1 anno.

MsgBox "La vita utile del bene deve essere maggiore o uguale ad un anno."

MonthLife = InputBox("Durata in mesi della vita utile del bene:")

Loop

LifeTime = MonthLife / YRMOS	' Converte i mesi in anni.

If LifeTime <> Int(MonthLife / YRMOS) Then

LifeTime = Int(LifeTime + 1)	' Arrotonda all'anno più vicino.

End If

DepYear = CInt(InputBox("Immettere l'anno per il calcolo dell'ammortamento."))

Do While DepYear < 1 Or DepYear > LifeTime

MsgBox "Immettere almeno 1 ma non più di " & LifeTime

DepYear = InputBox("Immettere l'anno per il calcolo dell'ammortamento.")

Loop

Depr = DDB(InitCost, SalvageVal, LifeTime, DepYear)

MsgBox "L'ammortamento per l'anno " & DepYear & " è " & _

Format(Depr, Fmt) & "."


Esempio di funzione FV

In questo esempio la funzione FV viene utilizzata per restituire il valore futuro di un investimento. Sono specificati il tasso percentuale di crescita per periodo (APR / 12), il numero totale di pagamenti (TotPmts), l'ammontare della rata (Payment), il valore corrente dell'investimento (PVal) e un numero che indica se il pagamento viene eseguito all'inizio o alla fine del periodo (PayType). Si noti che Payment è un numero negativo, in quanto rappresenta una somma versata.

Dim Fmt, Payment, APR, TotPmts, PayType, PVal, FVal

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Periodo di esecuzione dei pagamenti.

Fmt = "###,###,##0.00"	' Definisce il formato valuta.

Payment = InputBox("Risparmio mensile previsto:")

APR = InputBox("Digitare il tasso di interesse annuo previsto.")

If APR > 1 Then APR = APR / 100	' Verifica la forma corretta.

TotPmts = InputBox("Mesi previsti per il risparmio:")

PayType = MsgBox("I pagamenti verranno eseguiti alla fine del mese?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

PVal = InputBox("Totale attuale del conto?")

FVal = FV(APR / 12, TotPmts, -Payment, -PVal, PayType)

MsgBox "Il valore dell'investimento sarà " & Format(FVal, Fmt) & "."


Esempio di funzione IPmt

In questo esempio la funzione IPmt viene utilizzata per calcolare la parte di un pagamento rappresentata dagli interessi per pagamenti di uguale valore. Sono specificati il tasso di interesse per periodo (APR / 12), il periodo di pagamento per il quale si desidera ricavare la quota di interesse (Period), il numero totale di pagamenti (TotPmts), il valore attuale o capitale del prestito (PVal), il valore futuro del prestito (FVal) e un numero che indica se il pagamento scade all'inizio o alla fine del periodo di pagamento (PayType).

Dim FVal, Fmt, PVal, APR, TotPmts, PayType, Period, IntPmt, TotInt, Msg

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Periodo esecuzione pagamenti.

FVal = 0	' In genere 0 per un prestito.

Fmt = "###,###,##0.00"	' Definisce il formato valuta.

PVal = InputBox("Ammontare del prestito:")

APR = InputBox("Tasso percentuale annuo del prestito:")

If APR > 1 Then APR = APR / 100	' Verifica la forma.

TotPmts = InputBox("Numero delle rate mensili:")

PayType = MsgBox("I pagamenti verranno eseguiti alla fine del mese?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

For Period = 1 To TotPmts	' Somma tutti gli interessi.

IntPmt = IPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)

TotInt = TotInt + IntPmt

Next Period

Msg = "La somma " & Format(TotInt, Fmt)

Msg = Msg & " corrisponde agli interessi totali sul prestito."

MsgBox Msg	' Visualizza i risultati.


Esempio di funzione IRR

In questo esempio la funzione IRR restituisce il tasso di rendimento interno per una serie di 5 flussi di cassa contenuti nella matrice Values(). Il primo elemento della matrice è un flusso di cassa negativo che rappresenta i costi di avvio dell'attività. I 4 flussi rimanenti sono flussi di cassa positivi per i 4 anni che seguono. Guess è il tasso di rendimento interno previsto.

Dim Guess, Fmt, RetRate, Msg

Static Values(5) As Double	' Imposta la matrice.

Guess = .1	' Stima iniziale del 10 per cento.

Fmt = "#0.00"	' Definisce il formato percentuale.

Values(0) = -70000	' Costi avvio attività.

' Flussi di cassa positivi per i quattro anni successivi.

Values(1) = 22000 : Values(2) = 25000

Values(3) = 28000 : Values(4) = 31000

RetRate = IRR(Values(), Guess) * 100	' Calcola il tasso interno.

Msg = "Il tasso di rendimento interno per questi cinque flussi di cassa è del "

Msg = Msg & Format(RetRate, Fmt) & " percento."

MsgBox Msg	' Visualizza il tasso di  rendimento interno.


Esempio di funzione MIRR

In questo esempio la funzione MIRR viene utilizzata per restituire il tasso di rendimento interno modificato per una serie di flussi di cassa contenuti nella matrice Values(). LoanAPR rappresenta l'interesse sul finanziamento, mentre InvAPR rappresenta il tasso di interesse sugli utili del reinvestimento.

Dim LoanAPR, InvAPR, Fmt, RetRate, Msg

Static Values(5) As Double	' Imposta la matrice.

LoanAPR = .1	' Interesse sul finanziamento.

InvAPR = .12	' Interesse sul reinvestimento.

Fmt = "#0.00"	' Definisce il formato valuta.

Values(0) = -70000	' Costi avvio attività.

' Flussi di cassa positivi per i quattro anni successivi.

Values(1) = 22000 : Values(2) = 25000

Values(3) = 28000 : Values(4) = 31000

RetRate = MIRR(Values(), LoanAPR, InvAPR)	' Calcola il tasso interno.

Msg = "Il tasso di rendimento interno modificato per questi cinque flussi di cassa è del "

Msg = Msg & Format(Abs(RetRate) * 100, Fmt) & "%."

MsgBox Msg	' Visualizza il tasso di rendimento interno.


Esempio di funzione NPer

In questo esempio la funzione NPer viene utilizzata per restituire il numero di periodi di pagamento necessari per la chiusura di un prestito, il cui valore è contenuto in PVal. Sono specificati il tasso di interesse percentuale per periodo (APR / 12), la rata (Payment), il valore futuro del prestito (FVal) e un numero che indica se la rata scade all'inizio o alla fine del periodo di pagamento (PayType).

Dim FVal, PVal, APR, Payment, PayType, TotPmts

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Periodo esecuzione pagamenti.

FVal = 0	' In genere 0 per un prestito.

PVal = InputBox("Ammontare del prestito:")

APR = InputBox("Tasso percentuale annuo del prestito:")

If APR > 1 Then APR = APR / 100	' Verifica la forma.

Payment = InputBox("Ammontare della rata mensile:")

PayType = MsgBox("I pagamenti verranno eseguiti alla fine del mese?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

TotPmts = NPer(APR / 12, -Payment, PVal, FVal, PayType)

If Int(TotPmts) <> TotPmts Then TotPmts = Int(TotPmts) + 1

MsgBox "Saranno necessari " & TotPmts & " mesi per estinguere il prestito."


Esempio di funzione NPV

In questo esempio la funzione NPV viene utilizzata per restituire il valore attuale netto di una serie di flussi di cassa contenuti nella matrice Values(). RetRate rappresenta il tasso di rendimento interno fisso.

Dim Fmt, Guess, RetRate, NetPVal, Msg

Static Values(5) As Double	' Imposta la matrice.

Fmt = "###,##0.00"	' Definisce il formato valuta.

Guess = .1	' La stima iniziale è del 10%.

RetRate = .0625	' Imposta il tasso interno fisso.

Values(0) = -70000	' Costi avvio attività.

' Flussi di cassa positivi per i quattro anni successivi.

Values(1) = 22000 : Values(2) = 25000

Values(3) = 28000 : Values(4) = 31000

NetPVal = NPV(RetRate, Values())	' Calcola il valore attuale netto.

Msg = "Il valore attuale netto dei flussi di cassa è "

Msg = Msg & Format(NetPVal, Fmt) & "."

MsgBox Msg	' Visualizza il valore attuale netto.


Esempio di funzione Pmt

In questo esempio la funzione Pmt viene utilizzata per restituire l'ammontare mensile del rimborso di un prestito in un periodo determinato. Sono specificati il tasso di interesse percentuale per periodo (APR / 12), il numero totale di pagamenti (TotPmts), il valore attuale o capitale del prestito (PVal), il valore futuro del prestito (FVal) e un numero che indica se la rata scade all'inizio o alla fine del periodo di pagamento (PayType).

Dim Fmt, FVal, PVal, APR, TotPmts, PayType, Payment

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Periodo esecuzione pagamenti.

Fmt = "###,###,##0.00"	' Definisce il formato valuta.

FVal = 0	' In genere 0 per un prestito.

PVal = InputBox("Ammontare del prestito:")

APR = InputBox("Tasso percentuale annuo del prestito:")

If APR > 1 Then APR = APR / 100	' Verifica la forma.

TotPmts = InputBox("Numero delle rate mensili:")

PayType = MsgBox("I pagamenti verranno eseguiti alla fine del mese?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

Payment = Pmt(APR / 12, TotPmts, -PVal, FVal, PayType)

MsgBox "La rata ammonterà a " & Format(Payment, Fmt) & " mensili."


Esempio di funzione PPmt

In questo esempio la funzione PPmt viene utilizzata per calcolare la parte di un pagamento rappresentata dal capitale per pagamenti di uguale valore. Sono specificati il tasso di interesse percentuale per periodo (APR / 12), il periodo di pagamento per il quale si desidera ricavare la quota rappresentata dal capitale (Period), il numero totale di pagamenti (TotPmts), il valore attuale o capitale del prestito (PVal), il valore futuro del prestito (FVal) e un numero che indica se la rata scade all'inizio o alla fine del periodo di pagamento (PayType).

Dim NL, TB, Fmt, FVal, PVal, APR, TotPmts, PayType, Payment, Msg, MakeChart, Period, P, I

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Periodo esecuzione pagamenti.

NL = Chr(13) & Chr(10)	' Definisce la nuova riga.

TB = Chr(9)	' Definisce la tabulazione.

Fmt = "###,###,##0.00"	' Definisce il formato valuta.

FVal = 0	' In genere 0 per un prestito.

PVal = InputBox("Ammontare del prestito:")

APR = InputBox("Tasso percentuale annuo del prestito:")

If APR > 1 Then APR = APR / 100	' Verifica la forma.

TotPmts = InputBox("Numero delle rate mensili:")

PayType = MsgBox("I pagamenti verranno eseguiti alla fine del mese?", vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

Payment = Abs(-Pmt(APR / 12, TotPmts, PVal, FVal, PayType))

Msg = "La rata mensile ammonta a " & Format(Payment, Fmt) & ". "

Msg = Msg & "Si desidera separare il capitale dagli interessi "

Msg = Msg & "per periodo?"

MakeChart = MsgBox(Msg, vbYesNo)	' Verifica se si desidera creare un grafico.

If MakeChart <> vbNo Then

If TotPmts > 12 Then MsgBox "Verrà visualizzato soltanto il primo anno."

Msg = "Mese  Rata  Capitale  Interessi" & NL

For Period = 1 To TotPmts

If Period > 12 Then Exit For	' Visualizza solo i primi 12.

P = PPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)

P = (Int((P + .005) * 100) / 100)	' Capitale arrotondato.

I = Payment - P

I = (Int((I + .005) * 100) / 100)	' Interessi arrotondati.

Msg = Msg & Period & TB & Format(Payment, Fmt)

Msg = Msg & TB & Format(P, Fmt) & TB & Format(I, Fmt) & NL

Next Period

MsgBox Msg	' Visualizza la tabella di ammortamento.

End If


Esempio di funzione PV

In questo esempio la funzione PV restituisce il valore attuale di una rendita annua di L. 1.000.000 con rendimento annuo di L. 50.000 per i prossimi 20 anni. Sono specificati il tasso percentuale annuo previsto (APR), il numero totale di pagamenti (TotPmts), l'ammontare di ciascun pagamento (YrIncome), il valore totale futuro dell'investimento (FVal) e un numero che indica se ciascun pagamento viene effettuato all'inizio o alla fine del periodo (PayType). Si noti che YrIncome è un numero negativo, in quanto rappresenta la somma versata ogni anno dalla rendita annua.

Dim Fmt, APR, TotPmts, YrIncome, FVal, PayType, PVal

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Periodo esecuzione pagamenti.

Fmt = "###,##0.00"	' Definisce il formato valuta.

APR = .0825	' Tasso percentuale annuo.

TotPmts = 20	' Numero totale pagamenti.

YrIncome = 50000	' Utile annuo.

FVal = 1000000	' Valore futuro.

PayType = BEGINPERIOD	' Pagamento all'inizio del mese.

PVal = PV(APR, TotPmts, -YrIncome, FVal, PayType)

MsgBox "Il valore attuale è di " & Format(PVal, Fmt) & "."


Esempio di funzione Rate

In questo esempio la funzione Rate viene utilizzata per calcolare il tasso di interesse di un prestito. Sono specificati il numero totale di pagamenti (TotPmts), l'ammontare del pagamento (Payment), il valore attuale o capitale del prestito (PVal), il valore futuro del prestito (FVal), un numero che indica se il pagamento scade all'inizio o alla fine del periodo di pagamento (PayType) e una stima del tasso di interesse previsto (Guess).

Dim Fmt, FVal, Guess, PVal, Payment, TotPmts, PayType, APR

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Periodo esecuzione pagamenti.

Fmt = "##0.00"	' Definisce il formato percentuale.

FVal = 0	' In genere 0 per un prestito.

Guess = .1	' Stima del 10%.

PVal = InputBox("Ammontare del prestito:")

Payment = InputBox("Importo della rata mensile:")

TotPmts = InputBox("Numero delle rate mensili:")

PayType = MsgBox("I pagamenti verranno eseguiti alla fine del mese?", _

vbYesNo)

If PayType = vbNo Then PayType = BEGINPERIOD Else PayType = ENDPERIOD

APR = (Rate(TotPmts, -Payment, PVal, FVal, PayType, Guess) * 12) * 100

MsgBox "Il tasso di interesse corrisponde al " & Format(CInt(APR), Fmt) & " %."


Esempio di funzione SLN

In questo esempio la funzione SLN viene utilizzata per restituire l'ammortamento a quote costanti di un bene per un singolo periodo. Sono specificati il costo iniziale del bene (InitCost), il valore di realizzo al termine della vita utile del bene (SalvageVal) e la vita totale del bene in anni (LifeTime).

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, PDepr

Const YEARMONTHS = 12	' Numero di mesi in un anno.

Fmt = "###,##0.00"	' Definisce il formato valuta.

InitCost = InputBox("Costo iniziale del bene:")

SalvageVal = InputBox("Valore del bene al termine della vita utile:")

MonthLife = InputBox("Durata in mesi della vita utile del bene:")

Do While MonthLife < YEARMONTHS	' Verifica che il periodo sia >= 1 anno.

MsgBox "La vita utile del bene deve essere maggiore o uguale ad un anno."

MonthLife = InputBox("Durata in mesi della vita utile del bene:")

Loop

LifeTime = MonthLife / YEARMONTHS	' Converte i mesi in anni.

If LifeTime <> Int(MonthLife / YEARMONTHS) Then

LifeTime = Int(LifeTime + 1)	' Arrotonda all'anno più vicino.

End If

PDepr = SLN(InitCost, SalvageVal, LifeTime)

MsgBox "L'ammortamento è di " & Format(PDepr, Fmt) & " all'anno."


Esempio di funzione SYD

Questo esempio utilizza la funzione SYD per restituire l'ammortamento di un bene per il periodo specificato. Sono specificati il costo iniziale del bene (InitCost), il valore di realizzo del bene al termine della vita utile (SalvageVal) e la vita totale del bene in anni (LifeTime). Il periodo per il quale viene calcolato l'ammortamento, PDepr, è espresso in anni.

Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, PDepr

Const YEARMONTHS = 12	' Numero di mesi in un anno.

Fmt = "###,##0.00"	' Definisce il formato valuta.

InitCost = InputBox("Costo iniziale del bene:")

SalvageVal = InputBox("Valore del bene al termine della vita utile:")

MonthLife = InputBox("Durata in mesi della vita utile del bene:")

Do While MonthLife < YEARMONTHS	' Verifica che il periodo sia >= 1 anno.

MsgBox "La vita utile del bene deve essere maggiore o uguale ad un anno."

MonthLife = InputBox("Durata in mesi della vita utile del bene:")

Loop

LifeTime = MonthLife / YEARMONTHS	' Converte i mesi in anni.

If LifeTime <> Int(MonthLife / YEARMONTHS) Then

LifeTime = Int(LifeTime + 1)	' Arrotonda all'anno più vicino.

End If

DepYear = CInt(InputBox("Anno dell'ammortamento:"))

Do While DepYear < 1 Or DepYear > LifeTime

MsgBox "Digitarne almeno 1 ma non più di " & LifeTime

DepYear = CInt(InputBox("Anno dell'ammortamento:"))

Loop

PDepr = SYD(InitCost, SalvageVal, LifeTime, DepYear)

MsgBox "L'ammortamento per l'anno " & DepYear & " è di " & Format(PDepr, Fmt) & "."


Funzione DDB

Restituisce un valore Double che specifica l'ammortamento di un bene per un periodo specificato utilizzando il metodo di ammortamento a doppie quote decrescenti o un altro metodo specificato dall'utente.

Sintassi

DDB(cost, salvage, life, period[, factor])

La sintassi della funzione DDB è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
cost	Obbligatoria. Double che specifica il costo iniziale del bene.
salvage	Obbligatoria. Double che specifica il valore del bene al termine della vita utile.
life	Obbligatoria. Double che specifica la vita utile del bene.
period	Obbligatoria. Double che specifica il periodo di calcolo dell'ammortamento del bene.
factor	Facoltativa. Variant che specifica la quota di ammortamento. Se l'argomento è omesso, verrà utilizzato 2, corrispondente al metodo di ammortamento a doppie quote decrescenti.
Osservazioni

Il metodo di ammortamento a doppie quote decrescenti calcola l'ammortamento accelerato. L'ammortamento sarà massimo nel primo periodo e diminuirà progressivamente nei periodi successivi.

Gli argomenti life e period devono essere espressi utilizzando la stessa unità di tempo. Se, ad esempio, life è espresso in mesi, anche period dovrà essere espresso in mesi. Tutti gli argomenti devono essere numeri positivi.

La funzione DDB calcola l'ammortamento in un periodo specificato in base alla seguente formula:

Ammortamento / period = ((cost – salvage) * factor) / life


Funzione FV

Restituisce un valore Double che specifica il valore futuro di una rendita annua basata su pagamenti periodici costanti e su un tasso di interesse fisso.

Sintassi

FV(rate, nper, pmt[, pv[, type]])

La sintassi della funzione FV è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
rate	Obbligatoria. Double che specifica il tasso di interesse per periodo. Nel caso di un prestito con tasso di interesse annuo del 10% da restituire con rate mensili, il tasso per periodo sarà 0,1/12 ovvero 0,0083.
nper	Obbligatoria. Integer che specifica il numero totale di periodi di pagamento. Nel caso di un prestito di durata complessiva di 4 anni da restituire con rate mensili, il numero totale dei periodi di pagamento sarà 4 * 12 = 48.
pmt	Obbligatoria. Double che specifica la rata da pagare per ciascun periodo. Le rate sono in genere costituite da un capitale e da un interesse che rimangono invariati per la durata della rendita annuale.
pv	Facoltativa. Variant che specifica il valore attuale di una serie di pagamenti da effettuare in futuro. L'importo di un prestito corrisponde al valore attuale delle rate mensili che verranno pagate. Se viene omesso, verrà utilizzato il valore 0.
type	Facoltativa. Variant che specifica la scadenza delle rate. Utilizzare 0 se le rate sono in scadenza al termine del periodo, 1 se le rate sono in scadenza all'inizio del periodo. Se l'argomento viene omesso, verrà utilizzato il valore 0.
Osservazioni

Una rendita annua è una serie di pagamenti costanti eseguiti entro un determinato periodo di tempo. Può trattarsi di un prestito, ad esempio un mutuo fondiario, oppure di un investimento, ad esempio un programma di risparmio mensile.

Gli argomenti rate e nper devono essere calcolati utilizzando periodi di pagamenti espressi con le stesse unità di tempo. Se, ad esempio, rate viene calcolato su base mensile, anche nper dovrà essere espresso in mesi.

Per tutti gli argomenti, le uscite (ad esempio i depositi per risparmi) vengono indicate con numeri negativi e le entrate (ad esempio gli interessi attivi) con numeri positivi.


Funzione IPmt

Restituisce un valore Double che specifica il valore degli interessi per un periodo specifico di una rendita annua in base a pagamenti periodici costanti e a un tasso di interesse fisso.

Sintassi

IPmt(rate, per, nper, pv[, fv[, type]])

La sintassi della funzione IPmt è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
rate	Obbligatoria. Double che specifica il tasso di interesse per periodo. Nel caso di un prestito con tasso di interesse annuo del 10% da restituire con rate mensili, il tasso per periodo sarà 0,1/12 ovvero 0,0083.
per	Obbligatoria. Double che specifica il periodo di pagamento compreso nell'intervallo da 1 a nper.
nper	Obbligatoria. Double che specifica il numero totale di periodi di pagamento. Nel caso di un prestito di durata complessiva di 4 anni da restituire con rate mensili, il numero totale dei periodi di pagamento sarà 4 * 12 = 48.
pv	Obbligatoria. Double che specifica il valore attuale di una serie di entrate o uscite future. L'importo di un prestito corrisponde al valore attuale delle rate mensili che verranno pagate.
fv	Facoltativa. Variant che specifica il valore o saldo di cassa previsto dopo aver effettuato l'ultimo pagamento. Nel caso di un prestito, il valore futuro sarà 0, a indicare che tutti i pagamenti sono stati effettuati. Nel caso di un programma di risparmio, il valore futuro corrisponderà all'importo che si è deciso di accantonare per il periodo specificato. Se viene omesso, verrà utilizzato il valore 0.
type	Facoltativa. Variant che indica la scadenza delle rate. Utilizzare 0 se le rate sono in scadenza al termine del periodo, 1 se le rate sono in scadenza all'inizio del periodo. Se l'argomento viene omesso, verrà utilizzato il valore 0.
Osservazioni

Una rendita annua è una serie di pagamenti costanti eseguiti entro un determinato periodo di tempo. Può trattarsi di un prestito, ad esempio un mutuo fondiario, oppure di un investimento, ad esempio un programma di risparmio mensile.

Gli argomenti rate e nper devono essere calcolati utilizzando periodi di pagamenti espressi con le stesse unità di tempo. Se, ad esempio, rate viene calcolato su base mensile, anche nper dovrà essere espresso in mesi.

Per tutti gli argomenti, le uscite (ad esempio i depositi per risparmi) vengono indicate con numeri negativi e le entrate (ad esempio gli interessi attivi) con numeri positivi.


Funzione IRR

Restituisce un valore Double che specifica il tasso di rendimento interno per una serie di flussi di cassa periodici (entrate e uscite).

Sintassi

IRR(values()[, guess])

La sintassi della funzione IRR è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
values()	Obbligatoria. Matrice di valori Double che specifica i valori di flusso di cassa. La matrice deve contenere almeno un valore negativo (uscita) e un valore positivo (entrata).
guess	Facoltativa. Variant che specifica il valore previsto come risultato di IRR. Se viene omesso, guess  verrà impostato su 0,1, ovvero il 10%.
Osservazioni

Il tasso di rendimento interno è il tasso di interesse di un investimento composto da entrate e uscite che si verificano a intervalli regolari.

La funzione IRR utilizza l'ordine di valori della matrice per interpretare l'ordine delle entrate e delle uscite. I valori delle entrate e delle uscite dovranno quindi essere immessi nella sequenza corretta. Il flusso di cassa per un periodo non deve necessariamente essere costante, come nel caso di una rendita annua.

IRR viene calcolata per iterazione. A partire dal valore di guess, IRR esegue un ciclo di calcolo fino a ottenere un risultato con approssimazione pari allo 0,00001%. Se dopo 20 tentativi non si ottiene alcun risultato, la funzione IRR avrà esito negativo.


Funzione MIRR

Restituisce un valore Double che specifica il tasso di rendimento interno modificato per una serie di flussi di cassa periodici (entrate e uscite).

Sintassi

MIRR(values(), finance_rate, reinvest_rate)

La sintassi della funzione MIRR è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
values()	Obbligatoria. Matrice di valori Double che specifica i valori di flusso di cassa. Deve contenere almeno un valore negativo (uscita) e un valore positivo (entrata).
finance_rate	Obbligatoria. Double che specifica il tasso di interesse pagato come costo del finanziamento.
reinvest_rate	Obbligatoria. Double che specifica il tasso di interesse attivo sugli utili di un reinvestimento.
Osservazioni

Il tasso di rendimento interno modificato è il tasso di rendimento interno nel caso in cui le entrate e le uscite siano finanziate a tassi diversi. La funzione MIRR calcola sia il costo dell'investimento (finance_rate) che il tasso di interesse sugli utili del reinvestimento (reinvest_rate).

Gli argomenti finance_rate e reinvest_rate sono percentuali espresse come valori decimali. Il 12% è, ad esempio, espresso come 0,12.

La funzione MIRR utilizza l'ordine di valori della matrice per interpretare l'ordine delle entrate e delle uscite. I valori delle entrate e delle uscite dovranno quindi essere immessi nella sequenza corretta.


Funzione NPer

Restituisce un valore Double che specifica il numero di periodi di una rendita annua, sulla base di pagamenti periodici costanti e di un tasso di interesse costante.

Sintassi

NPer(rate, pmt, pv[, fv[, type]])

La sintassi della funzione NPer è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
rate	Obbligatoria. Double che specifica il tasso di interesse per periodo. Nel caso di un prestito con tasso di interesse annuo del 10% da restituire con rate mensili, il tasso per periodo sarà 0,1/12 ovvero 0,0083.
pmt	Obbligatoria. Double che specifica la rata da pagare per ciascun periodo. Le rate sono in genere costituite da un capitale e da un interesse che rimangono invariati per la durata della rendita annuale.
pv	Obbligatoria. Double che specifica il valore attuale di una serie di entrate o uscite future. L'importo di un prestito corrisponde al valore attuale delle rate mensili che verranno pagate.
fv	Facoltativa. Variant che specifica il valore o saldo di cassa previsto dopo aver effettuato l'ultimo pagamento. Nel caso di un prestito, il valore futuro sarà 0, a indicare che tutti i pagamenti sono stati effettuati. Nel caso di un programma di risparmio, il valore futuro corrisponderà all'importo che si è deciso di accantonare per il periodo specificato. Se viene omesso, verrà utilizzato il valore 0.
type	Facoltativa. Variant che indica la scadenza delle rate. Utilizzare 0 se le rate sono in scadenza al termine del periodo, 1 se le rate sono in scadenza all'inizio del periodo. Se l'argomento viene omesso, verrà utilizzato il valore 0.
Osservazioni

Una rendita annua è una serie di pagamenti costanti eseguiti entro un determinato periodo di tempo. Può trattarsi di un prestito, ad esempio un mutuo fondiario, oppure di un investimento, ad esempio un programma di risparmio mensile.

Per tutti gli argomenti, le uscite (ad esempio i depositi per risparmi) vengono indicate con numeri negativi e le entrate (ad esempio gli interessi attivi) con numeri positivi.


Funzione NPV

Restituisce un valore Double che specifica il valore attuale netto di un investimento sulla base di una serie di flussi di cassa periodici (entrate e uscite) e di un tasso di sconto.

Sintassi

NPV(rate, values())

La sintassi della funzione NPV è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
rate	Obbligatoria. Double che specifica il tasso di sconto del periodo, espresso come numero decimale.
values()	Obbligatoria. Matrice di Double che specifica i valori di flusso di cassa. Deve contenere almeno un valore negativo (uscita) e un valore positivo (entrata).
Osservazioni

Il valore attuale netto di un investimento è il valore corrente di una serie futura di entrate e uscite.

La funzione NPV utilizza l'ordine di valori della matrice per interpretare l'ordine delle entrate e delle uscite. I valori delle entrate e delle uscite dovranno quindi essere immessi nella sequenza corretta.

L'investimento NPV inizia un periodo prima della data del primo valore di flusso di cassa e termina con l'ultimo valore di flusso di cassa della matrice.

Il calcolo del valore attuale netto si basa sui flussi di cassa futuri. Se il primo flusso di cassa si verifica all'inizio del primo periodo, il primo valore deve essere aggiunto al valore restituito da NPV e non deve essere incluso tra i valori di flusso di cassa della matrice values( ).

La funzione NPV è simile alla funzione PV (valore attuale). Per la funzione PV sono tuttavia ammessi flussi di cassa che iniziano alla fine o all'inizio di un periodo. Per la funzione NPV i valori di flusso di cassa possono essere variabili, mentre per la funzione PV devono rimanere costanti per l'intera durata dell'investimento.


Funzione Pmt

Restituisce un valore Double che specifica il pagamento di una rendita annua sulla base di pagamenti periodici costanti e di un tasso di interesse costante.

Sintassi

Pmt(rate, nper, pv[, fv[, type]])

La sintassi della funzione Pmt è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
rate	Obbligatoria. Double che specifica il tasso di interesse per periodo. Nel caso di un prestito con tasso di interesse annuo del 10% da restituire con rate mensili, il tasso per periodo sarà 0,1/12 ovvero 0,0083.
nper	Obbligatoria. Integer che specifica il numero totale di periodi di pagamento. Nel caso di un prestito di durata complessiva di 4 anni da restituire con rate mensili, il numero totale dei periodi di pagamento sarà 4 * 12 = 48.
pv	Obbligatoria. Double che specifica il valore attuale di una serie di pagamenti da effettuare in futuro. L'importo di un prestito corrisponde al valore attuale delle rate mensili che verranno pagate.
fv	Facoltativa. Variant che specifica il valore o saldo di cassa previsto dopo aver effettuato l'ultimo pagamento. Nel caso di un prestito, il valore futuro sarà 0, a indicare che tutti i pagamenti sono stati effettuati. Nel caso di un programma di risparmio, il valore futuro corrisponderà all'importo che si è deciso di accantonare per il periodo specificato. Se viene omesso, verrà utilizzato il valore 0.
type	Facoltativa. Variant che indica la scadenza delle rate. Utilizzare 0 se le rate sono in scadenza al termine del periodo, 1 se le rate sono in scadenza all'inizio del periodo. Se l'argomento viene omesso, verrà utilizzato il valore 0.
Osservazioni

Una rendita annua è una serie di pagamenti costanti eseguiti entro un determinato periodo di tempo. Può trattarsi di un prestito, ad esempio un mutuo fondiario, oppure di un investimento, ad esempio un programma di risparmio mensile.

Gli argomenti rate e nper devono essere calcolati utilizzando periodi di pagamenti espressi con le stesse unità di tempo. Se, ad esempio, rate viene calcolato su base mensile, anche nper dovrà essere espresso in mesi.

Per tutti gli argomenti, le uscite (ad esempio i depositi per risparmi) vengono indicate con numeri negativi e le entrate (ad esempio gli interessi attivi) con numeri positivi.


Funzione PPmt

Restituisce un valore Double che specifica il valore del capitale per un periodo specifico di una rendita annua in base a pagamenti periodici costanti e a un tasso di interesse fisso.

Sintassi

PPmt(rate, per, nper, pv[, fv[, type]])

La sintassi della funzione PPmt è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
rate	Obbligatoria. Double che specifica il tasso di interesse per periodo. Nel caso di un prestito con tasso di interesse annuo del 10% da restituire con rate mensili, il tasso per periodo sarà 0,1/12 ovvero 0,0083.
per	Obbligatoria. Integer che specifica il periodo di pagamento compreso nell'intervallo da 1 a nper.
nper	Obbligatoria. Integer che specifica il numero totale di periodi di pagamento. Nel caso di un prestito di durata complessiva di 4 anni da restituire con rate mensili, il numero totale dei periodi di pagamento sarà 4 * 12 = 48.
pv	Obbligatoria. Double che specifica il valore attuale di una serie di entrate e uscite future. L'importo di un prestito corrisponde al valore attuale delle rate mensili che verranno pagate.
fv	Facoltativa. Variant che specifica il valore o saldo di cassa previsto dopo aver effettuato l'ultimo pagamento. Nel caso di un prestito, il valore futuro sarà 0, a indicare che tutti i pagamenti sono stati effettuati. Nel caso di un programma di risparmio, il valore futuro corrisponderà all'importo che si è deciso di accantonare per il periodo specificato. Se viene omesso, verrà utilizzato il valore 0.
type	Facoltativa. Variant che indica la scadenza delle rate. Utilizzare 0 se le rate sono in scadenza al termine del periodo, 1 se le rate sono in scadenza all'inizio del periodo. Se l'argomento viene omesso, verrà utilizzato il valore 0.
Osservazioni

Una rendita annua è una serie di pagamenti costanti eseguiti entro un determinato periodo di tempo. Può trattarsi di un prestito, ad esempio un mutuo fondiario, oppure di un investimento, ad esempio un programma di risparmio mensile.

Gli argomenti rate e nper devono essere calcolati utilizzando periodi di pagamenti espressi con le stesse unità di tempo. Se, ad esempio, rate viene calcolato su base mensile, anche nper dovrà essere espresso in mesi.

Per tutti gli argomenti, le uscite (ad esempio i depositi per risparmi) vengono indicate con numeri negativi e le entrate (ad esempio gli interessi attivi) con numeri positivi.


Funzione PV

Restituisce un valore Double che specifica il valore attuale di una rendita annua in base a pagamenti periodici e costanti da eseguire in futuro e a un tasso di interesse fisso.

Sintassi

PV(rate, nper, pmt[, fv[, type]])

La sintassi della funzione PV è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
rate	Obbligatoria. Double che specifica il tasso di interesse per periodo. Nel caso di un prestito con tasso di interesse annuo del 10% da restituire con rate mensili, il tasso per periodo sarà 0,1/12 ovvero 0,0083
nper	Obbligatoria. Integer che specifica il numero totale di periodi di pagamento. Nel caso di un prestito di durata complessiva di 4 anni da restituire con rate mensili, il numero totale dei periodi di pagamento sarà 4 * 12 = 48.
pmt	Obbligatoria. Double che specifica la rata da pagare per ciascun periodo. Le rate sono in genere costituite da un capitale e da un interesse che rimangono invariati per la durata della rendita annuale.
fv	Facoltativa. Variant che specifica il valore o saldo di cassa previsto dopo aver effettuato l'ultimo pagamento. Nel caso di un prestito, il valore futuro sarà 0, a indicare che tutti i pagamenti sono stati effettuati. Nel caso di un programma di risparmio, il valore futuro corrisponderà all'importo che si è deciso di accantonare per il periodo specificato. Se viene omesso, verrà utilizzato il valore 0.
type	Facoltativa. Variant che indica la scadenza delle rate. Utilizzare 0 se le rate sono in scadenza al termine del periodo, 1 se le rate sono in scadenza all'inizio del periodo. Se l'argomento viene omesso, verrà utilizzato il valore 0.
Osservazioni

Una rendita annua è una serie di pagamenti costanti eseguiti entro un determinato periodo di tempo. Può trattarsi di un prestito, ad esempio un mutuo fondiario, oppure di un investimento, ad esempio un programma di risparmio mensile.

Gli argomenti rate e nper devono essere calcolati utilizzando periodi di pagamenti espressi con le stesse unità di tempo. Se, ad esempio, rate viene calcolato su base mensile, anche nper dovrà essere espresso in mesi.

Per tutti gli argomenti, le uscite (ad esempio i depositi per risparmi) vengono indicate con numeri negativi e le entrate (ad esempio gli interessi attivi) con numeri positivi.


Funzione Rate

Restituisce un valore Double che specifica il tasso di interesse per periodo di una rendita annua.

Sintassi

Rate(nper, pmt, pv[, fv[, type[, guess]]])

La sintassi della funzione Rate è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
nper	Obbligatoria. Double che specifica il numero totale di periodi di pagamento. Nel caso di un prestito di durata complessiva di 4 anni da restituire con rate mensili, il numero totale dei periodi di pagamento sarà 4 * 12 = 48.
pmt	Obbligatoria. Double che specifica la rata da pagare per ciascun periodo. Le rate sono in genere costituite da un capitale e da un interesse che rimangono invariati per la durata della rendita annuale.
pv	Obbligatoria. Double che specifica il valore attuale di una serie di entrate o uscite future. L'importo di un prestito corrisponde al valore attuale delle rate mensili che verranno pagate.
fv	Facoltativa. Variant che specifica il valore o saldo di cassa previsto dopo aver effettuato l'ultimo pagamento. Nel caso di un prestito, il valore futuro sarà 0, a indicare che tutti i pagamenti sono stati effettuati. Nel caso di un programma di risparmio, il valore futuro corrisponderà all'importo che si è deciso di accantonare per il periodo specificato. Se viene omesso, verrà utilizzato il valore 0.
type	Facoltativa. Variant che indica la scadenza delle rate. Utilizzare 0 se le rate sono in scadenza al termine del periodo, 1 se le rate sono in scadenza all'inizio del periodo. Se l'argomento viene omesso, verrà utilizzato il valore 0.
guess	Facoltativa. Variant che specifica il valore previsto come risultato di Rate. Se viene omesso, guess verrà impostato su 0,1, ovvero il 10%.
Osservazioni

Una rendita annua è una serie di pagamenti costanti eseguiti entro un determinato periodo di tempo. Può trattarsi di un prestito, ad esempio un mutuo fondiario, oppure di un investimento, ad esempio un programma di risparmio mensile.

Per tutti gli argomenti, le uscite (ad esempio i depositi per risparmi) vengono indicate con numeri negativi e le entrate (ad esempio gli interessi attivi) con numeri positivi.

Rate viene calcolata per iterazione. A partire dal valore di guess, Rate esegue un ciclo di calcolo fino a ottenere un risultato con approssimazione pari allo 0,00001%. Se dopo 20 tentativi non si ottiene alcun risultato, la funzione Rate avrà esito negativo. Se la stima corrisponde al 10% e Rate ha esito negativo, fare un nuovo tentativo assegnando un diverso valore a guess.


Funzione SLN

Restituisce un valore Double che specifica l'ammortamento a quote costanti di un bene per un singolo periodo.

Sintassi

SLN(cost, salvage, life)

La sintassi della funzione SLN è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
cost	Obbligatoria. Double che specifica il costo iniziale del bene.
salvage	Obbligatoria. Double che specifica il valore del bene al termine della vita utile.
life	Obbligatoria. Double che specifica la durata della vita utile del bene.
Osservazioni

Il periodo per il quale viene restituito l'ammortamento e l'argomento life devono essere espressi nella stessa unità di tempo. Tutti gli argomenti devono essere numeri positivi.


Funzione SYD

Restituisce un valore Double che specifica l'ammortamento a somma degli anni di un bene per un periodo specificato.

Sintassi

SYD(cost, salvage, life, period)

La sintassi della funzione SYD è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
cost	Obbligatoria. Double che specifica il costo iniziale del bene.
salvage	Obbligatoria. Double che specifica il valore del bene al termine della vita utile.
life	Obbligatoria. Double che specifica la durata della vita utile del bene.
period	Obbligatoria. Double che specifica il periodo di calcolo dell'ammortamento del bene.
Osservazioni

Gli argomenti life e period devono essere espressi utilizzando la stessa unità di tempo. Se, ad esempio, life è espresso in mesi, anche period dovrà essere espresso in mesi. Tutti gli argomenti devono essere numeri positivi.


Esempio di funzione IsArray

In questo esempio la funzione IsArray viene utilizzata per verificare se una variabile è una matrice.

Dim MyArray(1 To 5) As Integer, YourArray, MyCheck	' Dichiara la variabile matrice.

YourArray = Array(1, 2, 3)	' Utilizza la funzione Array.

MyCheck = IsArray(MyArray)	' Restituisce Vero.

MyCheck = IsArray(YourArray)	' Restituisce Vero.


Esempio di funzione IsDate

In questo esempio la funzione IsDate viene utilizzata per determinare se un'espressione può essere convertita in data.

Dim MyDate, YourDate, NoDate, MyCheck

MyDate = "12 febbraio 1969": YourDate = #2/12/69#: NoDate = "Salve"

MyCheck = IsDate(MyDate)	' Restituisce Vero.

MyCheck = IsDate(YourDate)	' Restituisce Vero.

MyCheck = IsDate(NoDate)	' Restituisce Falso.


Esempio di funzione IsEmpty

In questo esempio la funzione IsEmpty viene utilizzata per determinare se una variabile è stata inizializzata.

Dim MyVar, MyCheck

MyCheck = IsEmpty(MyVar)	' Restituisce Vero.

MyVar = Null	' Assegna Null.

MyCheck = IsEmpty(MyVar)	' Restituisce Falso.

MyVar = Empty	' Assegna Empty.

MyCheck = IsEmpty(MyVar)	' Restituisce Vero.


Esempio di funzione IsError

In questo esempio la funzione IsError viene utilizzata per verificare se un'espressione numerica corrisponde ad un valore di errore. La funzione CVErr viene utilizzata per ottenere un risultato di tipo Error Variant da una funzione definita dall'utente. Si presuppone che UserFunction sia una routine funzione definita dall'utente che restituisce un valore di errore, ad esempio il valore restituito dall'istruzione UserFunction = CVErr(32767), dove 32767 è un numero definito dall'utente.

Dim ReturnVal, MyCheck

ReturnVal = UserFunction()

MyCheck = IsError(ReturnVal)	' Restituisce Vero.


Esempio di funzione IsMissing

In questo esempio la funzione IsMissing viene utilizzata per verificare se un argomento facoltativo è stato passato ad una routine definita dall'utente. Si noti che per gli argomenti Optional è ora possibile impostare valori predefiniti e tipi diversi da Variant.

Dim ReturnValue

' Le istruzioni seguenti chiamano la routine funzione definita dall'utente.

ReturnValue = ReturnTwice()	' Restituisce Nullo.

ReturnValue = ReturnTwice(2)	' Restituisce 4.

' Definizione della routine funzione.

Function ReturnTwice(Optional A)

If IsMissing(A) Then

' Se l'argomento manca, restituisce Null.

ReturnTwice = Nullo

Else

' Se l'argomento è presente, restituisce il valore due volte.

ReturnTwice = A * 2

End If

End Function


Esempio di funzione IsNull

In questo esempio la funzione IsNull viene utilizzata per determinare se una variabile contiene Null.

Dim MyVar, MyCheck

MyCheck = IsNull(MyVar)	' Restituisce Falso.

MyVar = ""

MyCheck = IsNull(MyVar)	' Restituisce Falso.

MyVar = Null

MyCheck = IsNull(MyVar)	' Restituisce Vero.


Esempio di funzione IsNumeric

In questo esempio la funzione IsNumeric viene utilizzata per determinare se una variabile può essere valutata come numero.

Dim MyVar, MyCheck

MyVar = "53"	' Assegna il valore.

MyCheck = IsNumeric(MyVar)	' Restituisce Vero.

MyVar = "459.95"	' Assegna il valore.

MyCheck = IsNumeric(MyVar)	' Restituisce Vero.

MyVar = "45 Help"	' Assegna il valore.

MyCheck = IsNumeric(MyVar)	' Restituisce Falso.


Esempio di funzione IsObject

In questo esempio la funzione IsObject viene utilizzata per determinare se un identificatore rappresenta una variabile oggetto. MyObject e YourObject sono variabili oggetto dello stesso tipo. Si tratta di nomi generici utilizzati a titolo esemplificativo.

Dim MyInt As Integer, YourObject, MyCheck	' Dichiara la variabile.

Dim MyObject As Object

Set YourObject = MyObject	' Assegna un riferimento di oggetto.

MyCheck = IsObject(YourObject)	' Restituisce Vero.

MyCheck = IsObject(MyInt)	' Restituisce Falso.


Esempio di funzione TypeName

In questo esempio la funzione TypeName viene utilizzata per restituire informazioni relative ad una variabile.

' Dichiarazione delle variabili.

Dim NullVar, MyType, StrVar As String, IntVar As Integer, CurVar As Currency

Dim ArrayVar (1 To 5) As Integer

NullVar = Null	' Assegna il valore Null.

MyType = TypeName(StrVar)	' Restituisce "String".

MyType = TypeName(IntVar)	' Restituisce "Integer".

MyType = TypeName(CurVar)	' Restituisce "Currency".

MyType = TypeName(NullVar)	' Restituisce "Null".

MyType = TypeName(ArrayVar)	' Restituisce "Integer()".


Esempio di funzione VarType

In questo esempio la funzione VarType viene utilizzata per determinare il sottotipo di una variabile.

Dim IntVar, StrVar, DateVar, MyCheck

' Inizializza le variabili.

IntVar = 459: StrVar = "Salve": DateVar = #2/12/69#

MyCheck = VarType(IntVar)	' Restituisce 2.

MyCheck = VarType(DateVar)	' Restituisce 7.

MyCheck = VarType(StrVar)	' Restituisce 8.


Funzione IsArray

Restituisce un valore Boolean che indica se una variabile è una matrice.

Sintassi

IsArray(nomevar)

L'argomento obbligatorio nomevar è un identificatore che specifica una variabile.

Osservazioni

Se la variabile è una matrice, IsArray restituisce True. In caso contrario restituisce False. La funzione IsArray risulta particolarmente utile con espressioni Variant che includono matrici.


Funzione IsDate

Restituisce un valore Boolean che indica se è possibile o meno convertire un'espressione in data.

Sintassi

IsDate(espressione)

L'argomento obbligatorio espressione è un valore di tipo Variant che contiene un'espressione data o un'espressione stringa riconoscibile come data o ora.

Osservazioni

IsDate restituisce True se l'espressione è una data oppure se viene riconosciuta come data valida, altrimenti restituisce False. In Microsoft Windows l'intervallo di date valide va dall'1 gennaio 100 d.C. al 31 dicembre 9999 d.C. Gli intervalli possono variare a seconda dei sistemi operativi.


Funzione IsEmpty

Restituisce un valore Boolean che indica se una variabile è stata inizializzata.

Sintassi

IsEmpty(espressione)

L'argomento obbligatorio espressione è un valore di tipo Variant contenente un'espressione numerica o un'espressione stringa. L'argomento espressione, tuttavia, sarà spesso rappresentato da un solo nome di variabile, in quanto la funzione IsEmpty viene utilizzata per determinare se le singole variabili sono inizializzate o meno.

Osservazioni

La funzione IsEmpty restituisce True se la variabile non è inizializzata oppure se è impostata in modo esplicito su Empty; altrimenti restituisce False. Quando l'argomento espressione contiene più variabili, il risultato è sempre False. La funzione IsEmpty restituisce dati significativi solo per le espressioni Variant.


Funzione IsError

Restituisce un valore Boolean che indica se un'espressione corrisponde a un valore di errore.

Sintassi

IsError(espressione)

L'argomento obbligatorio espressione può essere qualsiasi espressione valida.

Osservazioni

I valori di errore vengono creati convertendo numeri reali in valori di errore con la funzione CVErr. La funzione IsError viene utilizzata per determinare se un'espressione numerica rappresenta un errore. La funzione IsError restituisce True se l'argomento espressione indica un errore, in caso contrario restituisce False.


Funzione IsMissing

Restituisce un valore Boolean che indica se un argomento Variant facoltativo è stato passato a una routine.

Sintassi

IsMissing(nomearg)

L'argomento obbligatorio nomearg contiene il nome di un argomento Variant facoltativo di una routine.

Osservazioni

La funzione IsMissing viene utilizzata per determinare se un argomento Variant facoltativo è stato specificato nella chiamata di una routine. IsMissing restituisce True se nessun valore è stato passato per l'argomento specificato, in caso contrario restituisce False. Se la funzione IsMissing restituisce True per un argomento, l'utilizzo dell'argomento mancante in altre parti del codice può generare un errore definito dall'utente. Se la funzione IsMissing viene utilizzata per un argomento ParamArray, restituisce sempre False. Per individuare un ParamArray vuoto, controllare se il limite superiore della matrice è minore del limite inferiore.

Nota   La funzione IsMissing non può essere utilizzata per tipi di dati semplici quali Integer o Double poiché, a differenza dei tipi di dati Variant, per tali tipi di dati non è disponibile un bit per il flag "mancante". Nella sintassi degli argomenti facoltativi è pertanto possibile specificare un valore predefinito. Se l'argomento viene omesso quando si richiama la routine, verrà quindi impostato tale valore predefinito, come è illustrato nell'esempio seguente:

Sub MySub(Optional MyVar As String = "specialvalue")

    If MyVar = "specialvalue" Then

    ' MyVar è stato omesso.

    Else

    ...

End Sub

In molti casi è possibile non utilizzare la prova If MyVar impostando come valore predefinito il valore che si desidera venga attribuito a MyVar se l'utente lo omette dalla chiamata di funzione. In questo modo è possibile aumentare il livello di efficienza del codice.


Funzione IsNull

Restituisce un valore Boolean che indica se un'espressione non contiene dati validi (Null).

Sintassi

IsNull(espressione)

L'argomento obbligatorio espressione è un valore di tipo Variant che contiene un'espressione numerica o un'espressione stringa.

Osservazioni

IsNull restituisce True se espressione è Null; in caso contrario, IsNull restituisce False. Se espressione contiene più variabili, la presenza di Null in qualsiasi variabile determinerà la restituzione di True per l'intera espressione.

Il valore Null indica che una variabile Variant non contiene dati validi, a differenza del valore Empty, che indica che una variabile non è stata ancora inizializzata. Non ha inoltre lo stesso significato di una stringa di lunghezza zero (""), a volte definita stringa nulla.

Importante   L'utilizzo della funzione IsNull è l'unico metodo per determinare se un'espressione contiene o meno un valore Null. Le espressioni che si presume restituiscano True in determinate circostanze, quali If Var = Null e If Var <> Null, restituiscono sempre False. Ciò si verifica perché qualsiasi espressione contenente un valore Null è essa stessa Null e restituisce quindi False.


Funzione IsNumeric

Restituisce un valore Boolean che indica se un'espressione può essere valutata come numero.

Sintassi

IsNumeric(espressione)

L'argomento obbligatorio espressione è un valore di tipo Variant contenente un'espressione numerica o un'espressione stringa.

Osservazioni

IsNumeric restituisce True se espressione viene riconosciuta per intero come dato numerico, in caso contrario restituisce False.

IsNumeric restituisce False se espressione è un'espressione data.


Funzione IsObject

Restituisce un valore Boolean che indica se un identificatore rappresenta una variabile oggetto.

Sintassi

IsObject(identificatore)

L'argomento obbligatorio identificatore è un nome di variabile.

Osservazioni

La funzione IsObject risulta utile unicamente per determinare se un valore Variant è di tipo vbObject. Ciò si verifica se il valore Variant si riferisce o almeno una volta ha fatto riferimento a un oggetto, oppure se contiene Nothing.

IsObject restituisce True se identificatore è una variabile dichiarata come tipo Object, se è qualsiasi tipo di classe valido, se identificatore è un valore Variant di tipo vbObject oppure un oggetto definito dall'utente. In caso contrario la funzione restituisce False. IsObject restituisce True anche se la variabile è stata impostata su Nothing.

Utilizzare le funzioni di intercettazione degli errori per assicurarsi che un riferimento a un oggetto sia valido.


Funzione TypeName

Restituisce un valore String che fornisce informazioni relative a una variabile.

Sintassi

TypeName(nomevar)

L'argomento obbligatorio nomevar è un valore di tipo Variant che può contenere qualsiasi variabile a eccezione di variabili di tipo definito dall'utente.

Osservazioni

Nella tabella che segue vengono indicati i possibili valori della stringa restituita da TypeName:

Stringa restituita	Variabile
tipo di oggetto	Un oggetto il cui tipo corrisponde a tipooggetto
Byte	Valore byte
Integer	Intero
Long	Intero lungo
Single	Numero a virgola mobile a precisione singola
Double	Numero a virgola mobile a precisione doppia
Decimal	Valore decimale
Currency	Valore di valuta
Date	Valore di data
String	Stringa
Boolean	Valore booleano
Error	Valore di errore
Empty	Non inizializzata
Null	Nessun dato valido
Object	Oggetto
Sconosciuto	Oggetto di tipo sconosciuto
Nothing	Variabile oggetto che non si riferisce a un oggetto
Se nomevar è una matrice, la stringa restituita può essere una delle stringhe restituite valide (oppure Variant) seguite da parentesi vuote. Se, ad esempio, nomevar è una matrice di interi, la funzione TypeName restituirà "Integer()".


Funzione VarType

Restituisce un valore Integer che indica il sottotipo di una variabile.

Sintassi

VarType(nomevar)

L'argomento obbligatorio nomevar è un valore di tipo Variant che può contenere una qualsiasi variabile a eccezione di variabili di tipo definito dall'utente.

Valori restituiti

Costante	Valore	Descrizione
vbEmpty	0	Empty (non inizializzata)
vbNull	1	Null (dati non validi)
vbInteger	2	Intero
vbLong	3	Intero lungo
vbSingle	4	Numero a virgola mobile a precisione singola
vbDouble	5	Numero a virgola mobile a precisione doppia
vbCurrency	6	Valore di valuta
vbDate	7	Valore di data
vbString	8	Stringa
vbObject	9	Oggetto
vbError	10	Valore di errore
vbBoolean	11	Valore booleano
vbVariant	12	Variant (utilizzato solo con le matrici di variabili Variant)
vbDataObject	13	Oggetto di accesso ai dati
vbDecimal	14	Valore decimale
vbByte	17	Valore byte
vbUserDefinedType	36	Variabili Variant che includono tipi definiti dall'utente
vbArray	8192	Array
Nota   Queste costanti vengono specificate da Visual Basic, Applications Edition e possono essere utilizzate ovunque nel codice al posto dei valori effettivi.

Osservazioni

La funzione VarType non restituisce mai il valore di vbArray da solo. Tale valore, infatti, viene sempre aggiunto a un altro valore per indicare una matrice di tipo particolare. La costante vbVariant viene restituita solo insieme a vbArray per indicare che l'argomento della funzione VarType è una matrice di tipo Variant. Il valore restituito per una matrice di interi, ad esempio, viene calcolato come vbInteger + vbArray e sarà quindi uguale a 8194. Se per un oggetto è disponibile una proprietà predefinita, VarType (oggetto) restituisce il tipo della proprietà predefinita dell'oggetto.


Empty

La parola chiave Empty viene utilizzata come un sottotipo di Variant che indica un valore di variabile non inizializzato.


False

La parola chiave False ha valore 0.


Me

La parola chiave Me ha un funzionamento analogo a quello di una variabile dichiarata in modo implicito. La parola chiave è automaticamente disponibile per tutte le routine in un modulo di classe. Quando una classe può avere più istanze, Me consente di far riferimento all'istanza specifica che è in esecuzione. L'utilizzo della parola chiave Me risulta particolarmente utile quando si desidera passare informazioni sull'istanza di una classe attualmente in esecuzione a una routine in un altro modulo. Si supponga ad esempio di avere in un modulo la seguente routine:

Sub ChangeFormColor(FormName As Form)

FormName.BackColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)

End Sub

È possibile chiamare tale routine e passare l'istanza corrente della classe Form come argomento, utilizzando l'istruzione che segue:

ChangeFormColor Me


Nothing

La parola chiave Nothing è utilizzata per annullare l'associazione tra una variabile oggetto e qualsiasi oggetto. Per assegnare Nothing a una variabile oggetto, utilizzare l'istruzione Set. Ad esempio:

Set MyObject = Nothing

È possible che diverse variabili oggetto facciano riferimento allo stesso oggetto. Quando si assegna la parola chiave Nothing a una variabile oggetto, tale variabile non si riferirà più ad alcun oggetto. Quando più variabili oggetto si riferiscono a uno stesso oggetto, la memoria e le risorse di sistema associate all'oggetto al quale si riferiscono le variabili saranno rilasciate solo dopo che tutte le variabili oggetto saranno state impostate su Nothing, in modo esplicito utilizzando Set, oppure in modo implicito dopo che l'ultima variabile oggetto impostata su Nothing non rientra più nell'area di validità.


Null

La parola chiave Null viene utilizzata come un sottotipo di Variant che indica che una variabile non contiene dati validi.


True

La parola chiave True ha valore -1.


Esempio di funzione MacScript

In questo esempio la funzione MacScript viene utilizzata per aprire la finestra di dialogo Scegli file, ovvero la finestra di dialogo standard Macintosh per i file. Viene restituito il percorso completo del file selezionato dall'utente. Se appropriato, la specifica del percorso viene preceduta dal tipo del file.

ThePath$ = Macscript("ChooseFile")


Funzione MacID

Utilizzata in ambiente Macintosh per convertire una costante composta da 4 caratteri in un valore che può essere utilizzato da Dir, Kill, Shell e AppActivate.

Sintassi

MacID(costante)

L'argomento obbligatorio costante è composto da 4 caratteri utilizzati per specificare un tipo di risorsa, un tipo di file, una signature di applicazione o evento Apple, ad esempio TEXT, OBIN, "XLS5" per file Excel ("XLS8" per Excel 97), "W6BN" per Microsoft Word ("W8BN" per Word 97) e così via.

Osservazioni

La funzione MacID viene utilizzata insieme a Dir e Kill per specificare un tipo di file Macintosh. Poiché nell'ambiente Macintosh non sono supportati i caratteri jolly * e ?, per identificare gruppi di file è possibile utilizzare una costante di quattro caratteri. L'istruzione seguente restituisce, ad esempio, i file di tipo TEXT esistenti nella cartella corrente:

Dir("SomePath", MacID("TEXT"))

La funzione MacID viene utilizzata insieme a Shell e AppActivate per specificare un'applicazione mediante la signature univoca dell'applicazione.


Funzione MacScript

Esegue uno script AppleScript e restituisce l'eventuale valore restituito dallo script.

Sintassi

MacScript script

L'argomento script è un'espressione di tipo String, che può essere rappresentata da una serie di comandi AppleScript oppure può specificare il nome di uno script AppleScript o di un file script.

Osservazioni

È possibile creare script che includono più righe mediante l'inserimento di caratteri di ritorno a capo (Chr(13)).


Esempio di funzione Abs

In questo esempio la funzione Abs viene utilizzata per calcolare il valore assoluto di un numero.

Dim MyNumber

MyNumber = Abs(50.3)	' Restituisce 50,3.

MyNumber = Abs(-50.3)	' Restituisce 50,3.


Esempio di funzione Atn

In questo esempio la funzione Atn viene utilizzata per restituire l'arcotangente di PiGreco.

Dim pi

pi = 4 * Atn(1)	' Calcola il valore di PiGreco.


Esempio di funzione Cos

In questo esempio la funzione Cos viene utilizzata per restituire il coseno di un angolo.

Dim MyAngle, MySecant

MyAngle = 1.3	' Definisce l'angolo in radianti.

MySecant = 1 / Cos(MyAngle)	' Calcola la secante.


Esempio di funzione Exp

In questo esempio la funzione Exp viene utilizzata per restituire e elevato alla potenza.

Dim MyAngle, MyHSin

' Definisce l'angolo in radianti.

MyAngle = 1.3

' Calcola il seno iperbolico.

MyHSin = (Exp(MyAngle) - Exp(-1 * MyAngle)) / 2


Esempio di funzioni Int e Fix

In questo esempio le funzioni Int e Fix vengono utilizzate per restituire parti intere di numeri. In presenza di un numero negativo, la funzione Int restituisce il primo intero negativo minore o uguale al numero, mentre la funzione Fix restituisce il primo intero negativo maggiore o uguale al numero.

Dim MyNumber

MyNumber = Int(99.8)	' Restituisce 99.

MyNumber = Fix(99.2)	' Restituisce 99.

MyNumber = Int(-99.8)	' Restituisce -100.

MyNumber = Fix(-99.8)	' Restituisce -99.

MyNumber = Int(-99.2)	' Restituisce -100.

MyNumber = Fix(-99.2)	' Restituisce -99.


Esempio di funzione Log

In questo esempio la funzione Log viene utilizzata per restituire il logaritmo naturale di un numero.

Dim MyAngle, MyLog

' Definisce l'angolo in radianti.

MyAngle = 1.3

' Calcola il seno iperbolico inverso.

MyLog = Log(MyAngle + Sqr(MyAngle * MyAngle + 1))


Esempio di istruzione Randomize

In questo esempio l'istruzione Randomize viene utilizzata per inizializzare il generatore di numeri casuali. Dato che l'argomento numero viene omesso, l'istruzione Randomize utilizza il valore restituito dalla funzione Timer come nuovo valore di base.

Dim MyValue

Randomize	' Inizializza il generatore di numeri casuali.

MyValue = Int((6 * Rnd) + 1)	' Genera un valore casuale compreso tra 1 e 6.


Esempio di funzione Rnd

In questo esempio la funzione Rnd viene utilizzata per generare un numero intero casuale compreso tra 1 e 6.

Dim MyValue

MyValue = Int((6 * Rnd) + 1)	' Genera un valore casuale compreso tra 1 e 6.


Esempio di funzione Sgn

In questo esempio la funzione Sgn viene utilizzata per determinare il segno di un numero.

Dim MyVar1, MyVar2, MyVar3, MySign

MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0

MySign = Sgn(MyVar1)	' Restituisce 1.

MySign = Sgn(MyVar2)	' Restituisce -1.

MySign = Sgn(MyVar3)	' Restituisce 0.


Esempio di funzione Sin

In questo esempio la funzione Sin viene utilizzata per restituire il seno di un angolo.

Dim MyAngle, MyCosecant

MyAngle = 1.3	' Definisce l'angolo in radianti.

MyCosecant = 1 / Sin(MyAngle)	' Calcola la cosecante.


Esempio di funzione Sqr

In questo esempio la funzione Sqr viene utilizzata per calcolare la radice quadrata di un numero.

Dim MySqr

MySqr = Sqr(4)	' Restituisce 2.

MySqr = Sqr(23)	' Restituisce 4,79583152331272.

MySqr = Sqr(0)	' Restituisce 0.

MySqr = Sqr(-4)	' Genera un errore di run-time.


Esempio di funzione Tan

In questo esempio la funzione Tan viene utilizzata per restituire la tangente di un angolo.

Dim MyAngle, MyCotangent

MyAngle = 1.3	' Definisce l'angolo in radianti.

MyCotangent = 1 / Tan(MyAngle)	' Calcola la cotangente.


Funzioni matematiche

Funzione Abs

Funzione Atn

Funzione Cos

Funzione Exp

Funzione Fix

Funzione Int

Funzione Log

Funzione Rnd

Funzione Sgn

Funzione Sin

Funzione Sqr

Funzione Tan

Funzioni matematiche derivate


Funzione Abs

Restituisce un valore che specifica il valore assoluto di un numero. Il valore restituito sarà dello stesso tipo di quello passato alla funzione.

Sintassi

Abs(numero)

L'argomento obbligatorio numero può essere qualsiasi espressione numerica valida. Se numero contiene Null, viene restituito Null, mentre se si tratta di una variabile non inizializzata, il risultato sarà zero.

Osservazioni

Il valore assoluto di un numero è la sua grandezza senza segno. Ad esempio, ABS(-1) e ABS(1) restituiscono entrambe 1.


Funzione Atn

Restitusce un valore di tipo Double che specifica l'arcotangente di un numero.

Sintassi

Atn(numero)

L'argomento obbligatorio numero può essere un valore Double o una qualsiasi espressione numerica valida.

Osservazioni

La funzione Atn utilizza come argomento numero il rapporto tra due lati di un triangolo rettangolo e restituisce l'angolo corrispondente espresso in radianti. Il rapporto è dato dalla lunghezza del lato opposto all'angolo divisa per la lunghezza del lato adiacente all'angolo.

Il risultato viene espresso in radianti nell'intervallo da -PiGreco/2 a PiGreco/2.

Per convertire i gradi in radianti, moltiplicarli per PiGreco/180. Per convertire i radianti in gradi moltiplicarli per 180/PiGreco.

Nota   Atn è la funzione trigonometrica inversa di Tan, che utilizza l'angolo come argomento e restituisce il rapporto tra due lati di un triangolo rettangolo. Atn non deve essere confusa con la cotangente, che è semplicemente l'inverso di una tangente (1/tangente).


Funzione Cos

Restituisce un valore Double che specifica il coseno di un angolo.

Sintassi

Cos(numero)

L'argomento obbligatorio numero può essere un valore Double o una qualsiasi espressione numerica valida che esprime un angolo in radianti.

Osservazioni

La funzione Cos accetta un angolo e restituisce il rapporto tra due lati di un triangolo rettangolo. Il rapporto è dato dalla lunghezza del lato adiacente all'angolo divisa per la lunghezza dell'ipotenusa.

Il risultato sarà compreso nell'intervallo tra -1 e 1.

Per convertire i gradi in radianti, moltiplicarli per PiGreco/180. Per convertire i radianti in gradi, moltiplicarli per 180/PiGreco.


Funzione Exp

Restituisce un valore Double che specifica e (base dei logaritmi naturali) elevato a una potenza.

Sintassi

Exp(numero)

L'argomento obbligatorio numero può essere un valore Double o una qualsiasi espressione numerica valida.

Osservazioni

Se il valore di numero è maggiore di 709,782712893, verrà generato un errore. La costante e corrisponde a circa 2,718282.

Nota   La funzione Exp è complementare alla funzione Log ed è talvolta definita antilogaritmo.


Funzioni Int e Fix

Restituisce la parte intera di un numero.

Sintassi

Int(numero)

Fix(numero)

L'argomento obbligatorio numero può essere un valore Double o una qualsiasi espressione numerica valida. Se numero contiene Null, il risultato sarà Null.

Osservazioni

Le funzioni Int e Fix eliminano la parte frazionaria di numero e ne restituiscono il valore intero.

La differenza tra le funzioni Int e Fix risiede nel fatto che se numero è negativo, Int restituisce il primo intero negativo minore o uguale a numero, mentre Fix restituisce il primo intero negativo maggiore o uguale a numero. Int ad esempio, converte -8,4 in -9, mentre Fix converte -8,4 in -8.

Fix(numero) equivale a:

Sgn(numero) * Int(Abs(numero))


Funzione Log

Restituisce un valore Double che specifica il logaritmo naturale di un numero.

Sintassi

Log(numero)

L'argomento obbligatorio numero può essere un valore Double o una qualsiasi espressione numerica maggiore di zero.

Osservazioni

Il logaritmo naturale è il logaritmo in base e. La costante e corrisponde a circa 2,718282.

È possibile calcolare i logaritmi in base n per qualsiasi numero x dividendo il logaritmo naturale di x per il logaritmo naturale di n nel modo seguente:

Logn(x) = Log(x) / Log(n)

In questo esempio viene illustrata una routine Function che calcola i logaritmi in base 10:

Static Function Log10(X)

Log10 = Log(X) / Log(10#)

End Function


Istruzione Randomize

Inizializza il generatore di numeri casuali.

Sintassi

Randomize [numero]

L'argomento facoltativo numero può essere un valore Variant o una qualsiasi espressione numerica valida.

Osservazioni

Randomize utilizza numero per inizializzare il generatore di numeri casuali della funzione Rnd assegnandogli un nuovo valore base. Se numero viene omesso, il valore restituito dal timer di sistema verrà utilizzato come nuova base.

Se Randomize non viene utilizzata, quando la funzione Rnd (senza argomenti) viene chiamata per la prima volta, utilizza come base lo stesso numero. Per le chiamate successive la funzione utilizzerà l'ultimo numero generato.

Nota   Per ripetere sequenze di numeri casuali, richiamare Rnd con un argomento negativo immediatamente prima di utilizzare Randomize con un argomento numerico. L'utilizzo di Randomize con lo stesso valore di numero non determinerà la ripetizione della sequenza precedente.


Funzione Rnd

Restituisce un valore Single che contiene un numero casuale.

Sintassi

Rnd[(numero)]

L'argomento facoltativo numero può essere un valore Single o una qualsiasi espressione numerica valida.

Valori restituiti

Se numero è	Rnd genera
Minore di zero	Sempre lo stesso numero, utilizzando numero come base.
Maggiore di zero	Il successivo numero casuale nella sequenza.
Uguale a zero	Il numero generato per ultimo.
Omesso	Il successivo numero casuale nella sequenza.
Osservazioni

La funzione Rnd restituisce un valore minore di 1 ma maggiore o uguale a zero.

Il valore di numero determina il modo in cui Rnd genera un numero casuale.

Per ogni base iniziale specificata, viene generata la stessa sequenza di numeri, in quanto ogni successiva chiamata alla funzione Rnd utilizza il numero casuale precedente come base per il numero successivo nella sequenza.

Prima di richiamare Rnd, utilizzare l'istruzione Randomize senza argomento per inizializzare il generatore di numeri casuali con una base connessa al timer del sistema.

Per generare interi casuali in un dato intervallo, utilizzare la seguente formula:

Int((limitesup - limiteinf + 1) * Rnd + limiteinf)

In questo contesto, limitesup indica il numero maggiore presente nell'intervallo, mentre limiteinf indica il numero minore.

Nota   Per ripetere sequenze di numeri casuali, richiamare Rnd con un argomento negativo immediatamente prima dell'utilizzo di Randomize con un argomento numerico. L'utilizzo di Randomize con lo stesso valore di numero non determinerà la ripetizione della sequenza precedente.


Funzione Sgn

Restituisce un valore Variant (Integer) che indica il segno di un numero.

Sintassi

Sgn(numero)

L'argomento obbligatorio numero può essere qualsiasi espressione numerica valida.

Valori restituiti

Se numero è	Sgn restituisce
Maggiore di zero	1
Uguale a zero	0
Minore di zero	-1
Osservazioni

Il segno dell'argomento numero determina il valore che verrà restituito dalla funzione Sgn.


Funzione Sin

Restituisce un valore Double che specifica il seno di un angolo.

Sintassi

Sin(numero)

L'argomento obbligatorio numero può essere un valore Double o qualsiasi espressione numerica valida che esprime un angolo in radianti.

Osservazioni

La funzione Sin utilizza un angolo come argomento e restituisce il rapporto tra due lati di un triangolo rettangolo. Il rapporto è dato dalla lunghezza del lato opposto all'angolo divisa per la lunghezza dell'ipotenusa.

Il risultato sarà compreso nell'intervallo tra -1 e 1.

Per convertire i gradi in radianti, moltiplicarli per PiGreco/180. Per convertire i radianti in gradi, moltiplicarli per 180/PiGreco.


Funzione Sqr

Restituisce un valore Double che specifica la radice quadrata di un numero.

Sintassi

Sqr(numero)

L'argomento obbligatorio numero può essere un valore Double o qualsiasi espressione numerica valida maggiore o uguale a zero.


Funzione Tan

Restituisce un valore Double che specifica la tangente di un angolo.

Sintassi

Tan(numero)

L'argomento obbligatorio numero può essere un valore Double o qualsiasi espressione numerica valida che esprime un angolo in radianti.

Osservazioni

La funzione Tan utilizza un angolo come argomento e restituisce il rapporto tra due lati di un triangolo rettangolo. Il rapporto è dato dalla lunghezza del lato opposto a un angolo divisa per la lunghezza del lato adiacente all'angolo.

Per convertire i gradi in radianti, moltiplicarli per PiGreco/180. Per convertire i radianti in gradi moltiplicarli per 180/PiGreco.


Funzioni matematiche derivate

L'elenco che segue riporta funzioni matematiche non intrinseche che possono essere derivate da funzioni matematiche intrinseche:

Funzione	Funzioni equivalenti derivate
Secante	Sec(X) = 1 / Cos(X)
Cosecante	Cosec(X) = 1 / Sin(X)
Cotangente	Cotan(X) = 1 / Tan(X)
Seno inverso	Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Coseno inverso	Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Secante inversa	Arcsec(X) = Atn(X / Sqr(X * X – 1)) + Sgn((X) – 1) * (2 * Atn(1))
Cosecante inversa	Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) – 1) * (2 * Atn(1))
Cotangente inversa	Arccotan(X) = Atn(X) + 2 * Atn(1)
Seno iperbolico	HSin(X) = (Exp(X) – Exp(-X)) / 2
Coseno iperbolico	HCos(X) = (Exp(X) + Exp(-X)) / 2
Tangente iperbolica	HTan(X) = (Exp(X) – Exp(-X)) / (Exp(X) + Exp(-X))
Secante iperbolica	HSec(X) = 2 / (Exp(X) + Exp(-X))
Cosecante iperbolica	HCosec(X) = 2 / (Exp(X) – Exp(-X))
Cotangente iperbolica	HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) – Exp(-X))
Seno iperbolico inverso	HArcsin(X) = Log(X + Sqr(X * X + 1))
Coseno iperbolico inverso	HArccos(X) = Log(X + Sqr(X * X – 1))
Tangente iperbolica inversa	HArctan(X) = Log((1 + X) / (1 – X)) / 2
Secante iperbolica inversa	HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Cosecante iperbolica inversa	HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Cotangente iperbolica inversa	HArccotan(X) = Log((X + 1) / (X – 1)) / 2
Logaritmo in base N	LogN(X) = Log(X) / Log(N)


Esempio di metodo Add

In questo esempio, il metodo Add viene utilizzato per aggiungere oggetti Inst, ovvero istanze di una classe denominata Class1 e contenente la variabile Public InstanceName, ad un insieme denominato MyClasses. Per verificarne il funzionamento, inserire un modulo di classe e dichiarare una variabile Public denominata InstanceName a livello di modulo per Class1 (digitare Public InstanceName). Tale variabile conterrà i nomi di ciascuna istanza. Lasciare come nome predefinito Class1. Copiare ed incollare il codice che segue nella routine di eventi Form_Load di un form.

Dim MyClasses As New Collection	' Crea un oggetto Collection.

Dim Num As Integer	' Contatore per l'identificazione delle chiavi.

Dim Msg

Dim TheName	' Contenitore per i nomi digitati dall'utente.

Do

Dim Inst As New Class1	' Crea una nuova istanza di Class1.

Num = Num + 1	' Incrementa Num, quindi legge un nome.

Msg = "Digitare un nome per l'oggetto." & Chr(13) _

 & "Fare clic su Annulla per visualizzare i nomi nell'insieme."

TheName = InputBox(Msg, "Denominare gli elementi dell'insieme")

Inst.InstanceName = TheName	' Inserisce il nome nell'istanza dell'oggetto.

' Se l'utente ha immesso un nome, lo aggiunge all'insieme.

If Inst.InstanceName <> "" Then

' Aggiunge l'oggetto denominato all'insieme.

MyClasses.Add item := Inst, key := CStr(Num)

End If

' Cancella il riferimento corrente in preparazione al successivo.

Set Inst = Nothing

Loop Until TheName = ""

For Each x In MyClasses

MsgBox x.instancename, , "Nome istanza"

Next


Esempio di metodo Clear

In questo esempio il metodo Clear dell'oggetto Err viene utilizzato per reimpostare le proprietà numeriche dell'oggetto Err su zero e le proprietà di tipo stringa dell'oggetto su stringhe di lunghezza zero. Se Clear fosse omesso dal codice che segue, la finestra del messaggio di errore verrebbe visualizzata ad ogni ripetizione del ciclo, indipendentemente dalla generazione di errori nel calcolo. È possibile eseguire il codice un'istruzione alla volta per verificarne il funzionamento.

Dim Result(10) As Integer	' Dichiara una matrice per

' la quale è probabile che si verifichi un

' overflow.

Dim indx

On Error Resume Next	' Rimanda l'intercettazione dell'errore.

Do Until indx = 10

' Genera un errore occasionale o memorizza il

' risultato se non vi sono errori.

Result(indx) = Rnd * indx * 20000

If Err.Number <> 0 Then

MsgBox Err, , "Errore generato: ", Err.HelpFile, Err.HelpContext

Err.Clear	' Cancella le proprietà dell'oggetto Err.

End If

indx = indx + 1

Loop


Esempio di metodo Item

In questo esempio, il metodo Item viene utilizzato per recuperare un riferimento ad un oggetto in un insieme. Se Birthdays è un oggetto Collection il codice che segue recupera dall'insieme riferimenti agli oggetti che rappresentano i compleanni di Adam Smith e Bill Smith, utilizzando le chiavi "SmithAdam" e "SmithBill" come argomenti indice. Si noti che la prima chiamata specifica il metodo Item e la seconda non lo specifica. Entrambe le chiamate hanno comunque esito positivo in quanto Item è il metodo predefinito per l'oggetto Collection. I riferimenti, assegnati a SmithBillBD e SmithAdamBD tramite Set, possono essere utilizzati per avere accesso alle proprietà ed ai metodi degli oggetti specificati. Per eseguire questo codice, creare l'insieme e popolarlo inserendo almeno i due membri ai quali viene fatto riferimento.

Dim SmithBillBD As Object

Dim SmithAdamBD As Object

Dim Birthdays

Set SmithBillBD = Birthdays.Item("SmithBill")

Set SmithAdamBD = Birthdays("SmithAdam")


Esempio di metodo Print

In questo esempio, il metodo Print viene utilizzato per visualizzare il valore della variabile MyVar nella finestra Immediata. Si noti che il metodo Print può essere applicato soltanto a oggetti che visualizzano testo.

Dim MyVar

MyVar = "Visualizzazione nella finestra Immediata."

Debug.Print MyVar


Esempio di metodo Raise

In questo esempio il metodoRaise dell'oggetto Err viene utilizzato per generare un errore in un oggetto di automazione scritto in Visual Basic. L'ID programmatico dell'oggetto è MyProj.MyObject.  In Macintosh, il nome di unità predefinito è "HD" e le parti del percorso sono separate da due punti anziché dalla barra rovesciata.

Const MyContextID = 1010407	' Definisce una costante per l'ID del contesto.

Function TestName(CurrentName, NewName)

If Instr(NewName, "piero") Then	' Verifica la validità di NewName.

' Solleva l'eccezione.

Err.Raise vbObjectError + 513, "MyProj.MyObject", _

"Nome ""piero"" non consentito", "c:\MyProj\MyHelp.Hlp", _

MyContextID

End If

End Function


Esempio di metodo Remove

In questo esempio, il metodo Remove viene utilizzato per rimuovere oggetti da un oggetto Collection denominato MyClasses. Ad ogni ripetizione del ciclo, il codice rimuove l'oggetto con indice 1.

Dim Num, MyClasses

For Num = 1 To MyClasses.Count

MyClasses.Remove 1	' Rimuove il primo oggetto

' ad ogni ripetizione fino a che non rimane

' nessun oggetto nell'insieme.

Next Num


Metodo Add

Aggiunge un membro a un oggetto Collection.

Sintassi

oggetto.Add item, key, before, after

La sintassi del metodo Add è composta dal segnaposto oggetto e dai seguenti argomenti predefiniti:

Parte	Descrizione
oggetto	Obbligatoria. Espressione oggetto che definisce un oggetto dell'elenco "Si applica a".
item	Obbligatoria. Espressione di qualsiasi tipo che specifica il membro da aggiungere all'insieme.
key	Facoltativa. Espressione stringa univoca che specifica una stringa chiave, che può essere utilizzata al posto di un indice di posizione per accedere a un membro dell'insieme.
before	Facoltativa. Espressione che specifica la posizione relativa nell'insieme. Il membro da aggiungere viene posizionato nell'insieme prima del membro identificato dall'argomento before. Se è un'espressione numerica, before deve essere un numero compreso tra 1 e il valore della proprietà Count dell'insieme. Se è un'espressione stringa before deve corrispondere all'espressione key specificata quando il membro al quale si fa riferimento è stato aggiunto all'insieme. Non è possibile specificare contemporaneamente una posizione before e una posizione after.
after	Facoltativa. Espressione che specifica la posizione relativa nell'insieme. Il membro da aggiungere viene posizionato nell'insieme dopo il membro identificato dall'argomento after. Se è un'espressione numerica, after deve essere un valore compreso tra 1 e il valore della proprietà Count dell'insieme. Se è un'espressione stringa, after deve corrispondere all'espressione key specificata quando il membro al quale si fa riferimento è stato aggiunto all'insieme. Non è possibile specificare contemporaneamente una posizione before e una posizione after.
Osservazioni

Gli argomenti before o after devono comunque fare riferimento a un membro esistente dell'insieme sia che siano rappresentati da un'espressione stringa che da un'espressione numerica. In caso contrario, verrà generato un errore.

Un errore viene inoltre generato quando un argomento key specificato è identico all'argomento key di un membro esistente dell'insieme.


Metodo Clear

Cancella tutte le impostazioni delle proprietà per l'oggetto Err.

Sintassi

oggetto.Clear

L'oggetto è sempre Err.

Osservazioni

Utilizzare Clear per cancellare il contenuto dell'oggetto Err dopo la gestione di un errore. Questa operazione è necessaria, ad esempio, quando si utilizza la gestione posticipata degli errori con On Error Resume Next. Il metodo Clear viene richiamato automaticamente ogni volta che si esegue una delle seguenti istruzioni:

•	Qualsiasi tipo di istruzione Resume

•	Exit Sub, Exit Function o Exit Property

•	Qualsiasi istruzione On Error

Nota   Per la gestione degli errori generati durante l'accesso ad altri oggetti, è preferibile utilizzare la struttura On Error Resume Next anziché la struttura On Error GoTo. Il controllo di Err dopo ciascuna interazione con un oggetto consente di determinare con certezza a quale oggetto stava avendo accesso il codice al momento dell'errore. In tal modo è possibile individuare l'oggetto che ha inserito il codice di errore in Err.Number e quello che ha generato inizialmente l'errore (l'oggetto specificato in Err.Source).


Metodo Item

Restituisce un membro specifico di un oggetto Collection, in base alla posizione o alla chiave.

Sintassi

oggetto.Item(indice)

La sintassi del metodo Item è composta dalla seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. Espressione oggetto che definisce un oggetto dell'elenco "Si applica a".
indice	Obbligatoria. Espressione che specifica la posizione di un membro dell'insieme. Se è un'espressione numerica, indice deve essere un numero compreso tra 1 e il valore della proprietà Count dell'insieme. Se è un'espressione stringa, indice deve corrispondere all'argomento key specificato quando il membro al quale si fa riferimento è stato aggiunto all'insieme.
Osservazioni

Se il valore fornito come indice non corrisponde ad alcun membro esistente dell'insieme, verrà generato un errore.

Il metodo Item è il metodo predefinito per un insieme e pertanto le righe di codice che seguono sono equivalenti:

Print MyCollection(1)

Print MyCollection.Item(1)


Metodo Print

Scrive un testo nella finestra Immediata.

Sintassi

oggetto.Print [elencooutput]

La sintassi del metodo Print è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Facoltativa. Espressione oggetto che definisce un oggetto dell'elenco "Si applica a".
elencooutput	Facoltativa. Espressione o elenco di espressioni da scrivere. Se omesso, verrà scritta una riga vuota.
La sintassi dell'argomento elencooutput è la seguente:

{Spc(n) | Tab(n)} espressione poscarattere

Parte	Descrizione
Spc(n)	Facoltativa. Si utilizza per inserire caratteri spazio nell'output, dove n rappresenta il numero degli spazi da inserire.
Tab(n)	Facoltativa. Si utilizza per posizionare il punto di inserimento in corrispondenza di un numero di colonna assoluto, dove n rappresenta il numero di colonna. Se Tab viene utilizzato senza argomenti, il punto di inserimento verrà posizionato all'inizio dell'area di stampa successiva.
espressione	Facoltativa. Espressione numerica o espressione stringa da scrivere.
poscarattere	Facoltativa. Determina la posizione del punto di inserimento del carattere successivo. Il punto e virgola indica che il punto di inserimento verrà posizionato immediatamente dopo l'ultimo carattere visualizzato. Tab(n) consente di posizionare il punto di inserimento in corrispondenza di un numero di colonna assoluto. Se Tab viene utilizzato senza argomenti, il punto di inserimento verrà posizionato all'inizio dell'area di stampa successiva. Se poscarattere viene omesso, il carattere successivo verrà scritto nella riga successiva.
Osservazioni

È possibile separare più espressioni con uno spazio o un punto e virgola.

Per tutti i dati scritti nella finestra Immediata viene utilizzato il separatore decimale specificato nelle impostazioni internazionali del sistema. Le parole chiave verranno visualizzate nell'output nella lingua impostata per l'applicazione host.

Per i dati di tipo Boolean verranno scritti i risultati True o False. Le parole chiave True e False verranno tradotte in base alle impostazioni internazionali dell'applicazione host.

I dati di tipo Date verranno scritti utilizzando il formato standard di data breve riconosciuto dal sistema. Se uno dei componenti di data o ora manca o è uguale a zero, verrà scritta solo la parte specificata.

Se i dati inclusi in elencooutput sono di tipo Empty, non verrà scritto niente. Se tuttavia i dati inclusi in elencooutput sono di tipo Null, l'output sarà Null. La parola chiave Null verrà tradotta in modo appropriato nell'output.

Nell'output i dati relativi agli errori verranno espressi nella forma Error codiceerrore. La parola chiaveError verrà tradotta in modo appropriato nell'output.

L'argomento oggetto è obbligatorio se il metodo viene utilizzato all'esterno di un modulo per il quale è prevista un'area di visualizzazione predefinita. Se, ad esempio, il metodo viene richiamato in un modulo standard senza specificare l'argomento oggetto, verrà generato un errore. Se il metodo viene richiamato in un modulo di form, elencooutput verrà invece visualizzato correttamente nel form.

Nota   Poiché il metodo Print viene utilizzato in genere per la scrittura di caratteri a spaziatura proporzionale, è importante ricordare che non esiste alcuna relazione tra il numero di caratteri stampati e il numero delle colonne a larghezza fissa occupate da tali caratteri. Una lettera ampia, come la "M", ad esempio, occuperà più di una colonna a larghezza fissa, mentre una lettera più stretta, come la "i" occuperà una quantità di spazio minore. Quando si utilizzano caratteri di grandezza maggiore rispetto a quella media, è necessario che le colonne in formato tabellare siano molto distanti l'una dall'altra, oppure è possibile utilizzare per la stampa un carattere a passo fisso (quale il Courier) in modo che ciascun carattere occupi solo una colonna.


Metodo Raise

Genera un errore di run-time.

Sintassi

oggetto.Raise number, source, description, helpfile, helpcontext

La sintassi del metodo Raise è composta dal segnaposto oggetto e dai seguenti argomenti predefiniti:

Argomento	Descrizione
oggetto	Obbligatorio. È sempre l'oggetto Err.
number	Obbligatorio. Intero di tipo Long che identifica la natura dell'errore. Gli errori di Visual Basic (sia quelli predefiniti che quelli definiti dall'utente) sono compresi nell'intervallo tra 0 e 65535. L'intervallo tra 0 e 512 è riservato agli errori di sistema, mentre quello tra 513 e 65535 agli errori definiti dall'utente.Quando si imposta un codice di errore per la proprietà Number in un modulo di classe, il numero del codice di errore viene aggiunto alla costante vbObjectError. Per generare ad esempio il numero di errore 513, assegnare vbObjectError + 513 alla proprietà Number.
source	Facoltativo. Espressione stringa che definisce l'oggetto o l'applicazione che ha generato inizialmente l'errore. Quando si imposta questa proprietà per un oggetto, utilizzare la forma progetto.classe. Se non è specificato alcun valore, verrà utilizzato l'ID programmatico del progetto corrente di Visual Basic.
description	Facoltativo. Espressione stringa che descrive l'errore. Se non è specificato, verrà verificato il valore di Number. Se tale valore può essere abbinato a un codice di errore di run-time di Visual Basic, in Description verrà utilizzata la stringa che verrebbe restituita dalla funzione Error. Se Number non corrisponde ad alcun errore di Visual Basic, verrà utilizzata la stringa che corrisponde al messaggio "Errore definito dall'applicazione o dall'oggetto".
helpfile	Facoltativo. Percorso completo del file della Guida in linea relativo a questo errore. Se non è specificato, verranno utilizzati l'unità, il percorso completo e il nome del file della Guida in linea di Visual Basic.
helpcontext	Facoltativo. ID di contesto che identifica un argomento all'interno di helpfile relativo all'errore. Se non è specificato, verrà utilizzato, se esistente, l'ID di contesto del file della Guida in linea di Visual Basic relativo all'errore corrispondente alla proprietà Number.
Osservazioni

Tutti gli argomenti, a eccezione di number, sono facoltativi. Se tuttavia il metodo Raise viene utilizzato senza specificare alcuni argomenti mentre le impostazioni delle proprietà dell'oggetto Err contengono valori che non sono stati cancellati, tali valori verranno assegnati all'errore.

Il metodo Raise viene utilizzato per generare errori di run-time e può essere utilizzato in sostituzione dell'istruzione Error. Il metodo Raise risulta particolarmente utile per generare errori durante la scrittura di moduli di classe, in quanto l'oggetto Err consente di ottenere informazioni più dettagliate di quelle ottenute con l'istruzione Error. Con il metodo Raise è possibile, ad esempio, specificare l'origine dell'errore nella proprietà Source, far riferimento alla Guida in linea relativa all'errore e così via.


Metodo Remove

Rimuove un membro da un oggetto Collection.

Sintassi

oggetto.Remove indice

La sintassi del metodo Remove è composta dalla seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. Espressione oggetto che definisce un oggetto dell'elenco "Si applica a".
indice	Obbligatoria. Espressione che specifica la posizione di un membro dell'insieme.Se è un'espressione numerica, indice deve essere un numero compreso tra 1 e il valore della proprietà Count dell'insieme. Se è un'espressione stringa, indice deve corrispondere all'argomento key specificato quando il membro al quale si fa riferimento è stato aggiunto all'insieme.
Osservazioni

Se il valore fornito come indice non corrisponde ad alcun membro esistente dell'insieme, verrà generato un errore.


Esempio di istruzione AppActivate

In questo esempio vengono illustrati vari utilizzi dell'istruzione AppActivate per attivare una finestra di applicazione. Le istruzioni Shell partono dal presupposto che le applicazioni siano nei percorsi specificati. In Macintosh, il nome di unità predefinito è "HD" e le parti del percorso sono separate da due punti anziché da una barra rovesciata.

Dim MyAppID, ReturnValue

AppActivate "Microsoft Word"	' Attiva Microsoft

' Word.

' È inoltre possibile utilizzare il valore restituito dalla funzione Shell.

ReturnValue = Shell("c:\EXCEL\EXCEL.EXE",1)	' Esegue Microsoft Excel.

AppActivate ReturnValue	' Attiva Microsoft

' Excel.


Esempio di istruzione Beep

In questo esempio l'istruzione Beep viene utilizzata per emettere tre segnali acustici consecutivi tramite l'altoparlante del computer.

Dim I

For I = 1 To 3	' Ripete 3 volte.

Beep	' Emette un segnale acustico.

Next I


Esempio di funzione Command

In questo esempio la funzione Command viene utilizzata per leggere gli argomenti della riga di comando in una funzione che li restituisce come un variabile Variant contenente una matrice. Non è disponibile in Microsoft Office.

Function GetCommandLine(Optional MaxArgs)

'Dichiara le variabili.

Dim C, CmdLine, CmdLnLen, InArg, I, NumArgs

Verifica se MaxArgs è stato specificato.

If IsMissing(MaxArgs) Then MaxArgs = 10

'Imposta le dimensioni giuste per la matrice.

ReDim ArgArray(MaxArgs)

NumArgs = 0: InArg = False

'Legge gli argomenti della riga di comando.

CmdLine = Command()

CmdLnLen = Len(CmdLine)

'Si sposta nella riga di comando un carattere

'alla volta.

For I = 1 To CmdLnLen

C = Mid(CmdLine, I, 1)

'Controlla se vi sono spazi o tabulazioni.

If (C <> " " And C <> vbTab) Then

'Nessuno spazio o tabulazione.

'Controlla se è già nell'argomento.

If Not InArg Then

'Inizia un nuovo argomento.

'Controlla se vi sono troppi argomenti.

If NumArgs = MaxArgs Then Exit For

NumArgs = NumArgs + 1

InArg = True

End If

'Concatena un carattere all'argomento corrente.

ArgArray(NumArgs) = ArgArray(NumArgs) & C

Else

'Ha trovato uno spazio o una tabulazione.

'Imposta il flag InArg su False.

InArg = False

End If

Next I

'Ridimensiona la matrice in modo che sia

'sufficiente per archiviare gli argomenti.

ReDim Preserve ArgArray(NumArgs)

'Restituisce la matrice nel nome della funzione.

GetCommandLine = ArgArray()

End Function


Esempio di funzione InputBox

In questo esempio vengono illustrati vari utilizzi della funzione InputBox per richiedere l'immissione di un valore. Se le posizioni x e y vengono omesse, la finestra di dialogo risulterà automaticamente centrata in relazione ai rispettivi assi. La variabile MyValue contiene il valore immesso dall'utente se l'utente fa clic su OK o preme INVIO. Se l'utente fa clic su Annulla, verrà restituita una stringa di lunghezza zero.

Dim Message, Title, Default, MyValue

Message = "Immettere un valore da 1 a 3"	' Imposta il messaggio.

Title = "Demo InputBox"	' Imposta il titolo.

Default = "1"	' Imposta il valore predefinito.

' Visualizza il messaggio, il titolo e il valore predefinito.

MyValue = InputBox(Message, Title, Default)

' Utilizza il file della Guida e il contesto.

' Il pulsante di Guida viene aggiunto automaticamente.

MyValue = InputBox(Message, Title, , , , "DEMO.HLP", 10)

' Visualizza la finestra di dialogo nella posizione 100,100

MyValue = InputBox(Message, Title, Default, 100, 100)


Esempio di funzione MsgBox

In questo esempio la funzione MsgBox viene utilizzata per visualizzare un messaggio di errore critico in una finestra di dialogo che include i pulsanti Sì e No. Il pulsante No viene indicato come risposta predefinita. Il valore restituito dalla funzione MsgBox dipende dal pulsante scelto. Nell'esempio, si presuppone che DEMO.HLP sia un file della Guida che include un argomento con numero di contesto uguale a 1000.

Dim Msg, Style, Title, Help, Ctxt, Response, MyString

Msg = "Continuare  ?"	' Definisce il messaggio.

Style = vbYesNo + vbCritical + vbDefaultButton2	' Definisce i pulsanti.

Title = "Dimostrazione MsgBox"	' Definisce il titolo.

Help = "DEMO.HLP"	' Definisce il file della Guida.

Ctxt = 1000	' Definisce il contesto dell'argomento.

' Visualizza il messaggio.

Response = MsgBox(Msg, Style, Title, Help, Ctxt)

If Response = vbYes Then	' L'utente sceglie il pulsante Sì.

MyString = "Sì"	' Esegue un'azione.

Else	' L'utente sceglie il pulsante No.

MyString = "No"	' Esegue un'azione.

End If


Esempio di istruzione SendKeys

In questo esempio la funzione Shell viene utilizzata per eseguire l'applicazione Calcolatrice di Microsoft Windows. Esso utilizza l'istruzione SendKeys per inviare sequenze di tasti per l'aggiunta di alcuni numeri e l'uscita dalla Calcolatrice. Per provare questo codice di esempio, incollarlo in una routine, quindi eseguire la routine. Dato che AppActivate sposta lo stato attivo sull'applicazione Calcolatrice, non è possibile eseguire il codice un'istruzione alla volta. In Macintosh, anziché la Calcolatrice di Windows utilizzare un'applicazione Macintosh che accetti l'immissione da tastiera.

Dim ReturnValue, I

ReturnValue = Shell("CALC.EXE", 1)	' Esegue la Calcolatrice.

AppActivate ReturnValue 	' Attiva la Calcolatrice.

For I = 1 To 100	' Imposta il ciclo di conteggio.

SendKeys I & "{+}", True	' Invia sequenze di tasti alla Calcolatrice per aggiungere

Next I	' ciascun valore di I.

SendKeys "=", True	' Legge il totale.

SendKeys "%{F4}", True	' Invia ALT+F4 per uscire dalla Calcolatrice.


Istruzione AppActivate

Attiva una finestra di applicazione.

Sintassi

AppActivate title[, wait]

La sintassi dell'istruzione AppActivate è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
title	Obbligatoria. Espressione stringa che specifica il titolo nella barra del titolo della finestra di applicazione da attivare. Al posto di title, per attivare un'applicazione è inoltre possibile utilizzare l'ID del task restituito dalla funzione Shell.
wait	Facoltativa. Valore Boolean che indica se l'applicazione chiamante è attiva prima di attivarne un'altra. Se il risultato è False (valore predefinito), l'applicazione specificata verrà attivata immediatamente anche se l'applicazione chiamante non è attiva. Se il risultato è True, l'applicazione chiamante attenderà di essere attivata prima di attivare l'applicazione specificata.
Osservazioni

L'istruzione AppActivate attiva la finestra di applicazione specificata senza modificarne la modalità di visualizzazione (ingrandita o ridotta a icona). La finestra resterà attiva fino a quando non verrà chiusa o non verrà attivata un'altra finestra. Utilizzare la funzione Shell per avviare un'applicazione e impostare lo stile della finestra.

Per determinare l'applicazione da attivare, viene eseguito un confronto per trovare un'applicazione in esecuzione la cui stringa del titolo corrisponda esattamente a title. Se tale confronto ha esito negativo, verrà attivata qualsiasi applicazione la cui stringa del titolo inizia con title. Se la ricerca individua più istanze dell'applicazione con il nome definito con title, ne verrà attivata una in modo arbitrario.


Istruzione Beep

Emette un segnale acustico tramite l'altoparlante del computer.

Sintassi

Beep

Osservazioni

La frequenza e la durata del segnale acustico dipendono dal computer e dal software di sistema in uso.


Funzione Command

Restituisce la parte degli argomenti della riga di comando utilizzata per avviare Microsoft Visual Basic o un programma eseguibile sviluppato con Visual Basic. La funzione Command di Visual Basic non è disponibile nelle applicazioni Microsoft Office.

Sintassi

Command

Osservazioni

Quando Visual Basic viene avviato dalla riga di comando, qualsiasi parte della riga di comandi successiva a /cmd viene passata al programma come argomento della riga di comandi. Nell'esempio seguente, argomentirigadicomando rappresenta gli argomenti restituiti dalla funzione Command.

VB /cmd argomentirigadicomando

Per le applicazioni sviluppate con Visual Basic e compilate in un file exe, Command restituisce tutti gli argomenti visualizzati dopo il nome dell'applicazione nella riga di comando. Ad esempio:

MyApp argomentirigadicomando

Per informazioni su come modificare gli argomenti della riga di comando utilizzando l'interfaccia utente dell'applicazione, cercare la voce "argomenti della riga di comando" nella Guida in linea.


Funzione InputBox

Visualizza un messaggio in una finestra di dialogo, attendendo che l'utente immetta del testo o scelga un pulsante, quindi restituisce un valore String che include il contenuto della casella di testo.

Sintassi

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

La sintassi della funzione InputBox è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
prompt	Obbligatoria. Espressione stringa che costituisce il messaggio visualizzato nella finestra di dialogo. La lunghezza massima di prompt è di circa 1024 caratteri e dipende dalla larghezza dei caratteri utilizzati. Se prompt è suddiviso su più righe, è possibile includere, tra ciascuna coppia di righe, un ritorno a capo (Chr(13)), un carattere di avanzamento riga (Chr(10)) o una sequenza ritorno a capo-avanzamento riga (Chr(13) & Chr(10)).
title	Facoltativa. Espressione stringa visualizzata nella barra del titolo della finestra di dialogo. Se l'argomento title viene omesso, nella barra del titolo verrà indicato il nome dell'applicazione.
default	Facoltativa. Espressione stringa visualizzata nella casella di testo come risposta predefinita quando non sono forniti altri input. Se default è omesso, verrà visualizzata una casella di testo vuota.
xpos	Facoltativa. Espressione numerica che specifica la distanza orizzontale in twip del bordo sinistro della finestra di dialogo dal margine sinistro dello schermo. Se xpos è omesso, la finestra di dialogo apparirà centrata in senso orizzontale.
ypos	Facoltativa. Espressione numerica che specifica la distanza verticale in twip del bordo superiore della finestra di dialogo dal margine superiore dello schermo. Se ypos è omesso, la finestra di dialogo verrà posizionata verticalmente a circa un terzo dal margine superiore dello schermo.
helpfile	Facoltativa. Espressione stringa che identifica il file della Guida da utilizzare per ottenere informazioni di Guida sensibili al contesto relative alla finestra di dialogo. Se si indica helpfile è necessario indicare anche context.
context	Facoltativa. Espressione numerica che corrisponde al numero del contesto della Guida assegnato all'argomento corrispondente della Guida. Se si indica context è necessario indicare anche helpfile.
Osservazioni

Se vengono inclusi sia l'argomento helpfile che l'argomento context gli utenti potranno premere F1 (Windows) oppure AIUTO (Macintosh) per visualizzare l'argomento della Guida corrispondente a context. In alcune applicazioni host, ad esempio Microsoft Excel, verrà inoltre aggiunto automaticamente il pulsante della Guida (?) nella finestra di dialogo. Se l'utente fa clic su OK o preme INVIO , la funzione InputBox restituirà il contenuto della casella di testo. Se l'utente fa clic sul pulsante Annulla, la funzione restituirà una stringa di lunghezza zero ("").

Nota   Se si desidera specificare altri argomenti, oltre al primo predefinito, è necessario utilizzare InputBox in un'espressione. Se si desidera omettere alcuni argomenti di posizione, è necessario aggiungere la virgola di delimitazione corrispondente.


Funzione MsgBox

Visualizza un messaggio in una finestra di dialogo e attende che l'utente scelga un pulsante, quindi restituisce un valore Integer che indica quale pulsante l'utente ha scelto.

Sintassi

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

La sintassi della funzione MsgBox è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
prompt	Obbligatoria. Espressione stringa che costituisce il messaggio visualizzato nella finestra di dialogo. La lunghezza massima di prompt è di circa 1024 caratteri e dipende dalla larghezza dei caratteri utilizzati. Se prompt è suddiviso su più righe, è possibile includere, tra ciascuna coppia di righe, un ritorno a capo (Chr(13)), un carattere di avanzamento riga (Chr(10)) o una sequenza ritorno a capo-avanzamento riga (Chr(13) & Chr(10)).
buttons	Facoltativa. Espressione numerica che indica la somma dei valori che specificano il numero e il tipo di pulsante da visualizzare, lo stile di icona da utilizzare, il tipo di pulsante da utilizzare come impostazione predefinita e la modalità della finestra di messaggio. Se omesso il valore predefinito di buttons è 0.
title	Facoltativa. Espressione stringa visualizzata nella barra del titolo della finestra di dialogo. Se l'argomento title viene omesso, nella barra del titolo verrà indicato il nome dell'applicazione.
helpfile	Facoltativa. Espressione stringa che identifica il file della Guida da utilizzare per ottenere informazioni di Guida sensibili al contesto relative alla finestra di dialogo. Se si indica helpfile è necessario indicare anche context.
context	Facoltativa. Espressione numerica che corrisponde al numero del contesto della Guida assegnato all'argomento corrispondente della Guida. Se si indica context è necessario indicare anche helpfile.
Impostazioni

Le possibili impostazioni dell'argomento buttons sono:

Costante	Valore	Descrizione
vbOKOnly	0	Visualizza solo il pulsante OK.
VbOKCancel	1	Visualizza i pulsanti OK e Annulla.
VbAbortRetryIgnore	2	Visualizza i pulsanti Termina, Riprova, e Ignora.
VbYesNoCancel	3	Visualizza i pulsanti Sì, No e Annulla.
VbYesNo	4	Visualizza i pulsanti Sì e No.
VbRetryCancel	5	Visualizza i pulsanti Riprova e Annulla.
VbCritical	16	Visualizza l'icona di messaggio critico.
VbQuestion	32	Visualizza l'icona di richiesta di avviso.
VbExclamation	48	Visualizza l'icona di messaggio di avviso.
VbInformation	64	Visualizza l'icona di messaggio di informazione.
VbDefaultButton1	0	Il primo pulsante è il predefinito.
VbDefaultButton2	256	Il secondo pulsante è il predefinito.
VbDefaultButton3	512	Il terzo pulsante è il predefinito.
VbDefaultButton4	768	Il quarto pulsante è il predefinito
VbApplicationModal	0	Finestra di messaggio a scelta obbligatoria nell'applicazione. L'utente deve rispondere alla finestra di messaggio prima di poter continuare a lavorare nell'applicazione corrente.
VbSystemModal	4096	Finestra di messaggio a scelta obbligatoria nel sistema. Tutte le applicazioni vengono sospese fino a quando l'utente non risponde alla finestra di messaggio.
vbMsgBoxHelpButton	16384	Aggiunge un pulsante della Guida nella finestra di messaggio.
VbMsgBoxSetForeground	65536	Specifica che la finestra di messaggio è in primo piano.
vbMsgBoxRight	524288	Il testo è allineato a destra.
vbMsgBoxRtlReading	1048576	Specifica che il testo viene visualizzato da destra a sinistra per i sistemi ebraico e arabo.
Il primo gruppo di valori (0-5) descrive il numero e il tipo dei pulsanti visualizzati nella finestra di messaggio. Il secondo gruppo (16, 32, 48, 64) descrive lo stile dell'icona. Il terzo gruppo (0, 256, 512, 768) determina il pulsante predefinito e il quarto gruppo (0, 4096) determina se la finestra di messaggio è a scelta obbligatoria nell'applicazione o nel sistema. Quando si sommano dei numeri per la creazione di un valore finale dell'argomento buttons, utilizzare soltanto un numero per ciascun gruppo.

Nota   Di seguito sono elencate le costanti specificate o riconosciute da Visual Basic, Applications Edition utilizzabili in qualsiasi punto del codice in sostituzione dei valori effettivi.

Valori restituiti

Costante	Valore	Descrizione
vbOK	1	OK
vbCancel	2	Annulla
vbAbort	3	Termina
vbRetry	4	Riprova
vbIgnore	5	Ignora
vbYes	6	Sì
vbNo	7	No
Osservazioni

Se vengono inclusi sia l'argomento helpfile che l'argomento context gli utenti potranno premere F1 (Windows) oppure AIUTO (Macintosh) per visualizzare l'argomento della Guida corrispondente a context. In alcune applicazioni host, ad esempio Microsoft Excel, verrà inoltre aggiunto automaticamente il pulsante della Guida (?) nella finestra di dialogo.

Se nella finestra di dialogo è visualizzato un pulsante Annulla, il tasto ESC avrà la stessa funzione del pulsante Annulla. Se nella finestra di dialogo è incluso un pulsante della Guida (?), significa che per la finestra di dialogo è disponibile la Guida sensibile al contesto. Non verrà restituito comunque nessun valore, se non dopo aver scelto almeno uno degli altri pulsanti.

Nota   Se si desidera specificare altri argomenti, oltre al primo predefinito, è necessario utilizzare MsgBox in un'espressione. Se si desidera omettere alcuni argomenti di posizione, è necessario aggiungere la virgola di delimitazione corrispondente.


Istruzione SendKeys

Invia alla finestra attiva una o più sequenze di tasti, come se queste fossero state immesse tramite tastiera.

Sintassi

SendKeys string[, wait]

La sintassi dell'istruzione SendKeys è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
string	Obbligatoria. Espressione stringa che specifica la sequenza di tasti da inviare.
Wait	Facoltativa. Valore Boolean che specifica la modalità d'attesa. Se il risultato è False (valore predefinito) il controllo verrà trasferito alla routine subito dopo aver inviato la sequenza di tasti. Se il risultato è True, le sequenze di tasti dovranno essere elaborate prima che il controllo venga restituito alla routine.
Osservazioni

Ogni tasto è rappresentato da uno o più caratteri. Per specificare un singolo carattere della tastiera, utilizzare il carattere stesso. Per rappresentare, ad esempio, la lettera A, indicare "A" nell'argomento string. Se si desidera rappresentare più caratteri, indicare i caratteri in sequenza. Per rappresentare, ad esempio, le lettere A, B e C, indicare "ABC" nell'argomento string.

Il segno (+), l'accento circonflesso (^), il segno di percentuale (%), la tilde (~) e le parentesi ( ) hanno significati particolari per SendKeys. Per specificare uno di questi caratteri, racchiuderlo tra parentesi graffe. Per specificare, ad esempio, il segno più, è necessario utilizzare {+}. Le parentesi quadre ([ ]) non hanno un significato particolare per SendKeys, ma vanno racchiuse anch'esse tra parentesi graffe, in quanto possono essere interpretate in maniera particolare in altre applicazioni durante operazioni di scambio dinamico di dati (DDE). Per inviare i caratteri parentesi graffe, indicare {{} e {}}.

Per specificare caratteri ai quali non corrisponde una visualizzazione, quali INVIO o TAB, e tasti che rappresentano azioni piuttosto che caratteri, utilizzare i codici della seguente tabella:

Tasto	Codice
BACKSPACE	{BACKSPACE}, {BS}, o {BKSP}
INTERR	{BREAK}
BLOC MAIUSC	{CAPSLOCK}
CANC	{DELETE} o {DEL}
FRECCIA GIÙ	{DOWN}
FINE	{END}
INVIO	{ENTER}o ~
ESC	{ESC}
AIUTO	{HELP}
HOME	{HOME}
INS	{INSERT} o {INS}
FRECCIA SINISTRA	{LEFT}
BLOC NUM	{NUMLOCK}
PGGIÙ	{PGDN}
PGSU	{PGUP}
STAMP	{PRTSC}
FRECCIA DESTRA	{RIGHT}
BLOC SCORR	{SCROLLLOCK}
TAB	{TAB}
FRECCIA SU	{UP}
F1	{F1}
F2	{F2}
F3	{F3}
F4	{F4}
F5	{F5}
F6	{F6}
F7	{F7}
F8	{F8}
F9	{F9}
F10	{F10}
F11	{F11}
F12	{F12}
F13	{F13}
F14	{F14}
F15	{F15}
F16	{F16}
Per specificare una combinazione di tasti con MAIUSC CTRL e ALT, anteporre al codice del tasto uno o più dei seguenti codici:

Tasto	Codice
MAIUSC	+
CTRL	^
ALT	%
Per specificare che MAIUSC , CTRL e ALT vanno tenuti premuti mentre si premono altri tasti, racchiudere il codice dei tasti tra parentesi. Per indicare, ad esempio, che occorre tenere premuto MAIUSC mentre si premono E e C, specificare "+(EC)". Per indicare che occorre tenere premuto MAIUSC mentre si preme E quindi rilasciare MAIUSC e premere C, specificare "+EC".

Per specificare la ripetizione di un tasto, utilizzare la forma {tasto numero}. Inserire uno spazio tra tasto e numero. Ad esempio, {LEFT 42} significa premere il tasto freccia SINISTRA 42 volte; {h 10} significa premere H dieci volte.

Nota   SendKeys non consente di inviare sequenze di tasti a un'applicazione non sviluppata per essere eseguita in ambiente Microsoft Windows o Macintosh. SendKeys non può inoltre essere utilizzata per inviare il tasto STAMP {PRTSC} a nessuna applicazione.


Set di caratteri (0 - 127)

0	•	32	[spazio]	64	@	96	`
1	•	33	!	65	A	97	a
2	•	34	"	66	B	98	b
3	•	35	#	67	C	99	c
4	•	36	$	68	D	100	d
5	•	37	%	69	E	101	e
6	•	38	&	70	F	102	f
7	•	39	'	71	G	103	g
8	* *	40	(	72	H	104	h
9	* *	41	)	73	I	105	i
10	* *	42	*	74	J	106	j
11	•	43	+	75	K	107	k
12	•	44	,	76	L	108	l
13	* *	45	-	77	M	109	m
14	•	46	.	78	N	110	n
15	•	47	/	79	O	111	o
16	•	48	0	80	P	112	p
17	•	49	1	81	Q	113	q
18	•	50	2	82	R	114	r
19	•	51	3	83	S	115	s
20	•	52	4	84	T	116	t
21	•	53	5	85	U	117	u
22	•	54	6	86	V	118	v
23	•	55	7	87	W	119	w
24	•	56	8	88	X	120	x
25	•	57	9	89	Y	121	y
26	•	58	:	90	Z	122	z
27	•	59	;	91	[	123	{
28	•	60	<	92	\	124	|
29	•	61	=	93	]	125	}
30	•	62	>	94	^	126	~
31	•	63	?	95	_	127	•
•	Questi caratteri non sono supportati in Microsoft Windows.

* *	I valori 8, 9, 10 e 13 vengono convertiti rispettivamente nei caratteri BACKSPACE, tabulazione, avanzamento riga e ritorno a capo. Per questi caratteri non è disponibile una rappresentazione grafica, ma, in base al tipo di applicazione, possono avere effetto sulla visualizzazione del testo.


Funzione IMEStatus

Restitusce un valore Integer che specifica la modalità IME (Input Method Editor) attiva di Microsoft Windows. Disponibile solo nelle versioni orientali.

Sintassi

IMEStatus

Valori restituiti

Impostazioni internazionali giapponesi:

Costante	Valore	Descrizione
vbIMEModeNoControl	0	IME non gestito (predefinita)
vbIMEModeOn	1	IME attivo
vbIMEModeOff	2	IME non attivo
vbIMEModeDisable	3	IME disattivato
vbIMEModeHiragana	4	Modalità Hiragana a tutta larghezza
vbIMEModeKatakana	5	Modalità Katakana a tutta larghezza
vbIMEModeKatakanaHalf	6	Modalità Katakana a metà larghezza
vbIMEModeAlphaFull	7	Modalità alfanumerica a tutta larghezza
vbIMEModeAlpha	8	Modalità alfanumerica a metà larghezza
Impostazioni internazionali coreane:

Costante	Valore	Descrizione
vbIMEModeNoControl	0	IME non gestito (predefinita)
vbIMEModeAlphaFull	7	Modalità alfanumerica a tutta larghezza
vbIMEModeAlpha	8	Modalità alfanumerica a metà larghezza
vbIMEModeHangulFull	9	Modalità Hangul a tutta larghezza
vbIMEModeHangul	10	Modalità Hangul a metà larghezza
Impostazioni internazionali cinesi:

Costante	Valore	Descrizione
vbIMEModeNoControl	0	IME non gestito (predefinita)
vbIMEModeOn	1	IME attivo
vbIMEModeOff	2	IME non attivo


Impossibile eseguire il codice in modalità interruzione

La modalità interruzione viene attivata quando viene sospesa l'esecuzione del codice. Cause e soluzioni dell'errore:

•	Si è cercato di eseguire il codice dalla finestra di dialogo Macro, ma il codice era già in esecuzione, sebbene fosse in sospeso in modalità interruzione.

È possibile che la modalità interruzione sia stata attivata automaticamente, ad esempio se è stato generato un errore di sintassi o un errore di run-time. Proseguire l'esecuzione del codice in sospeso o terminarne l'esecuzione prima di eseguire il codice dalla finestra di dialogo Macro. È possibile risolvere il problema e quindi fare clic su Continua oppure tornare alla finestra di dialogo Macro e quindi riavviare la macro.

Per ulteriori informazioni, selezionare l'elemento desiderato e quindi premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile richiamare la routine Friend da un oggetto che non è un'istanza della classe di definizione. (Errore 97)

Una routine Friend può essere richiamata da moduli esterni alla classe, ma che fanno parte del progetto all'interno del quale viene definita la classe. Cause e soluzioni dell'errore:

•	Si è cercato di richiamare la routine Friend di una classe, ma sebbene la variabile di riferimento sia di tipo corretto, punta a un'istanza che non è un'istanza della classe.

Ciò può verificarsi, ad esempio, se vi sono due classi, classex e classey (che implementa classeY), ma si assegna per errore l'istanza di classey all'istanza di classex.

•	Si è cercato di accedere a una proprietà o a un metodo Friend tra processi o tra thread. Le routine Friend non fanno parte dell'interfaccia pubblica di una classe e non è quindi possibile eseguire il marshaling tra processi o tra thread.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile creare il controllo. Non è pertanto possibile uscire dalla modalità di progettazione

Per poter uscire dalla modalità di progettazione, è necessario creare un'istanza di tutti i controlli. Causa e soluzione dell'errore:

•	Non è possibile creare il controllo specificato nella finestra del messaggio di errore.

Per poter eseguire il codice, è necessario che sia stata creata un'istanza di tutti i controlli e che i controlli siano collegati in modo appropriato. Accertarsi che tutti i file richiesti dal controllo siano disponibili prima di riprovare.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


L'oggetto non può essere l'origine di eventi di automazione

Per ciascun oggetto deve essere disponibile un'interfaccia di origine predefinita in cui è possibile scrivere routine di eventi per i relativi eventi. Causa e soluzione dell'errore:

•	Si è cercato di scrivere una routine di eventi per un evento di un oggetto, ma tale evento non è disponibile al di fuori dell'oggetto.

Vedere la documentazione relativa all'oggetto. È infatti possibile che sia disponibile un metodo indiretto per gestire l'evento desiderato.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Operazione non ammessa in una DLL

All'interno di una libreria a collegamento dinamico (DLL), non tutte le istruzioni di Visual Basic sono consentite. Causa e soluzione dell'errore:

•	Si è cercato di creare una DLL da una classe contenente un'istruzione che non è possibile eseguire da una DLL.

Verificare se la classe include istruzioni che non possono essere eseguite all'interno di una DLL, ad esempio l'istruzione End, ed eventualmente rimuoverle.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Non valido all'esterno di Enum

Enum è un tipo di dati che consente di creare gruppi di costanti correlate, denominate anche enumerate. Causa e soluzione dell'errore:

•	È stata utilizzata un'istruzione End Enum in una posizione in cui tale istruzione non fa parte di una definizione Enum.

Verificare l'eventuale presenza di testo tra il corpo della definizione Enum e l'istruzione End Enum.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il documento è stato aperto mentre l'opzione Disattiva macro era attiva

Un'applicazione host può disattivare o attivare le macro. Causa e soluzione dell'errore:

•	Il documento è stato aperto mentre l'opzione Disattiva macro era attivata.

Chiudere il documento, quindi riaprirlo dopo aver selezionato Attiva macro.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il progetto corrente non fa riferimento alla libreria che contiene questo simbolo, pertanto il simbolo non è definito. Aggiungere un riferimento a tale libreria?

Le informazioni relative a tipi e oggetti sono contenute in librerie. Causa e soluzione dell'errore:

•	La definizione del simbolo è disponibile in una libreria dei tipi.

Se si desidera definire il simbolo in base alla definizione contenuta nella libreria specificata, scegliere OK per aggiungere il riferimento alla libreria.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


L'oggetto non ha una routine Property Let

Non è possibile assegnare un valore a una proprietà a meno che per essa non sia stato esposto un metodo Property Let. Causa e soluzione dell'errore:

•	Si è cercato di assegnare un valore a una proprietà per la quale non è stato esposto un metodo Property Let.

Non è possibile assegnare in modo diretto un valore a questa proprietà. Se la classe è stata creata, è possibile modificare l'interfaccia mediante l'esposizione del metodo Property Let. In caso contrario, verificare nella documentazione relativa al componente se esiste un metodo per assegnare il valore in modo indiretto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Guida non disponibile

Alcuni errori non hanno un argomento della Guida associato. Causa e soluzione dell'errore:

•	È stato generato un errore per il quale non è disponibile alcun argomento della Guida.

Controllare il file Leggimi, in cui vengono spesso fornite informazioni sugli errori di più recente definizione.


L'oggetto genera già eventi per il numero massimo possibile di destinatari di eventi. Impossibile elaborare gli eventi di questo oggetto. (Errore 96)

Ciascun oggetto specifica il numero massimo di destinatari per cui è in grado di generare simultaneamente eventi. Causa e soluzione dell'errore:

•	Si è cercato di utilizzare Set per una variabile WithEvents di un controllo o un form.

Non è possibile utilizzare Set per una variabile WithEvents, poiché il numero di destinatari consentiti per tali eventi è limitato.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare il punto di ingresso della DLL 	~ in ~

Un punto di ingresso è rappresentato dal nome di una routine DLL (Windows) o di una routine delle risorse di codice (Macintosh) o dal numero ordinale che rappresenta la routine. Cause e soluzioni dell'errore:

•	In una libreria dei tipi esiste una descrizione non corretta del punto di ingresso, dovuta probabilmente a un errore di scrittura del relativo nome o numero ordinale.

Contattare il fornitore per richiedere una libreria dei tipi corretta.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile eseguire il programma specificato

Quando si crea un eseguibile in codice nativo è necessario eseguire alcuni programmi aggiuntivi. Cause e soluzioni dell'errore:

•	La memoria o le risorse di sistema non sono sufficienti per eseguire il generatore di codice o il linker.

Chiudere le applicazioni in esecuzione non necessarie per liberare memoria e altre risorse di sistema.

•	Visual Basic non è stato installato correttamente.

Reinstallare Visual Basic.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Risorse doppie con lo stesso tipo e nome

Un file di risorse di Microsoft Windows contiene in genere bitmap, stringhe di testo e altri dati simili utilizzati in un'applicazione. Causa e soluzione dell'errore:

•	Il file di risorse di Windows che si sta cercando di utilizzare nel progetto contiene due o più risorse con lo stesso tipo e nome oppure il file contiene una risorsa creata automaticamente da Visual Basic.

Utilizzare un altro file di risorse o ricreare il file di risorse non valido ed eliminare una delle risorse doppie.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Una chiamata a una proprietà o a un metodo non può includere un riferimento a un oggetto privato, né come argomento né come valore restituito (Errore 98)

Non è possibile passare oggetti privati all'esterno di un progetto. Di seguito vengono elencate situazioni che è assolutamente necessario evitare in quanto possono essere causa dell'errore:

•	Un client ha richiamato una proprietà o un metodo di un componente out-of-process e ha cercato di passare come argomento un riferimento a un oggetto privato. Un client ha richiamato una proprietà o un metodo di un componente out-of-process e il componente ha cercato di restituire un riferimento a un oggetto privato o di assegnare il riferimento a un argomento ByRef.

•	Un componente out-of-process ha richiamato un metodo callback sul relativo client e quindi ha cercato di passare un riferimento a un oggetto privato.

•	Un componente out-of-process ha cercato di passare un riferimento a un oggetto privato come argomento di un evento che ha generato.

•	Un client ha cercato di assegnare un riferimento a un oggetto privato a un argomento ByRef di un evento gestito dal client stesso.

Si noti che benché in Visual Basic non sia possibile passare riferimenti cross-process a oggetti privati non visualizzabili, in alcuni casi questo errore non può essere individuato, né pertanto evitato. Gli oggetti privati non possono essere utilizzati esternamente al progetto. Passandoli al client la stabilità del programma potrebbe essere pregiudicata e si potrebbero verificare incompatibilità con le future versioni di Visual Basic. Se è necessario passare una classe privata personalizzata a un client, la proprietà Instancing deve essere impostata su un valore diverso da Private.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Assegnazione alla costante non ammessa

Una costante rappresenta un valore di sola lettura. Causa e soluzione dell'errore:

•	Si è cercato di assegnare un nuovo valore a una variabile dichiarata con Const, oppure a una costante di una libreria dei tipi.

Se è necessario assegnare un nuovo valore, dichiarare una variabile ordinaria del tipo desiderato e quindi assegnarvi il valore. Se è necessario utilizzare una variabile con area di validità limitata, è possibile dichiarare un'enumerazione utilizzando Enum.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


ParamArray non ammessi con parole chiave Optional

La parola chiave ParamArray consente di definire routine che accettano elenchi di argomenti di lunghezza variabile. L'argomento Optional può essere specificato o meno nella routine richiamata senza generare errori. Causa e soluzione dell'errore:

•	Sono state utilizzate entrambe le parole chiave ParamArray e Optional nello stesso elenco di parametri.

Rimuovere il parametro Optional oppure il parametro ParamArray. Le due parole chiave non possono essere utilizzate contemporaneamente nello stesso elenco di parametri ed è necessario scegliere la tecnica più adatta al tipo di elenco di parametri desiderato.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare il file

Verificare nel messaggio il nome del file che non è stato trovato. Causa e soluzione dell'errore:

•	Il file indicato nel messaggio di errore non è stato trovato.

Verificare che il nome dell'unità, il percorso e il nome del file siano stati specificati correttamente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Tipo di parametro facoltativo non valido

Non tutti i tipi di Visual Basic sono consentiti per i parametri Optional. Causa e soluzione dell'errore:

•	È stato definito un parametro con un tipo di dati non valido.

Non è possibile, ad esempio, utilizzare un parametro Optional di tipo definito dall'utente. Per ottenere il risultato desiderato, utilizzare una matrice di tipo Variant, poiché negli elementi di tale matrice è possibile memorizzare tipi di dati diversi.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Modello non valido

Una classe derivata da un modello non può essere utilizzata come modello. Causa e soluzione dell'errore:

•	Si è cercato di utilizzare come modello un componente derivato da un modello.

Non è possibile ottenere una classe di modelli in base a un modello.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Valido solo nel modulo di oggetto

Alcune istruzioni o blocchi di Visual Basic sono validi solo nei moduli di oggetto (form, moduli di classe e così via). Causa e soluzione dell'errore:

•	Si è cercato di utilizzare un'istruzione o un blocco non valido (ad esempio l'istruzione Implements, la parola chiave WithEvents o una routine di elaborazione degli eventi) in un modulo non di classe.

Inserire le istruzioni che generano questo errore in un modulo di oggetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


La libreria dei tipi o la creazione guidata richiesta non è un progetto VBA

Non tutti gli elementi disponibili in Visual Basic supportano sia la lettura che la scrittura. Cause e soluzioni dell'errore:

•	Si è cercato di scrivere in un'aggiunta (add-in) o in una libreria dei tipi dall'interno di un progetto Visual Basic.

Non è possibile scrivere direttamente in un'aggiunta predefinita o in una libreria dei tipi da un progetto Visual Basic.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Questa operazione di modifica richiede il riavvio dell'applicazione sviluppata

Nella maggior parte dei casi, è possibile modificare il codice e continuare a eseguirlo dalla posizione in cui è stato modificato. Cause e soluzioni dell'errore:

•	Al codice è stata apportata una modifica in seguito alla quale è necessario riavviarlo dal punto di inizializzazione.

L'errore può verificarsi se durante l'esecuzione di una routine il codice è stato interrotto e la riga di esecuzione corrente non si trova più nello stesso contesto della routine in cui si trovava al momento dell'interruzione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Traduzione non riuscita. Per ulteriori informazioni consultare il file trnslate.log.

Le versioni correnti di Visual Basic permettono di eseguire la traduzione solo ai fini della compatibilità con le versioni precedenti. Cause e soluzioni dell'errore:

•	La traduzione non è riuscita in modo imprevisto.

L'errore in genere si verifica a causa di un riferimento interrotto con una libreria dei tipi. Per ulteriori informazioni, consultare il registro di traduzione specificato.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Le creazioni guidate non possono fare riferimento a progetti

Una creazione guidata può fare riferimento a un'altra creazione guidata, ma non a un progetto. Cause e soluzioni dell'errore:

•	Durante la creazione di una creazione guidata è stato individuato un riferimento a un progetto.

Rimuovere il riferimento al progetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore di compilazione imprevisto

Cause e soluzioni dell'errore:

Questo errore si verifica quando durante la compilazione viene generato un errore imprevisto che non può essere gestito dal compilatore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile gestire gli eventi per l'oggetto specificato

Cause e soluzioni dell'errore:

Non è possibile gestire gli eventi per questo oggetto, poiché tali eventi non sono presenti nell'oggetto o sono presenti ma il relativo funzionamento non è corretto oppure sono stati disattivati in modo intenzionale.

Controllare l'oggetto e i relativi eventi nel Visualizzatore oggetti allo scopo di ottenere informazioni.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Utilizzo non valido del nome della classe di base

Non è possibile utilizzare il nome di una classe di base da solo. Cause e soluzioni dell'errore:

•	Si è cercato di utilizzare il nome di una classe di base da solo senza specificare che si tentava di accedere al membro predefinito della classe di base.

Inserire il nome della classe di base tra parentesi per specificare che si desidera accedere al membro predefinito.

•	In un'espressione è stato utilizzato il nome della classe di base, ma il membro a cui si cerca di accedere è stato specificato in modo ambiguo.

Inserire un carattere che consenta di risolvere l'ambiguità, ad esempio un punto esclamativo, tra il nome della classe di base e il membro in questione.

•	Il nome della classe di base è stato utilizzato in un'istruzione Set come se essa includesse un riferimento alla classe.

Utilizzare il nome della classe di base per recuperare un riferimento, ad esempio tramite GetObject.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Nome di evento non valido

I nomi delle routine di eventi vengono costruiti unendo il nome dell'oggetto al nome dell'evento tramite un carattere di sottolineatura. Causa e soluzione dell'errore:

•	Il carattere di sottolineatura è stato specificato come parte del nome dell'evento.

Rimuovere il carattere di sottolineatura dal nome dell'evento.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare l'evento

Gli eventi specificati in un'istruzione RaiseEvent devono corrispondere a eventi definiti. Causa e soluzione dell'errore:

•	È stato specificato un nome di evento in un'istruzione RaiseEvent, ma non è possibile trovare la definizione dell'evento.

Verificare che il nome dell'evento sia stato digitato in modo corretto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


È necessario specificare una stringa di ricerca

Quando si esegue una ricerca nel Visualizzatore oggetti, è necessario digitare una stringa. Causa e soluzione dell'errore:

•	È stata avviata una ricerca nel Visualizzatore oggetti, ma non è stato specificato il testo da cercare.

Digitare una stringa di ricerca.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile visualizzare il nome specificato perché è nascosto

Alcuni nomi sono disponibili in una libreria dei tipi, ma sono nascosti. Causa e soluzione dell'errore:

•	È stato specificato un nome che si trova nella libreria dei tipi, ma è contrassegnato come nascosto.

In genere non è possibile visualizzare i membri nascosti di una libreria dei tipi. Per rendere visibili i membri nascosti, scegliere Mostra membri nascosti dal menu di scelta rapida del Visualizzatore oggetti. Verranno quindi visualizzate le relative informazioni.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile passare a '~' perché si trova nella libreria '~' alla quale non viene fatto alcun riferimento

Causa e soluzione dell'errore:

•	Si è cercato di specificare un tipo in una libreria a cui non viene fatto riferimento all'interno del progetto.

Impostare un riferimento alla libreria dei tipi tramite la finestra Riferimenti.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Non valido all'interno di Enum

All'interno della definizione di un'enumerazione, non tutti i tipi sono validi. Causa e soluzione dell'errore:

•	Si è cercato di specificare una stringa o un altro tipo non valido come valore di un membro Enum.

L'espressione costante utilizzata per specificare un membro Enum deve definire un tipo Long o un altro tipo Enum.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore imprevisto

Cause e soluzioni dell'errore:

•	Si è verificato un errore imprevisto. Arrestare e riavviare il sistema.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il progetto corrente non supporta file di questo tipo

Cause e soluzioni dell'errore:

•	Il file che si è cercato di aprire non è un file di progetto valido oppure contiene caratteristiche non supportate dall'applicazione host Visual Basic in uso e dall'ambiente Visual Basic.

Verificare che il file di progetto da aprire sia valido, ovvero sia un file creato e salvato nella stessa applicazione host Visual Basic e nell'ambiente Visual Basic.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il progetto VBA è stato creato in un'altra applicazione. È possibile aprirlo solo nell'applicazione in cui è stato creato.

Cause e soluzioni dell'errore:

•	Il file che si è cercato di aprire è un file di progetto creato in un'altra applicazione host.

Verificare che il file di progetto che si desidera aprire sia stato creato e salvato nella stessa applicazione host Visual Basic.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile associare menu a controlli privi di finestra

Cause e soluzioni dell'errore:

•	Si è cercato di inserire un menu in un controllo privo di finestra, operazione non valida.

Per inserire un menu in un controllo, è necessario scegliere un controllo con finestra.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Questo controllo può essere utilizzato solo con finestre di progettazione di '~'

Cause e soluzioni dell'errore:

•	Il controllo che è stato selezionato funziona soltanto con la finestra di progettazione specificata nel messaggio di errore.

È necessario scegliere un altro controllo o una finestra di progettazione diversa.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile utilizzare questo controllo con finestre di progettazione di '~'

Cause e soluzioni dell'errore:

•	Il controllo che è stato selezionato non funziona con la finestra di progettazione specificata nel messaggio di errore.

È necessario scegliere un altro controllo o una finestra di progettazione diversa.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


La finestra di progettazione non può essere utilizzata perché prevede funzionalità non supportate in questa versione di Visual Basic

Cause e soluzioni dell'errore:

•	La finestra di progettazione selezionata non è supportata nella versione di Visual Basic in uso.

È necessario utilizzare una finestra di progettazione diversa o la finestra di progettazione specifica per la versione di Visual Basic indicata.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Nel progetto è impostato un riferimento a '~' che tuttavia non può essere aggiunto perché non viene utilizzato da nessun elemento del progetto. Per risolvere il problema, deselezionare la casella di controllo 'Rimuovi informazioni sui controlli ActiveX non utilizzati' nella finestra delle proprietà del progetto.

Cause e soluzioni dell'errore:

•	Non è possibile aggiungere il componente indicato perché non è utilizzato da nessuno degli elementi del progetto.

Deselezionare la casella "Rimuovi informazioni sui controlli ActiveX non utilizzati" nella finestra di dialogo Opzioni progetto a cui si accede dal menu Progetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile avviare Internet Explorer

Cause e soluzioni dell'errore:

•	Si è verificato un errore sconosciuto che impedisce l'esecuzione di Internet Explorer.

Avviare Internet Explorer separatamente per verificare che funzioni in modo corretto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Le finestre di progettazione '~' possono essere utilizzate solo in progetti DLL

Cause e soluzioni dell'errore:

•	La finestra di progettazione specificata nel messaggio può essere utilizzata soltanto in progetti DLL ActiveX.

Utilizzare la finestra di progettazione in un progetto DLL ActiveX.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Le finestre di progettazione '~' non possono essere pubbliche in progetti EXE ActiveX

Cause e soluzioni dell'errore:

•	In progetti EXE ActiveX la proprietà Instancing della finestra di progettazione specificata nel messaggio non può essere impostata su Public.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Le finestre di progettazione '~' devono essere pubbliche e non possono essere utilizzate in progetti EXE standard

Cause e soluzioni dell'errore:

•	La proprietà Instancing della finestra di progettazione specificata nel messaggio deve essere impostata su Public.

Non è possibile utilizzare la finestra di progettazione in progetti EXE ActiveX standard.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Le finestre di progettazione '~' non possono essere private.

Cause e soluzioni dell'errore:

•	La proprietà Instancing della finestra di progettazione specificata nel messaggio non può essere impostata su Private.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Vi sono una o più istanze dell'oggetto in esecuzione. Impossibile rimuoverlo in questo momento

Cause e soluzioni dell'errore:

•	Si è cercato di rimuovere un oggetto in esecuzione.

Prima di rimuovere l'oggetto dal progetto, chiuderne tutte le istanze.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile chiudere il progetto perché vi fa riferimento un altro progetto

Cause e soluzioni dell'errore:

•	Il un progetto viene fatto riferimento al progetto che si è cercato di chiudere e specificato nel messaggio.

Rimuovere il riferimento e quindi chiudere il progetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


I form MDI non sono ammessi in progetti multithreading. Tutti i form MDI verranno rimossi dal progetto. Per mantenere il form MDI nel progetto, selezionare Annulla e impostare il modello di threading su Pool di thread con solo 1 thread.

Cause e soluzioni dell'errore:

•	Si è cercato di aggiungere un form MDI in un progetto di tipo multithreading.

Se si desidera conservare il form MDI nel progetto, impostare il modello di threading su Pool di thread con solo 1 thread.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


'~' ha causato una violazione di accesso. Rimuoverlo dall'elenco delle aggiunte disponibili?

Cause e soluzioni dell'errore:

•	L'aggiunta specificata nel messaggio genera un errore di violazione di accesso al file.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


L'aggiunta selezionata non è stata confermata come eseguibile dalla riga di comando. Potrebbe essere necessario l'intervento dell'utente e pertanto essere visualizzata un'interfaccia utente.

Cause e soluzioni dell'errore:

•	Un'aggiunta è "eseguibile dalla riga di comando" quando è stata registrata in modo da indicare l'assenza nell'aggiunta di interfacce utente che richiedono l'input dell'utente all'avvio di Visual Basic dalla riga di comando. Un'interfaccia utente può interferire con il funzionamento di processi automatici, ad esempio degli script di compilazione.

Se non si imposta un'aggiunta come eseguibile dalla riga di comando (anche se in effetti lo è), quando l'utente seleziona l'aggiunta e imposta l'opzione Caricamento su Riga di comando, verrà visualizzato questo messaggio. Non si tratta di un problema grave, ma semplicemente di un avviso per indicare all'utente la possibile presenza nell'aggiunta selezionata di elementi di interfaccia che possono essere visualizzati improvvisamente, con la conseguente interruzione degli script automatizzati in attesa dell'input dell'utente.

Per specificare che un'aggiunta è eseguibile dalla riga di comando, è necessario crearla come tale tramite la finestra di progettazione Aggiunta oppure modificare in modo manuale il valore corrispondente nella chiave del registro di configurazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Parametro non valido. Impossibile scrivere il tipo definito dall'utente.

Cause e soluzioni dell'errore:

•	Si è cercato di scrivere un tipo definito dall'utente in un oggetto PropertyBag, operazione non supportata.

Per ovviare a questo problema, è possibile scrivere ogni singolo elemento del tipo definito dall'utente nell'oggetto PropertyBag.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Parametro non valido. Impossibile scrivere l'oggetto perché non supporta la persistenza.

Cause e soluzioni dell'errore:

•	Si è cercato di scrivere in un oggetto PropertyBag un oggetto che non supporta una delle interfacce di persistenza ActiveX.

Per evitare questo problema, è necessario accedere al codice dell'oggetto, che deve essere un oggetto creato in Visual Basic con la proprietà Persistable impostata su True. Inoltre Class deve essere Public o Public Createable e essere incluso in un progetto DLL ActiveX, EXE ActiveX o UserControl.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Nome di proprietà non valido.
Nome di proprietà non valido

Cause e soluzioni dell'errore:

•	Il nome specificato per la proprietà non è valido, ovvero è già in uso, riservato per il sistema oppure contiene caratteri non validi.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


'~' è un componente a thread singolo e non può essere utilizzato in progetti di tipo multithread. Modificare il modello di threading in '~' oppure contattare il produttore del componente per richiedere una versione aggiornata.
'~' è un componente a thread singolo e non può essere utilizzato in progetti di tipo multithreading. Modificare il modello di threading in '~' oppure contattare il produttore del componente per richiedere una versione aggiornata.

Cause e soluzioni dell'errore:

•	Si è cercato di utilizzare un componente a thread singolo in un progetto di tipo multithreading.

È possibile modificare il modello di threading per il componente a thread singolo oppure richiedere una versione aggiornata del componente al produttore.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile caricare il controllo 'elemento1' da 'elemento2'. La versione di 'elemento2' disponibile potrebbe non essere aggiornata. Verificare che la versione del controllo utilizzata corrisponda a quella fornita con l'applicazione.

Cause e soluzioni dell'errore:

•	Si sta utilizzando una versione non aggiornata.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile attivare il controllo 'elemento1'. Il controllo potrebbe non essere compatibile con l'applicazione. Verificare che la versione del controllo utilizzata corrisponda a quella fornita con l'applicazione.

Cause e soluzioni dell'errore:

•	Nell'applicazione non è stato possibile attivare il controllo specificato nel messaggio in quanto è incompatibile con l'applicazione. Questo problema si verifica quando la versione del controllo installata nel sistema è diversa da quella fornita con l'applicazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Le informazioni sul tipo della finestra di progettazione ActiveX non corrispondono a quelle salvate. Impossibile caricare.

Cause e soluzioni dell'errore:

•	Non è stato possibile caricare il progetto perché le informazioni sul tipo specificate nella finestra di progettazione ActiveX non corrispondono a quelle salvate. La causa di questo problema potrebbe essere un file danneggiato.

Caricare un copia di backup del progetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Questo tipo di interazione tra componenti compilati e componenti dell'ambiente di sviluppo non è supportato.

Cause e soluzioni dell'errore:

•	Questo problema si verifica quando sono in esecuzione due componenti di cui uno, ad esempio un form o un oggetto UserControl, è stato compilato in precedenza ed è ora eseguito utilizzando il componente di runtime (msvbvm60.dll), mentre l'altro componente, ad esempio un UserControl compilato, è in esecuzione nell'IDE.

La causa del problema è una leggera differenza tra la struttura della memoria interna di un elemento in esecuzione nell'IDE e quella di un oggetto compilato. Le due strutture inoltre non sono sempre compatibili. In generale tuttavia ciò non comporta alcun problema a meno che non venga passata un'istanza di un oggetto UserControl (Me) a un form host o a un altro componente tramite una routine Property o Sub.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile stampare l'immagine del form ridotto a icona.
Impossibile stampare l'immagine del form ridotto a icona

Cause e soluzioni dell'errore:

•	Non è possibile stampare l'immagine di un form ridotto a icona.

Ingrandire l'immagine e rieseguire l'operazione di stampa.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Errore imprevisto nel generatore del codice o nel linker

Cause e soluzioni dell'errore:

•	Si è verificato un errore imprevisto nel generatore del codice o nel linker.

Fare clic su Sì per visualizzare gli errori nel Blocco note.

La causa più frequente di questo errore è una quantità ridotta di spazio su disco oppure altri problemi relativi al disco.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


I numeri di versione devono essere inclusi nell'intervallo da 0 a 9999

Cause e soluzioni dell'errore:

•	Nella scheda Crea della finestra di dialogo Proprietà progetto si è cercato di assegnare un numero negativo, un carattere non numerico o un numero maggiore di 9999 come numero di versione principale, secondario o di revisione di un progetto. Specificare un numero compreso tra 0 e 9999 inclusi.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Indirizzo di base non valido

È stato specificato un indirizzo di base non valido. Causa e soluzione dell'errore:

•	Nella scheda Compila della finestra di dialogo Proprietà progetto è stato specificato un valore non valido per l'opzione dell'indirizzo di base.

Il valore dell'indirizzo di base deve essere un multiplo di 64 KB, nonché essere maggiore di 64 KB e minore di &H7FFF0000.

Questo errore si verifica nei progetti DLL ActiveX o controllo ActiveX.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Non è stato individuato un modulo di classe pubblico creabile. Premere F1 per ulteriori informazioni.

Cause e soluzioni dell'errore:

•	Il progetto deve includere almeno un componente creabile pubblico.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile registrare il file '~' come componente ActiveX

Cause e soluzioni dell'errore:

•	Si è cercato di registrare un controllo o libreria a collegamento dinamico (.dll) che non corrisponde a un componente ActiveX valido. Verificare che il controllo o la DLL in uso siano corretti. Per ulteriori informazioni, contattare il produttore del componente ActiveX.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il file di progetto '~1' contiene il valore di chiave '~2' non valido

Cause e soluzioni dell'errore:

•	Il file di progetto Visual Basic (.vbp) contiene una chiave non riconosciuta in Visual Basic. Il file potrebbe essere danneggiato.

Installare un copia di backup del file specificato o modificare il file in un editor di testo in modo da correggere l'errore.

Avviso   Con la modifica di un file Visual Basic in un editor diverso da Visual Basic è possibile danneggiare il file. L'operazione deve pertanto essere eseguita soltanto da utenti esperti.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile visualizzare la Guida

Cause e soluzioni dell'errore:

•	Se si esegue WinHelp, l'applicazione della Guida di Windows non sarà disponibile. Se Winhelp.exe è installato nel computer in uso, verificare che sia specificato nel percorso. In caso contrario, installare il file eseguendo l'installazione di Microsoft Windows 9x o Microsoft Windows NT.

•	Se si esegue HTMLHelp e HH.exe è installato nel computer in uso, verificare che sia specificato nel percorso. Se invece il file non è disponibile nel computer, per poter visualizzare la Guida è necessario installarlo.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Classe non registrata. '~1'

Cause e soluzioni dell'errore:

•	Il modulo di classe specificato nel messaggio non è registrato.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


La stringa di ID programmatico '~' è troppo lunga. Sono ammessi al massimo 39 caratteri-
La stringa di ID programmatico '~' è troppo lunga. Sono ammessi al massimo 39 caratteri.

Cause e soluzioni dell'errore:

•	La stringa di ID programmatico del componente ActiveX deve essere composta da un massimo di 39 caratteri. L'ID programmatico viene creato tramite il concatenamento del nome del progetto con il nome del modulo di classe.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il progetto '~' è stato modificato. Salvare le modifiche ora?

Cause e soluzioni dell'errore:

•	Una delle impostazioni di proprietà o un'istruzione del codice di uno o più file del progetto è stata modificata e le modifiche non sono state salvate. Questa è l'ultima possibilità di salvataggio prima di caricare un altro progetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile aggiornare il tipo di caricamento per '~'. Il problema è causato dalle autorizzazioni correnti per il registro di configurazione.

Cause e soluzioni dell'errore:

•	In Visual Basic non è possibile caricare l'aggiunta che si è cercato di selezionare dall'elenco delle aggiunte disponibili nella finestra di dialogo Gestione aggiunte. L'aggiunta non è stata registrata correttamente oppure non è più registrata nel registro di configurazione del sistema.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Componente registrato non correttamente

Cause e soluzioni dell'errore:

•	Il componente specificato nel messaggio non è stato registrato correttamente.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile trovare il componente nella posizione registrata

Cause e soluzioni dell'errore:

•	Non è stato possibile trovare il file eseguile (.exe) o la libreria a collegamento dinamico (.dll) richiesti.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il componente non ha creato correttamente l'oggetto richiesto

Cause e soluzioni dell'errore:

•	Il file eseguibile (.exe) del componente ActiveX non è stato eseguito correttamente.

È possibile che si sia verificato un problema a livello delle informazioni del registro di configurazione.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Il componente '~' o una delle relative dipendenze non sono registrati correttamente. Un file non è stato trovato o non è valido.

Cause e soluzioni dell'errore:

•	Il file specificato nel messaggio è stato spostato o eliminato.

•	Il file non è stato registrato correttamente.

Reinstallare il file in modo da registrarlo correttamente. Per ulteriori informazioni, contattare il produttore dell'oggetto.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Per questa funzionalità è necessario Internet Explorer '~' o versione successiva. È possibile scaricare la versione più recente dal sito Web all'indirizzo www.microsoft.com/italy.

Cause e soluzioni dell'errore:

•	Per poter eseguire questa funzionalità in modo corretto, è necessario che sia installata la versione di Internet Explorer specificata nel messaggio.

Verificare qual è la versione di Internet Explorer più aggiornata Nel sito http://www.microsoft.com/italy.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Un form non può essere spostato o ridimensionato se ingrandito o ridotto a icona

Cause e soluzioni dell'errore:

•	Si è cercato di spostare o ridimensionare un form ridotto a icona o ingrandito, operazione non valida.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile visualizzare form non a scelta obbligatoria se è già visualizzato un form a scelta obbligatoria

Cause e soluzioni dell'errore:

•	Si è cercato di visualizzare un form non a scelta obbligatoria prima di chiudere un form a scelta obbligatoria.

Chiudere il form a scelta obbligatoria.

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Impossibile eseguire le istruzioni ReDim e Erase o un'istruzione di assegnazione per una variabile Variant che contiene una matrice il cui elemento è l'oggetto specificato nell'istruzione With

Cause e soluzioni dell'errore:

•	Si è cercato di eseguire le istruzioni ReDim e Erase o di assegnare una variabile Variant il cui elemento è un oggetto With.

Questo errore viene generato ad esempio dal codice seguente:

Type Test

Name as Integer

End Type

Sub Main()

Dim c(0) As Test

Dim e

e = c

With e(0)

ReDim e(1)

End With

End Sub

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Progetto non visualizzabile

Cause e soluzioni dell'errore:

•	Il progetto che si è cercato di visualizzare è bloccato.

Per informazioni sulla procedura per rendere un progetto visualizzabile, consultare la Guida dell'applicazione host .

Per ulteriori informazioni, selezionare l'elemento desiderato e premere F1 (in Windows) oppure AIUTO (in Macintosh).


Esempio di eventi Activate e Deactivate

In questo codice di esempio vengono utilizzati due form UserForm definiti dall'utente: UserForm1 e UserForm2. Copiare queste routine nel modulo UserForm1, quindi aggiungere UserForm2. La didascalia di UserForm1 viene creata nella relativa routine di eventi Activate. Quando si fa clic sull'area client di UserForm1, UserForm2 verrà caricato e visualizzato, mentre verrà generato l'evento Deactivate di UserForm1, e le relative didascalie saranno modificate.

' Genera l'evento Activate per UserForm1

Private Sub UserForm_Activate()

    UserForm1.Caption = "Fare clic sull'area client"

End Sub

' Evento Click di UserForm1

Private Sub UserForm_Click()

    Load UserForm2

    UserForm2.StartUpPosition = 3

    UserForm2.Show

End Sub

' Evento Deactivate di UserForm1

Private Sub UserForm_Deactivate()

    UserForm1.Caption = "UserForm1 ha perso lo stato attivo"

    UserForm2.Caption = "Lo stato attivo è stato spostato da UserForm1 a UserForm2"

End Sub


Esempio di evento Initialize

In questo codice di esempio si parte dal presupposto che in un programma siano presenti due form UserForm. Nell'evento Initialize di UserForm1, viene caricato e visualizzato UserForm2. Quando si fa clic su UserForm2, il form viene nascosto e appare UserForm1. Quando si fa clic su UserForm1, viene visualizzato di nuovo UserForm2.

' Questa è la routine di eventi Initialize per

' UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Questo è l'evento Click di UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Questo è l'evento Click di UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Esempio di evento QueryClose

In questo codice di esempio l'utente viene forzato a fare clic sull'area client del form UserForm per chiuderlo. Se l'utente cerca di utilizzare la casella di chiusura sulla barra del titolo, il parametro Cancel viene impostato su un valore diverso da zero impedendo la chiusura. Se, tuttavia, l'utente ha fatto clic sull'area client, a CloseMode viene assegnato il valore 1 e Unload Me viene completata.

Private Sub UserForm_Activate()

    UserForm1.Caption = "È necessario fare clic per chiudere questo form"

End Sub

Private Sub UserForm_Click()

  Unload Me

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    'Impedisce all'utente di chiudere il form con la

    'casella di chiusura sulla barra del titolo.

    If CloseMode <> 1 Then Cancel = 1

    UserForm1.Caption = "La casella di chiusura non funzionerà. Fare clic su questo form"

End Sub


Esempio di evento Resize

Nell'esempio seguente gli eventi Activate e Click vengono utilizzati per illustrare l'attivazione dell'evento Resize per il form UserForm. Quando si fa clic sull'area client del form, esso viene ingrandito o ridotto e la nuova altezza viene visualizzata nella barra del titolo. Si noti che, per memorizzare l'altezza iniziale del form UserForm, viene utilizzata la proprietà Tag.

' Evento Activate di UserForm1

Private Sub UserForm_Activate()

UserForm1.Caption = "Fare clic su questo form per aumentarne l'altezza"

Tag = Height	' Salva l'altezza iniziale.

End Sub

' Evento Click di UserForm1

Private Sub UserForm_Click()

Dim NewHeight As Single

NewHeight = Height

' Se il form è piccolo, aumenta l'altezza.

If NewHeight = Val(Tag) Then

Height = Val(Tag) * 2

Else

' Se il form è alto, diminuisce l'altezza.

Height = Val(Tag)

End If

End Sub

' Evento Resize di UserForm1

Private Sub UserForm_Resize()

UserForm1.Caption = "Nuova altezza: " & Height & "  " & "Fare clic per modificare la dimensione di questo form"

End Sub


Esempio di evento Terminate

Le seguenti routine di eventi provocano l'emissione di un segnale acustico che dura alcuni secondi in un form UserForm, dopo che l'utente ha fatto clic sull'area client per chiudere il form.

Private Sub UserForm_Activate()

    UserForm1.Caption = "Fare clic su questo form per chiuderlo"

End Sub

Private Sub UserForm_Click()

  Unload Me

End Sub

Private Sub UserForm_Terminate()

    Dim Count As Integer

    For Count = 1 To 100

        Beep

    Next

End Sub


Eventi Activate e Deactivate

L'evento Activate viene generato quando un oggetto diventa la finestra attiva. L'evento Deactivate viene generato quando un oggetto non è più la finestra attiva.

Sintassi

Private Sub oggetto_Activate()

Private Sub oggetto_Deactivate()

Il segnaposto oggetto rappresenta un'espressione oggetto che definisce un oggetto dell'elenco "Si applica a".

Osservazioni

Un oggetto può diventare attivo utilizzando il metodo Show nel codice.

L'evento Activate può essere generato solo quando un oggetto è visibile. Un oggetto UserForm caricato con il metodo Load non è visibile a meno che non venga utilizzato il metodo Show.

Gli eventi Activate e Deactivate vengono generati solo quando viene spostato lo stato attivo in un'applicazione. Lo spostamento dello stato attivo da o su un oggetto di un'altra applicazione non genera nessuno dei due eventi.

L'evento Deactivate non viene generato quando si scarica un oggetto.


Evento Initialize

Viene generato quando si carica un oggetto, ma prima che venga visualizzato.

Sintassi

Private Sub oggetto_Initialize()

Il segnaposto oggetto rappresenta un'espressione oggetto che definisce un oggetto dell'elenco "Si applica a".

Osservazioni

L'evento Initialize viene in genere utilizzato per predisporre un'applicazione o un oggetto UserForm all'utilizzo. Alle variabili vengono assegnati valori iniziali ed è possibile spostare o ridimensionare i controlli per consentire l'inserimento dei dati di inizializzazione.


Evento QueryClose

Viene generato prima che un oggetto UserForm venga chiuso.

Sintassi

Private Sub UserForm_QueryClose(cancel As Integer, closemode As Integer)

La sintassi dell'evento QueryClose è composta dalle seguenti parti:

Parte	Descrizione
cancel	Intero. Se questo argomento viene impostato su un valore diverso da 0, l'evento QueryClose viene interrotto in tutti i form caricati, impedendo che l'oggetto UserForm o l'applicazione vengano chiusi.
closemode	Valore o costante che indica la causa che ha generato l'evento QueryClose.
Valori restituiti

L'argomento closemode restituisce i seguenti valori:

Contante	Valore	Descrizione
vbFormControlMenu	0	È stato scelto il comando Chiudi dal menu di controllo dell'oggetto UserForm.
vbFormCode	1	L'istruzione Unload viene richiamata dal codice.
vbAppWindows	2	La sessione corrente dell'ambiente operativo Microsoft Windows è conclusa. (Solo in Visual Basic 5.0).
vbAppTaskManager	3	L'applicazione è stata chiusa tramite Task Manager di Microsoft Windows. (Solo in Visual Basic 5.0).
Queste costanti sono elencate nella libreria degli oggetti di Visual Basic, Applications Edition nel Visualizzatore oggetti. Si noti che nel Visualizzatore oggetti è inoltre specificata la costante vbFormMDIForm, sebbene non sia ancora supportata.

Osservazioni

Questo evento viene in genere utilizzato per verificare che non vi siano operazioni non completate nei form prima che un'applicazione venga chiusa. Se, ad esempio, i dati di un oggetto UserForm non sono stati salvati, verrà visualizzato un messaggio in cui si chiede di salvare i dati.

Quando un'applicazione viene chiusa, è possibile utilizzare la routine di eventi QueryClose per impostare la proprietà Cancel su True e interrompere quindi il processo di chiusura dell'applicazione.


Evento Resize

Viene generato non appena un form utente viene ridimensionato.

Sintassi

Private Sub UserForm_Resize()

Osservazioni

La routine di eventi Resize consente di spostare o ridimensionare i controlli quando l'oggetto UserForm principale viene ridimensionato, nonché di ricalcolare le variabili o le proprietà.


Evento Terminate (Visual Basisc, Applications Edition)
Evento Terminate

Viene generato quando tutti i riferimenti a un'istanza di un oggetto vengono rimossi dalla memoria impostando su Nothing tutte le variabili che fanno riferimento all'oggetto o quando l'ultimo riferimento all'oggetto non è incluso nell'area di validità.

Sintassi

Private Sub oggetto_Terminate( )

Il segnaposto oggetto rappresenta un'espressione oggetto che definisce un oggetto dell'elenco "Si applica a".

Osservazioni

L'evento Terminate viene generato dopo aver scaricato l'oggetto e non viene generato se le istanze dell'oggetto UserForm o della classe sono state rimosse dalla memoria a causa di un'interruzione anomala dell'applicazione. Ad esempio, se l'applicazione esegue l'istruzione End prima di rimuovere dalla memoria tutte le istanze esistenti della classe o dell'oggetto UserForm, l'evento Terminate non verrà generato per tale classe od oggetto UserForm.


Esempio di metodo Hide

In questo esempio si parte dal presupposto che nel programma vi siano due form UserForm. Nell'evento Initialize di UserForm1, viene caricato e visualizzato UserForm2. Quando l'utente fa clic su UserForm2, il form viene nascosto e viene visualizzato UserForm1. Quando l'utente fa clic su UserForm1, viene visualizzato di nuovo UserForm2.

' Questa è la routine di eventi Initialize di UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Questo è l'evento Click di UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Questo è l'evento Click di UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Esempio di istruzione Load

In questo esempio il form UserForm2 viene caricato durante l'evento Initialize di UserForm1. Se in seguito viene fatto clic su UserForm2, verrà visualizzato UserForm1.

' Questa è la routine di eventi Initialize di UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

'Questo è l'evento Click di UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

'Questo è l'evento Click di UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Esempio di metodo PrintForm

In questo esempio viene stampata l'area client del form quando l'utente fa clic su di esso.

'Questo è l'evento Click di UserForm1

Private Sub UserForm_Click()

UserForm1.PrintForm

End Sub


Esempio di metodo Show

In questo esempio si parte dal presupposto che nel programma vi siano due form UserForm. Nell'evento Initialize di UserForm1, viene caricato e visualizzato UserForm2. Quando l'utente fa clic su UserForm2, il form viene nascosto e viene visualizzato UserForm1. Quando l'utente fa clic su UserForm1, viene visualizzato di nuovo UserForm2.

' Questa è la routine di eventi Initialize di UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Questo è l'evento Click di UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Questo è l'evento Click di UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Esempio di istruzione Unload

In questo esempio si parte dal presupposto che nel programma vi siano due form UserForm. Nell'evento Initialize di UserForm1, viene caricato e visualizzato UserForm2. Quando l'utente fa clic su UserForm2, il form viene scaricato e viene visualizzato UserForm1. Quando l'utente fa clic su UserForm1, anch'esso verrà scaricato.

' Questa è la routine di eventi Initialize di UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Questo è l'evento Click di UserForm2

Private Sub UserForm_Click()

Unload UserForm2

End Sub

' Questo è l'evento Click di UserForm1

Private Sub UserForm_Click()

Unload UserForm1

End Sub


Esempio di metodo WhatsThisMode

In questo esempio la forma del puntatore del mouse viene modificata nella forma specifica del puntatore della Guida rapida (punto interrogativo) quando l'utente fa clic sul form UserForm. Se nella finestra Proprietà non sono state impostate le proprietà WhatsThisHelp o WhatsThisButton su True, la seguente chiamata non avrà alcun effetto.

Private Sub UserForm_Click()

' Trasforma il puntatore del mouse nel puntatore con il punto interrogativo della Guida rapida.

WhatsThisMode

End Sub


Metodo Hide

Nasconde un oggetto senza scaricarlo.

Sintassi

oggetto.Hide

Il segnaposto oggetto rappresenta un'espressione oggetto che definisce un oggetto dell'elenco "Si applica a". Se oggetto viene omesso, verrà utilizzato l'oggetto UserForm che ha lo stato attivo.

Osservazioni

Un oggetto nascosto non viene visualizzato sullo schermo e la sua proprietà Visible è impostata su False. I controlli di un oggetto nascosto non sono accessibili per l'utente ma sono disponibili per l'applicazione in esecuzione, per altri processi che possono comunicare con l'applicazione tramite l'automazione e, in Windows, per gli eventi del controllo Timer.

Quando un oggetto UserForm è nascosto, l'utente non può interagire con l'applicazione fino a quando non è stato eseguito interamente il codice della routine di eventi che ha determinato la disattivazione della visualizzazione dell'oggetto UserForm.

Se l'oggetto UserForm non è caricato al momento dell'esecuzione del metodo Hide, l'oggetto UserForm verrà caricato ma non visualizzato.


Istruzione Load

Carica in memoria un oggetto senza visualizzarlo.

Sintassi

Load oggetto

Il segnaposto oggetto rappresenta un'espressione oggetto che definisce un oggetto dell'elenco "Si applica a".

Osservazioni

Quando un oggetto viene caricato, viene posizionato nella memoria, ma non è visibile. Per visualizzarlo, è possibile utilizzare il metodo Show. Fino a quando un oggetto non è visibile, non è possibile per l'utente interagire con esso. L'oggetto può essere gestito a livello di programmazione all'interno della relativa routine di eventi Initialize.


Metodo PrintForm

Invia alla stampante un'immagine bit per bit di un oggetto UserForm.

Sintassi

oggetto.PrintForm

Il segnaposto oggetto rappresenta un'espressione oggetto che definisce un oggetto dell'elenco "Si applica a". Se oggetto viene omesso, verrà utilizzato l'oggetto UserForm che ha lo stato attivo.

Osservazioni

PrintForm stampa tutti gli oggetti visibili e le bitmap dell'oggetto UserForm. PrintForm stampa inoltre gli elementi grafici aggiunti ad un oggetto UserForm.

La stampante utilizzata da PrintForm è determinata dalle impostazioni del Pannello di controllo del sistema operativo.


Metodo Show

Visualizza un oggetto UserForm.

Sintassi

[oggetto.]Show sceltaObbl

La sintassi del metodo Show è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Facoltativo. Espressione oggetto che definisce un oggetto dell'elenco "Si applica a". Se viene omesso, verrà utilizzato l'oggetto UserForm associato al modulo dell'oggetto UserForm attivo
sceltaObbl	Facoltativa. Valore booleano che determina se l'oggetto UserForm è a scelta obbligatoria oppure non a scelta obbligatoria.
Impostazioni

I possibili valori di sceltaObbl sono:

Costante	Valore	Descrizione
vbModal	1	UserForm è a scelta obbligatoria. Impostazione predefinita.
vbModeless	0	UserForm è non a scelta obbligatoria.
Osservazioni

Se l'oggetto specificato non è caricato al momento dell'esecuzione del metodo Show, verrà caricato automaticamente.

Nota   In Microsoft Office 97, se si imposta un oggetto UserForm come oggetto non a scelta obbligatoria, viene generato un errore di run-time. In Office 97 infatti gli oggetti UserForms sono sempre a scelta obbligatoria.

Quando viene visualizzato un oggetto UserForm, gli altri form dell'applicazione sono disattivati, ma non lo sono le altre applicazioni.


Istruzione Unload

Scarica un oggetto dalla memoria.

Sintassi

Unload oggetto

Il segnaposto obbligatorio oggetto rappresenta un'espressione oggetto che definisce un oggetto dell'elenco "Si applica a".

Osservazioni

Quando un oggetto viene scaricato dalla memoria, tutta la memoria associata all'oggetto viene riutilizzata. Fino a quando l'oggetto non viene caricato di nuovo in memoria utilizzando l’istruzione Load, non sarà possibile interagire con esso e nemmeno gestirlo a livello di programmazione.


Metodo WhatsThisMode

L'attivazione di questo metodo fa sì che il puntatore del mouse assuma la forma specifica del puntatore della Guida rapida e che l'applicazione venga predisposta per la visualizzazione della Guida rapida relativa all'oggetto selezionato. Questo metodo esiste anche in Macintosh, ma non fornisce la funzionalità relativa al puntatore.

Sintassi

oggetto.WhatsThisMode

Il segnaposto oggetto rappresenta un'espressione oggetto che definisce un oggetto dell'elenco "Si applica a". Se oggetto viene omesso, verrà utilizzato l'oggetto UserForm che ha lo stato attivo.

Osservazioni

L'esecuzione del metodo WhatsThisMode pone l'applicazione nello stesso stato ottenibile facendo clic sul pulsante Guida rapida sulla barra del titolo. Il puntatore del mouse assume la forma specifica del puntatore della Guida rapida. Quando l'utente fa clic su un oggetto, la proprietà WhatsThisHelpID dell'oggetto sul quale è stato fatto clic viene utilizzata per attivare la Guida in linea sensibile al contesto.


Oggetto UserForm, insieme UserForms

L'oggetto UserForm è una finestra o una finestra di dialogo che fa parte dell'interfaccia utente dell'applicazione.

L'insieme UserForms è costituito da elementi che rappresentano i vari oggetti UserForm caricati in un'applicazione. Per l'insieme UserForms sono disponibili la proprietà Count, la proprietà Item e il metodo Add. La proprietà Count specifica il numero di elementi dell'insieme, la proprietà Item (il membro predefinito) definisce un membro dell'insieme specifico e il metodo Add consente di inserire un nuovo elemento UserForm nell'insieme.

Sintassi

UserForm

UserForms[.Item](indice)

Il segnaposto indice rappresenta un numero intero compreso tra 0 e UserForms.Count – 1. Item è il membro predefinito dell'insieme UserForms e non è necessario specificarlo.

Osservazioni

È possibile utilizzare l'insieme UserForms per passare in rassegna tutti i form caricati dell'applicazione. L'insieme identifica una variabile globale intrinseca denominata UserForms. È possibile passare UserForms(indice) a una funzione il cui argomento è specificato come classe UserForm.

Per i form utente sono disponibili proprietà che determinano l'aspetto del form, come la posizione, le dimensioni e il colore e proprietà che determinano invece gli aspetti funzionali.

I form utente possono rispondere a eventi generati dall'utente o dal sistema. È possibile, ad esempio, scrivere del codice nella routine di eventi Initialize dell'oggetto UserForm per inizializzare le variabili a livello di modulo prima che l'oggetto UserForm venga visualizzato.

Per la gestione di form attraverso il codice, oltre a proprietà ed eventi, è possibile utilizzare anche metodi. Il metodo Move consente, ad esempio, di modificare la posizione e le dimensioni di un oggetto UserForm.

Durante la progettazione di form, impostare la proprietà BorderStyle se si desidera definire un bordo per il form e la proprietà Caption e si desidera inserire testo nella barra del titolo. Nel codice, è possibile utilizzare i metodi Hide e Show per rendere un oggetto UserForm visibile o invisibile in fase di esecuzione.

L'oggetto UserForm è un tipo di dati Object. È possibile dichiarare variabili come tipo UserForm prima di impostare le variabili su un'istanza di un tipo di UserForm dichiarato in fase di progettazione. In modo analogo, è possibile passare un argomento a una routine come tipo UserForm. È possibile creare più istanze di form nel codice utilizzando la parola chiave New in istruzioni Dim, Set e Static.

È possibile accedere all'insieme dei controlli di un oggetto UserForm tramite l'insieme Controls. Per nascondere, ad esempio, tutti i controlli di un oggetto UserForm, è possibile utilizzare il seguente codice:

For Each Control in UserForm1.Controls

Control.Visible = False

Next Control


Esempio di proprietà StartUpPosition

In questo esempio l'istruzione Load e il metodo Show vengono utilizzati nell'evento Click di UserForm1 per caricare UserForm2 mentre la proprietà StartUpPosition è impostata su 3 (la posizione predefinita di Windows). Il metodo Show rende quindi visibile UserForm2.

Private Sub UserForm_Click()

Load UserForm2

UserForm2.StartUpPosition = 3

UserForm2.Show

End Sub


Proprietà StartUpPosition

Restituisce o imposta un valore che specifica la posizione di un oggetto UserForm visualizzato per la prima volta.

Le possibili impostazioni della proprietà StartUpPosition sono quattro:

Impostazione	Valore	Descrizione
Manual	0	Non è specificato alcun valore iniziale.
CenterOwner	1	Centra l'oggetto UserForm sull'elemento a cui esso appartiene.
CenterScreen	2	Centra l'oggetto sull'intero schermo.
WindowsDefault	3	Posiziona l'oggetto nell'angolo superiore sinistro dello schermo.
Osservazioni

È possibile impostare la proprietà StartUpPosition a livello di programmazione oppure dalla finestra Proprietà.


Proprietà WhatsThisButton

Restituisce un valore Boolean che determina se il pulsante Guida rapida viene visualizzato sulla barra del titolo di un oggetto UserForm. Di sola lettura in fase di esecuzione. Proprietà non valida per Macintosh.

Impostazioni

Le possibili impostazioni della proprietà WhatsThisButton sono:

Impostazione	Descrizione
True	Attiva la visualizzazione del pulsante Guida rapida.
False	(Predefinita) Disattiva la visualizzazione del pulsante Guida rapida.
Osservazioni

Perché la proprietà WhatsThisButton sia True, la proprietà WhatsThisHelp deve essere True.


Proprietà WhatsThisHelp

Restituisce un valore Boolean che determina se la Guida sensibile al contesto utilizza la finestra popup disponibile in Windows 95 oppure la finestra principale della Guida. Di sola lettura in fase di esecuzione. Proprietà non valida per Macintosh.

Impostazioni

Le possibili impostazioni della proprietà WhatsThisHelp sono:

Impostazione	Descrizione
True	L'applicazione utilizza una delle tecniche di accesso alla Guida rapida per l'avvio della Guida di Windows e il caricamento di un argomento identificato dalla proprietà WhatsThisHelpID.
False	(Predefinita) L'applicazione utilizza il tasto F1 per avviare la Guida di Windows e caricare l'argomento identificato dalla proprietà HelpContextID.
Osservazioni

Esistono due tecniche di accesso per l'attivazione della Guida rapida in un'applicazione. Perché queste tecniche funzionino, la proprietà WhatsThisHelp deve essere impostata su True.

•	Inserimento di un pulsante Guida rapida sulla barra del titolo dell'oggetto UserForm tramite la proprietà WhatsThisButton. Il puntatore del mouse assume lo stato Guida rapida (freccia con punto interrogativo). L'argomento visualizzato viene identificato dalla proprietà WhatsThisHelpID del controllo sul quale è stato fatto clic.

•	Attivazione del metodo WhatsThisMode di un oggetto UserForm. Consente di ottenere gli stessi risultati del pulsante Guida rapida senza la necessità di utilizzare un pulsante. Il metodo può essere richiamato, ad esempio, da un comando posto su un menu della barra dei menu dell'applicazione.


Proprietà ShowModal

Consente di impostare la visualizzazione a scelta obbligatoria o non a scelta obbligatoria di un oggetto UserForm. Di sola lettura in fase di esecuzione.

Osservazioni

Le possibili impostazioni della proprietà ShowModal sono:

Impostazione	Descrizione
True	(Predefinita) L'oggetto UserForm è a scelta obbligatoria.
False	L'oggetto UserForm è non a scelta obbligatoria.
Osservazioni

Quando un oggetto UserForm è a scelta obbligatoria, per poter utilizzare altre parti dell'applicazione, è necessario che l'utente fornisca informazioni oppure chiuda l'oggetto UserForm. Fino a quando l'oggetto UserForm non è stato nascosto o scaricato, non viene eseguito alcun codice. Quando un oggetto UserForm è visualizzato risultano disattivati altri form dell'applicazione, ma non altre applicazioni.

Quando un oggetto UserForm è non a scelta obbligatoria, l'utente può visualizzare altri form o finestre senza dover chiudere l'oggetto.

I form non a scelta obbligatoria non vengono visualizzati nella barra delle applicazioni e non sono inclusi nell'ordine di tabulazione della finestra.

Nota   Se si apre un oggetto UserForm a cui è associata una proprietà ShowModal in Microsoft Office 97, viene generato un errore di run-time in quanto in Office 97 è supportata soltanto la visualizzazione di oggetti UserForm a scelta obbligatoria. In Office 97 la proprietà ShowModal viene ignorata e l'oggetto UserForm viene visualizzato come form a scelta obbligatoria.


Proprietà RightToLeft

Restituisce un valore booleano che indica la direzione di visualizzazione del testo e controlla l'aspetto grafico in un sistema bidirezionale.

Osservazioni

Le possibili impostazioni della proprietà RightToLeft sono:

Impostazione	Descrizione
True	Il controllo viene eseguito in una piattaforma bidirezionale, ad esempio in Windows95 arabo o ebraico, e il testo scorre da destra a sinistra. Il comportamento del controllo risulta modificato, ad esempio le barre di scorrimento verticali vengono inserite a sinistra del testo o delle caselle di riepilogo e le etichette vengono inserite a destra delle caselle di testo.
False	Il controllo funziona come se fosse eseguito in una piattaforma non bidirezionale, ad esempio in Windows95 inglese, e il testo scorre da sinistra a destra. Se il contenitore non implementa questa proprietà, l'impostazione predefinita è False.
La proprietà RightToLeft include le informazioni dell'oggetto UserForm che indicano il comportamento dei controlli contenuti nell'oggetto. Si tratta di una proprietà booleana che indica la direzione di visualizzazione del testo e controlla l'aspetto grafico in un sistema bidirezionale. L'impostazione predefinita è False.


Impossibile trovare la parola chiave

Impossibile trovare la parola chiave specificata nella Guida di Visual Basic. È possibile che la parola chiave sia stata digitata in modo errato, che si sia selezionato troppo o poco testo o che si siano richieste informazioni della Guida su una parola che non è una parola chiave valida in Visual Basic.

È possibile che la parola chiave per cui si desiderano informazioni sia contenuta in una libreria degli oggetti per la quale non sono stati impostati riferimenti. Accertarsi che per tutti gli oggetti utilizzati nel codice siano stati impostati i riferimenti alle librerie degli oggetti appropriate.

Il metodo più rapido per visualizzare informazioni della Guida su una parola chiave specifica consiste nel posizionare il punto di inserimento in un punto qualsiasi della parola chiave e quindi premere F1. Non è necessario selezionare la parola chiave. Se si seleziona solo parte della parola chiave o altre parti di testo, non sarà infatti possibile individuare le informazioni desiderate nella Guida.

L'argomento relativo alla proprietà Value viene visualizzato quando si preme F1 con il punto di inserimento posizionato tra la "a" e la "l" nella parola chiave Value come indicato nell'esempio successivo.

Worksheets(1).Range ("A2").value=3.14159

Per utilizzare la finestra di dialogo predefinita di ricerca, scegliere Guida di Microsoft Visual Basic dal menu ?.


Collection (Visualizzatore oggetti)

Il modulo Collection include le routine che consentono di eseguire operazioni nell'oggetto Collection. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una routine specifica

1.	Selezionare la routine dall'elenco Membri di 'Collection'.

2.	Fare clic sul pulsante [image].


ColorConstants (Visualizzatore oggetti)

Il modulo Color Constants include le costanti di colore predefinite. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'ColorConstants'.

2.	Fare clic sul pulsante [image].


Constants (Visualizzatore oggetti)

Il modulo Constants include varie costanti. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'Constants'.

2.	Fare clic sul pulsante [image].


Conversion (Visualizzatore oggetti)

Il modulo Conversion include le routine che consentono di eseguire numerose operazioni di conversione. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una routine specifica

1.	Selezionare la routine dall'elenco Membri di 'Conversion'.

2.	Fare clic sul pulsante [image].

Nota   Quando vengono utilizzate variabili di tipo Variant, non sono necessarie conversioni di tipi di dati espliciti.


DateTime (Visualizzatore oggetti)

Il modulo DateTime include le routine e le proprietà che consentono di eseguire operazioni relative a data e ora. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una routine o proprietà specifica

1.	Selezionare la routine dall'elenco Membri di 'DateTime'.

2.	Fare clic sul pulsante [image].


ErrObject (Visualizzatore oggetti)

Il modulo ErrObject include le proprietà e le routine che consentono di identificare e gestire gli errori di run-time tramite l'oggetto Err. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una proprietà o routine specifica

1.	Selezionare la proprietà o la routine dall'elenco Membri di 'ErrObject'.

2.	Fare clic sul pulsante [image].


FileSystem (Visualizzatore oggetti)

Il modulo FileSystem include le routine che consentono di eseguire operazioni relative a file, directory o cartelle e al sistema. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una routine specifica

1.	Selezionare la routine dall'elenco Membri di 'FileSystem'.

2.	Fare clic sul pulsante [image].


Financial (Visualizzatore oggetti)

Il modulo Financial include le routine che consentono di eseguire operazioni di tipo finanziario. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una routine specifica

1.	Selezionare la routine dall'elenco Membri di 'Financial'.

2.	Fare clic sul pulsante [image].


Global (Visualizzatore oggetti)

Il modulo Global include le routine e le proprietà che consentono di eseguire operazioni nell'oggetto UserForm. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una proprietà o routine specifica

1.	Selezionare la routine dall'elenco Membri di 'Global'.

2.	Fare clic sul pulsante [image].


Information (Visualizzatore oggetti)

Il modulo Information include le routine che consentono di restituire, verificare o controllare informazioni. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una routine specifica

1.	Selezionare la routine dall'elenco Membri di 'Information'.

2.	Fare clic sul pulsante [image].


Interaction (Visualizzatore oggetti)

Il modulo Interaction include le routine che consentono di interagire con oggetti, applicazioni e sistemi. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una routine specifica

1.	Selezionare la routine dall'elenco Membri di 'Interaction'.

2.	Fare clic sul pulsante [image].


KeycodeConstants (Visualizzatore oggetti)

Il modulo KeyCodeConstants include costanti predefinite per i codici dei tasti che è possibile utilizzare in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'KeyCodeConstants'.

2.	Fare clic sul pulsante [image].


Math (Visualizzatore oggetti)

Il modulo Math include le routine che consentono di eseguire operazioni matematiche. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una routine specifica

1.	Selezionare la routine dall'elenco Membri di 'Math'.

2.	Fare clic sul pulsante [image].


Strings (Visualizzatore oggetti)

Il modulo Strings include le routine che consentono di eseguire operazioni con le stringhe. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una routine specifica

1.	Selezionare la routine dall'elenco Membri di 'Strings'.

2.	Fare clic sul pulsante [image].


SystemColorConstants (Visualizzatore oggetti)

Il modulo System ColorConstants include le costanti che identificano le varie parti dell'interfaccia grafica utente. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'SystemColorConstants'.

2.	Fare clic sul pulsante [image].


VbAppWinStyle (Visualizzatore oggetti)

L'elenco VbAppWinStyle include le costanti utilizzate dalla funzione Shell per la gestione dello stile della finestra di un'applicazione. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'VbAppWinStyle'.

2.	Fare clic sul pulsante [image].


VbCalendar (Visualizzatore oggetti)

L'elenco VbCalendar include le costanti che consentono di determinare il tipo di calendario utilizzato in Visual Basic. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'VbCalendar'.

2.	Fare clic sul pulsante [image].


VbCompareMethod (Visualizzatore oggetti)

L'elenco VbCompareMethod include le costanti che consentono di determinare la modalità di confronto delle stringhe quando vengono utilizzate le funzioni Instr e StrComp. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'VbCompareMethod'.

2.	Fare clic sul pulsante [image].


VbDayOfWeek (Visualizzatore oggetti)

L'elenco VbDayOfWeek include le costanti che consentono di identificare giorni specifici della settimana quando vengono utilizzate le funzioni DateDiff, DatePart e Weekday. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'VbDayOfWeek'.

2.	Fare clic sul pulsante [image].


VbFileAttribute (Visualizzatore oggetti)

L'elenco VbFileAttribute include le costanti che consentono di identificare gli attributi di file utilizzati nelle funzioni Dir, GetAttr e SetAttr. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'VbFileAttribute'.

2.	Fare clic sul pulsante [image].


VbFirstWeekOfYear (Visualizzatore oggetti)

L'elenco VbFirstWeekOfYear include le costanti che consentono di specificare il modo in cui viene determinata la prima settimana dell'anno quando vengono utilizzate le funzioni DateDiff e DatePart. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'VbFirstWeekOfYear'.

2.	Fare clic sul pulsante [image].


VbIMEStatus (Visualizzatore oggetti)

Disponibile solo per le versioni per i paesi orientali. L'elenco VbIMEStatus include le costanti che consentono di identificare la modalità corrente Input Method Editor (IME) quando viene utilizzata la funzione IMEStatus. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'VbIMEStatus'.

2.	Fare clic sul pulsante [image].


VbMsgBoxResult (Visualizzatore oggetti)

L'elenco VbMsgBoxResult include le costanti che consentono di specificare su quale pulsante è stato fatto clic in una finestra di messaggio visualizzata utilizzando la funzione MsgBox. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'VbMsgBoxResult'.

2.	Fare clic sul pulsante [image].


VbMsgBoxStyle (Visualizzatore oggetti)

L'elenco VbMsgBoxStyle include le costanti che consentono di specificare la modalità di funzionamento di una finestra di messaggio, nonché i simboli e i pulsanti che compaiono al suo interno, quando la finestra viene visualizzata utilizzando la funzione MsgBox. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'VbMsgBoxStyle'.

2.	Fare clic sul pulsante [image].


VbQueryClose (Visualizzatore oggetti)

L'elenco VbQueryClose include le costanti che consentono di identificare la possibile causa che ha generato l'evento QueryClose. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'VbQueryClose'.

2.	Fare clic sul pulsante [image].


VbStrConv (Visualizzatore oggetti)

L'elenco VbStrConv include le costanti che consentono di specificare il tipo di conversione di stringa che deve essere eseguita dalla funzione StrConv. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'VbStrConv'.

2.	Fare clic sul pulsante [image].


VbVarType (Visualizzatore oggetti)

L'elenco VbVarType include le costanti che consentono di specificare i vari tipi di dati che possono essere contenuti in una variabile Variant. Tali costanti corrispondono ai valori restituiti dalla funzione VarType e possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una costante specifica

1.	Selezionare la costante dall'elenco Membri di 'VbVarType'.

2.	Fare clic sul pulsante [image].


VbTriState (Visualizzatore oggetti)

L'enumerazione VbTriState definisce le costanti che consentono di identificare uno dei tre possibili stati.

Per ottenere informazioni della Guida su una routine specifica

1.	Selezionare la costante dall'elenco Membri di 'VbTriState'.

2.	Fare clic sul pulsante [image].


VbDateTimeFormat (Visualizzatore oggetti)

L'enumerazione VbDateTimeFormat definisce le costanti che consentono di identificare la modalità di formattazione di data e ora.

Per ottenere informazioni della Guida su una routine specifica

1.	Selezionare la costante dall'elenco Membri di 'VbDateTimeFormat'.

2.	Fare clic sul pulsante [image].


VbCallType (Visualizzatore oggetti)

L'enumerazione VbCallType definisce le costanti che consentono di identificare il tipo di chiamata utilizzato dalla funzione CallByName.

Per ottenere informazioni della Guida su una routine specifica

1.	Selezionare la costante dall'elenco Membri di 'VbCallType'.

2.	Fare clic sul pulsante [image].


FormShowConstants (Visualizzatore oggetti)

Il modulo FormShowConstants include le costanti predefinite di UserForm. Tali costanti possono essere utilizzate in un punto qualsiasi del codice.

Per ottenere informazioni della Guida su una routine specifica

1.	Selezionare la costante dall'elenco Membri di 'FormShowConstants'.

2.	Fare clic sul pulsante [image].


Esempio di oggetto Collection

In questo esempio viene creato l'oggetto Collection denominato MyClasses, quindi viene creata una finestra di dialogo che consente agli utenti di aggiungere oggetti all'insieme. Per eseguire l'esempio, scegliere il comando Modulo di classe dal menu Inserisci e dichiarare una variabile pubblica denominata InstanceName a livello di modulo per Class1 (digitare Public InstanceName). Tale variabile conterrà i nomi per ciascuna istanza. Lasciare come nome predefinito Class1. Copiare e incollare il codice che segue nella sezione Generale di un altro modulo, quindi avviarlo con l'istruzione ClassNamer in un'altra routine. Questo esempio è valido solo per le applicazioni host che supportano le classi.

Sub ClassNamer()

Dim MyClasses As New Collection	' Crea un oggetto Collection.

Dim Num	'Contatore per l'identificazione delle chiavi.

Dim Msg As String	' Variabile che contiene la stringa di richiesta.

Dim TheName, MyObject, NameList	' Variabili Variant di memorizzazione dati.

Do

Dim Inst As New Class1	' Crea una nuova istanza di Class1.

Num = Num + 1	' Incrementa Num, quindi legge un nome.

Msg = "Digitare un nome per l'oggetto." & Chr(13) _

 & "Fare clic su Annulla per visualizzare i nomi nell'insieme."

TheName = InputBox(Msg, "Denominare gli elementi dell'insieme")

Inst.InstanceName = TheName	' Inserisce il nome nell'istanza dell'oggetto.

' Se l'utente ha immesso un nome, lo aggiunge all'insieme.

If Inst.InstanceName <> "" Then

' Aggiunge l'oggetto denominato all'insieme.

MyClasses.Add item := Inst, key := CStr(Num)

End If

' Cancella il riferimento corrente in preparazione al successivo.

Set Inst = Nothing

Loop Until TheName = ""

For Each MyObject In MyClasses	' Crea l'elenco di nomi.

NameList = NameList & MyObject.InstanceName & Chr(13)

Next MyObject

' Visualizza l'elenco di nomi in una finestra di messaggio.

MsgBox NameList, , "Nomi di istanze nell'insieme MyClasses"

For Num = 1 To MyClasses.Count	' Rimuove il nome dall'insieme.

MyClasses.Remove 1	' Poiché l'indice degli

 insiemi viene reimpostato automaticamente,

' rimuove il primo membro

Next	' a ogni iterazione.

End Sub


Esempio di oggetto Err

In questo esempio le proprietà dell'oggetto Err vengono utilizzate per la creazione di una finestra di dialogo per un messaggio di errore. Si noti che quando viene generato un errore in Visual Basic con il metodo Raise utilizzando prima il metodo Clear i valori predefiniti di Visual Basic diventano le impostazioni delle proprietà dell'oggetto Err.

Dim Msg

' Se si verifica un errore, crea un messaggio di errore

On Error Resume Next	' Rimanda la gestione dell'errore.

Err.Clear

Err.Raise 6	' Genera un errore "Overflow".

' Verifica la presenza dell'errore, quindi visualizza il messaggio.

If Err.Number <> 0 Then

Msg = "Errore " & Str(Err.Number) & " generato da " _

& Err.Source & Chr(13) & Err.Description

MsgBox Msg, , "Errore", Err.Helpfile, Err.HelpContext

End If


Oggetto Collection

Un oggetto Collection è un insieme di elementi ordinati al quale è possibile fare riferimento come una singola unità.

Osservazioni

L'oggetto Collection rappresenta un modo semplice per fare riferimento a un gruppo di elementi correlati come se fossero una singola unità. Gli elementi, o membri, di un insieme sono correlati per il semplice fatto che si trovano nell'insieme. I membri di un insieme non devono necessariamente avere lo stesso tipo di dati.

Un insieme può essere creato in modo analogo agli altri oggetti. Ad esempio:

Dim X As New Collection

Dopo aver creato l'insieme, è possibile aggiungervi membri con il metodo Add e rimuovere membri con il metodo Remove. È possibile estrarre membri specifici dall'insieme con il metodo Item, mentre è possibile eseguire un'iterazione nell'intero insieme con l'istruzione For Each...Next.


Oggetto Debug

L'oggetto Debug viene utilizzato per inviare l'output alla finestra Immediata in fase di esecuzione.


Oggetto Err

Contiene informazioni relative a errori di run-time.

Osservazioni

Le proprietà dell'oggetto Err sono determinate dall'origine dell'errore, che può essere Visual Basic, un oggetto o il programmatore.

La proprietà predefinita dell'oggetto Err è Number. Poiché la proprietà predefinita può essere rappresentata dal nome di oggetto Err, non sarà necessario modificare il codice esistente scritto utilizzando la funzione Err o l'istruzione Err.

Quando viene generato un errore di run-time, le proprietà dell'oggetto Err vengono compilate con dati che identificano in modo univoco l'errore e con informazioni utili alla gestione dell'errore stesso. Per generare un errore di run-time nel codice, utilizzare il metodo Raise.

Le proprietà dell'oggetto Err vengono reimpostate su zero o su stringhe di lunghezza zero ("") dopo un'istruzione Exit Sub, Exit Function, Exit Property o Resume Next all'interno di una routine di gestione degli errori. Utilizzando qualsiasi tipo di istruzione Resume all'esterno di una routine di gestione degli errori, le proprietà dell'oggetto Err non vengono reimpostate. Per reimpostare Err in modo esplicito, è possibile utilizzare il metodo Clear.

Per la generazione di errori di run-time degli errori di sistema e dei moduli di classe, utilizzare il metodo Raise anziché l'istruzione Error. La scelta di utilizzare o meno il metodo Raise in altre parti del codice dipende dal grado di completezza che si desidera ottenere per le informazioni restituite.

L'oggetto Err è un oggetto intrinseco con area di validità globale. Non è necessario crearne un'istanza nel codice.


Esempio di operatore ^

In questo esempio l'operatore ^ viene utilizzato per elevare un numero alla potenza di un esponente.

Dim MyValue

MyValue = 2 ^ 2	' Restituisce 4.

MyValue = 3 ^ 3 ^ 3	' Restituisce 19683.

MyValue = (-5) ^ 3	' Restituisce -125.


Esempio di operatore +

In questo esempio l'operatore + viene utilizzato per sommare numeri. L'operatore + può inoltre essere utilizzato per concatenare le stringhe. Per evitare ambiguità, è tuttavia consigliabile utilizzare l'operatore &. Se i componenti di un'espressione creata con l'operatore + includono sia stringhe che valori numerici, verrà assegnato il risultato aritmetico. Se i componenti sono soltanto stringhe, queste verranno concatenate.

Dim MyNumber, Var1, Var2

MyNumber = 2 + 2	' Restituisce 4.

MyNumber = 4257.04 + 98112	' Restituisce 102369,04.

Var1 = "34": Var2 = 6	' Inizializza le variabili miste.

MyNumber = Var1 + Var2	' Restituisce 40.

Var1 = "34": Var2 = "6"	' Inizializza le variabili con stringhe.

MyNumber = Var1 + Var2	' Restituisce "346" (concatenamento di stringhe).


Esempio di operatore -

In questo esempio l'operatore - viene utilizzato per calcolare la differenza tra due numeri.

Dim MyResult

MyResult = 4 - 2	' Restituisce 2.

MyResult = 459.35 - 334.90	' Restituisce 124,45.


Esempio di operatore *

In questo esempio l'operatore * viene utilizzato per moltiplicare due numeri.

Dim MyValue

MyValue = 2 * 2	' Restituisce 4.

MyValue = 459.35 * 334.90 	' Restituisce 153836,315.


Esempio di operatore /

In questo esempio l'operatore / viene utilizzato per eseguire una divisione in virgola mobile.

Dim MyValue

MyValue = 10 / 4	' Restituisce 2,5.

MyValue = 10 / 3	' Restituisce 3,333333.


Esempio di operatore \

In questo esempio l'operatore \ viene utilizzato per eseguire una divisione intera.

Dim MyValue

MyValue = 11 \ 4	' Restituisce 2.

MyValue = 9 \ 3	' Restituisce 3.

MyValue = 100 \ 3	' Restituisce 33.


Esempio di operatore Mod

In questo esempio l'operatore Mod viene utilizzato per dividere due numeri e restituire solo il resto. Se uno dei numeri è decimale, verrà arrotondato all'intero.

Dim MyResult

MyResult = 10 Mod 5	' Restituisce 0.

MyResult = 10 Mod 3	' Restituisce 1.

MyResult = 12 Mod 4.3	' Restituisce 0.

MyResult = 12.6 Mod 5	' Restituisce 3.


Esempio di operatore &

In questo esempio l'operatore & viene utilizzato per forzare il concatenamento di stringhe.

Dim MyStr

MyStr = "Salve" & " gente"	' Restituisce "Salve gente".

MyStr = "Prova " & 123 & " Prova"	' Restituisce "Prova 123 Prova".


Esempio di operatori di confronto

In questo esempio vengono illustrati i vari utilizzi degli operatori di confronto, che consentono di confrontare espressioni.

Dim MyResult, Var1, Var2

MyResult = (45 < 35)	' Restituisce Falso.

MyResult = (45 = 45)	' Restituisce Vero.

MyResult = (4 <> 3)	' Restituisce Vero.

MyResult = ("5" > "4")	' Restituisce Vero.

Var1 = "5": Var2 = 4	' Inizializza le variabili.

MyResult = (Var1 > Var2)	' Restituisce Vero.

Var1 = 5: Var2 = Empty

MyResult = (Var1 > Var2)	' Restituisce Vero.

Var1 = 0: Var2 = Empty

MyResult = (Var1 = Var2)	' Restituisce Vero.


Esempio di operatore And

In questo esempio l'operatore And viene utilizzato per eseguire un collegamento logico di due espressioni.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Inizializza le variabili.

MyCheck = A > B And B > C	' Restituisce Vero.

MyCheck = B > A And B > C	' Restituisce Falso.

MyCheck = A > B And B > D	' Restituisce Nullo.

MyCheck = A And B	' Restituisce 8 (confronto bit per bit).


Esempio di operatore Eqv

In questo esempio l'operatore Eqv viene utilizzato per eseguire un'equivalenza logica tra due espressioni.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Inizializza le variabili.

MyCheck = A > B Eqv B > C	' Restituisce Vero.

MyCheck = B > A Eqv B > C	' Restituisce Falso.

MyCheck = A > B Eqv B > D	' Restituisce Nullo.

MyCheck = A Eqv B	' Restituisce -3 (confronto bit per bit).


Esempio di operatore Imp

In questo esempio l'operatore Imp viene utilizzato per eseguire un'implicazione logica di due espressioni.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Inizializza le variabili.

MyCheck = A > B Imp B > C	' Restituisce Vero.

MyCheck = A > B Imp C > B	' Restituisce Falso.

MyCheck = B > A Imp C > B	' Restituisce Vero.

MyCheck = B > A Imp C > D	' Restituisce Vero.

MyCheck = C > D Imp B > A	' Restituisce Nullo.

MyCheck = B Imp A	' Restituisce -1 (confronto bit per bit).


Esempio di operatore Not

In questo esempio l'operatore Not viene utilizzato per eseguire una negazione logica di un'espressione.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Inizializza le variabili.

MyCheck = Not(A > B)	' Restituisce Falso.

MyCheck = Not(B > A)	' Restituisce Vero.

MyCheck = Not(C > D)	' Restituisce Nullo.

MyCheck = Not A	' Restituisce -11 (confronto bit per bit).


Esempio di operatore Or

In questo esempio l'operatore Or viene utilizzato per eseguire una disgiunzione logica di due espressioni.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Inizializza le variabili.

MyCheck = A > B Or B > C	' Restituisce Vero.

MyCheck = B > A Or B > C	' Restituisce Vero.

MyCheck = A > B Or B > D	' Restituisce Vero.

MyCheck = B > D Or B > A	' Restituisce Nullo.

MyCheck = A Or B	' Restituisce 10 (confronto bit per bit).


Esempio di operatore Xor

In questo esempio l'operatore Xor viene utilizzato per eseguire un'esclusione logica di due espressioni.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null	' Inizializza le variabili.

MyCheck = A > B Xor B > C	' Restituisce Falso.

MyCheck = B > A Xor B > C	' Restituisce Vero.

MyCheck = B > A Xor C > B	' Restituisce Falso.

MyCheck = B > D Xor A > B	' Restituisce Nullo.

MyCheck = A Xor B	' Restituisce 2 (confronto bit per bit).


Esempio di operatore Like

In questo esempio l'operatore Like viene utilizzato per confrontare una stringa con una stringa modello.

Dim MyCheck

MyCheck = "aBBBa" Like "a*a"	' Restituisce Vero.

MyCheck = "F" Like "[A-Z]"	' Restituisce Vero.

MyCheck = "F" Like "[!A-Z]"	' Restituisce Falso.

MyCheck = "a2a" Like "a#a"	' Restituisce Vero.

MyCheck = "aM5b" Like "a[L-P]#[!c-e]"	' Restituisce Vero.

MyCheck = "BAT123khg" Like "B?T*"	' Restituisce Vero.

MyCheck = "CAT123khg" Like "B?T*"	' Restituisce Falso.


Esempio di operatore Is

In questo esempio l'operatore Is viene utilizzato per confrontare due riferimenti di oggetto. Tutte le variabili di oggetto utilizzate nell'esempio sono nomi generici utilizzati solo a titolo esemplificativo.

Dim MyObject, YourObject, ThisObject, OtherObject, ThatObject, MyCheck

Set YourObject = MyObject	' Assegna i riferimenti di oggetto.

Set ThisObject = MyObject

Set ThatObject = OtherObject

MyCheck = YourObject Is ThisObject	' Restituisce True.

MyCheck = ThatObject Is ThisObject	' Restituisce False.

' Presume che MyObject <> OtherObject

MyCheck = MyObject Is ThatObject	' Restituisce False.


Riepilogo degli operatori

Operatori	Descrizione
Operatori aritmetici	Operatori utilizzati per eseguire calcoli matematici.
Operatori di confronto	Operatori utilizzati per confrontare due espressioni.
Operatori di concatenamento	Operatori utilizzati per ottenere il concatenamento di stringhe.
Operatori logici	Operatori utilizzati per eseguire operazioni logiche.


Precedenza tra gli operatori

Quando un'espressione contiene varie operazioni, ciascuna parte viene valutata e risolta secondo un ordine prestabilito, definito "precedenza tra gli operatori".

Se le espressioni includono operatori di diverso tipo, gli operatori aritmetici vengono valutati per primi, seguiti dagli operatori di confronto e infine dagli operatori logici. Per gli operatori di confronto non esiste un ordine di precedenza, ovvero vengono semplicemente valutati da sinistra a destra nell'ordine in cui compaiono. Gli operatori aritmetici e gli operatori logici vengono valutati in base all'ordine di precedenza indicato nella seguente tabella:

Aritmetici	Di confronto	Logici
Elevazione a potenza (^)	Uguaglianza (=)	Not
Negazione (–)	Disuguaglianza (<>)	And
Moltiplicazione e divisione (*, /)	Minore di (<)	Or
Divisione tra interi (\)	Maggiore di (>)	Xor
Modulo aritmetico (Mod)	Minore o uguale a (<=)	Eqv
Addizione e sottrazione (+, –)	Maggiore o uguale a (>=)	Imp
Concatenamento di stringhe (&)	Like Is
Quando in un'espressione compaiono una moltiplicazione e una divisione, ogni operazione viene valutata nell'ordine in cui è visualizzata, da sinistra a destra. Lo stesso vale per un'addizione e una sottrazione all'interno di una stessa espressione. Utilizzando le parentesi tonde, è possibile ignorare l'ordine di precedenza e far in modo che alcune parti di un'espressione vengano valutate prima di altre. Le operazioni tra parentesi tonde hanno sempre la precedenza rispetto alle altre. All'interno delle parentesi tonde, tuttavia, viene rispettata la normale precedenza tra gli operatori.

L'operatore di concatenamento di stringhe (&) non è un vero e proprio operatore aritmetico. Per quanto riguarda la precedenza, segue tutti gli operatori aritmetici e precede tutti gli operatori di confronto.

L'operatore Like, pur avendo precedenza uguale a tutti gli operatori di confronto è di fatto un operatore per il confronto fra criteri di ricerca.

L'operatore Is viene utilizzato per il confronto del riferimento degli oggetti. Non confronta infatti gli oggetti e i loro valori ma verifica soltanto se due riferimenti di oggetto sono relativi allo stesso oggetto.


Operatori aritmetici

Operatore ^

Operatore *

Operatore /

Operatore \

Operatore Mod

Operatore +

Operatore -


Operatori di concatenamento

Operatore &

Operatore +


Operatori logici

Operatore And

Operatore Eqv

Operatore Imp

Operatore Not

Operatore Or

Operatore Xor


Operatore ^

Utilizzato per elevare un numero alla potenza espressa da un esponente.

Sintassi

risultato = numero^esponente

La sintassi dell'operatore ^ è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
numero	Obbligatoria. Qualsiasi espressione numerica.
esponente	Obbligatoria. Qualsiasi espressione numerica.
Osservazioni

Un numero può essere negativo soltanto se esponente è un valore intero. Quando vengono eseguite più operazioni di elevamento a potenza in una sola espressione, l'operatore ^ viene valutato nell'ordine in cui compare, da sinistra a destra.

Il tipo di dati di risultato è in genere un valore Double o un valore Variant che include un valore Double. Se tuttavia numero o esponente è un'espressione Null, anche risultato sarà Null.


Operatore +

Utilizzato per sommare due numeri.

Sintassi

risultato = espressione1+espressione2

La sintassi dell'operatore + è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
espressione1	Obbligatoria. Qualsiasi espressione.
espressione2	Obbligatoria. Qualsiasi espressione.
Osservazioni

L'utilizzo dell'operatore + non consente di determinare se verrà eseguita un'operazione di addizione o di concatenamento di stringhe. Per evitare ambiguità nell'esecuzione e per fornire del codice autoesplicativo, si consiglia di utilizzare a questo scopo l'operatore & per il concatenamento.

Se almeno una espressione non è di tipo Variant, saranno valide le seguenti regole:

Se	Operazione eseguita
Entrambe le espressioni sono costituite da tipi di dati numerici (Byte, Boolean, Integer, Long, Single, Double, Date, Currency o Decimal)	Addizione.
Entrambe le espressioni sono di tipo String	Concatenamento.
Un'espressione contiene dati di tipo numerico e l'altra è di tipo Variant (diversa da Null)	Addizione.
Un'espressione è di tipo String e l'altra è di tipo Variant (diversa da Null)	Concatenamento.
Un'espressione è un valore Variant di tipo Empty	Restituisce come risultato l'altra espressione invariata.
Un'espressione contiene dati di tipo numerico e l'altra è di tipo String	Viene generato l'errore Tipo non corrispondente.
Entrambe le espressioni sono Null	risultato sarà Null.
Se entrambe le espressioni sono di tipo Variant, saranno valide le seguenti regole:

Se	Operazione eseguita
Entrambe le espressioni Variant sono di tipo numerico	Addizione.
Entrambe le espressioni Variant sono di tipo stringa	Concatenamento.
Un'espressione Variant è di tipo numerico e l'altra è di tipo stringa	Addizione.
Nel caso di una semplice addizione aritmetica, riguardante soltanto espressioni numeriche, il tipo di dati di risultato è in genere quello dell'espressione più precisa. L'ordine crescente di precisione è Byte, Integer, Long, Single, Double, Currency e Decimal. Esistono tuttavia alcune eccezioni a tale ordine:

Se	Risultato sarà
Un valore Single e uno Long vengono sommati	un Double.
Il tipo di dati di risultato è un valore Variant di tipo Long, Single o Date che non rientra nell'intervallo consentito,	convertito in un valore Variant di tipo Double.
Il tipo di dati di risultato è un valore Variant di tipo Byte che non rientra nell'intervallo consentito,	convertito in un valore Variant di tipo Integer.
Il tipo di dati di risultato è un valore Variant di tipo Integer che non rientra nell'intervallo consentito,	convertito in un valore Variant di tipo Long.
Un tipo di dati Date viene aggiunto a qualsiasi tipo di dati,	Date.
Se una o entrambe le espressioni sono Null, risultato sarà Null. Se entrambe le espressioni hanno valore Empty, risultato sarà Integer. Se tuttavia una sola espressione ha valore Empty, l'altra espressione verrà restituita invariata come valore di risultato.

Nota   L'ordine di precisione utilizzato per l'addizione e la sottrazione non è lo stesso utilizzato per la moltiplicazione.


Operatore -
Operatore –

Utilizzato per calcolare la differenza tra due numeri o indicare il valore negativo di una espressione numerica.

Sintassi 1

risultato = numero1–numero2

Sintassi 2

–numero

La sintassi dell'operatore - è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
numero	Obbligatoria. Qualsiasi espressione numerica.
numero1	Obbligatoria. Qualsiasi espressione numerica.
numero2	Obbligatoria. Qualsiasi espressione numerica.
Osservazioni

Nella sintassi 1, l'operatore - è l'operatore aritmetico di sottrazione utilizzato per calcolare la differenza tra due numeri. Nella sintassi 2, l'operatore - viene utilizzato come operatore di negazione unario per indicare il valore negativo di un'espressione.

Il tipo di dati di risultato è in genere quello dell'espressione più precisa. L'ordine di precisione crescente è Byte, Integer, Long, Single, Double, Currency e Decimal. Esistono tuttavia alcune eccezioni a tale tipo di ordine:

Se	Risultato sarà
La sottrazione viene eseguita tra valori Single e Long,	convertito in Double.
Il tipo di dati di risultato è un valore Variant di tipo Long, Single o Date che non rientra nell'intervallo consentito,	convertito in un valore Variant che contiene un valore Double.
Il tipo di dati di risultato è un valore Variant di tipo Byte che non rientra nell'intervallo consentito,	convertito in un valore Variant di tipo Integer.
Il tipo di dati di risultato è un valore Variant di tipo Integer che non rientra nell'intervallo consentito,	convertito in un valore Variant di tipo Long.
La sottrazione viene eseguita tra un tipo di dati Date e un qualsiasi altro tipo di dati,	Date.
La sottrazione viene eseguita tra due espressioni Date,	Double.
Se una o entrambe le espressioni sono espressioni Null, risultato sarà Null. Qualsiasi espressione con valore Empty sarà considerata uguale a 0.

Nota   L'ordine di precisione utilizzato per l'addizione e la sottrazione non è lo stesso utilizzato per la moltiplicazione.


Operatore *

Utilizzato per moltiplicare due numeri.

Sintassi

risultato = numero1*numero2

La sintassi dell'operatore * è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
numero1	Obbligatoria. Qualsiasi espressione numerica.
numero2	Obbligatoria. Qualsiasi espressione numerica.
Osservazioni

Il tipo di dati di risultato è in genere quello dell'espressione più precisa. L'ordine di precisione crescente è Byte, Integer, Long, Single, Double, Currency e Decimal. Esistono tuttavia alcune eccezioni a tale tipo di ordine:

Se	Risultato sarà
La moltiplicazione viene eseguita tra valori Single e Long,	convertito in Double.
Il tipo di dati di risultato è un valore Variant di tipo Long, Single o Date che non rientra nell'intervallo consentito,	convertito in un valore Variant che contiene un valore Double.
Il tipo di dati di risultato è un valore Variant di tipo Byte che non rientra nell'intervallo consentito,	convertito in un valore Variant di tipo Integer.
Il tipo di dati di risultato è un valore Variant di tipo Integer che non rientra nell'intervallo consentito,	convertito in un valore Variant di tipo Long.
Se una o entrambe le espressioni sono espressioni Null, risultato sarà Null. Qualsiasi espressione con valore Empty sarà considerata uguale a 0.

Nota   L'ordine di precisione utilizzato per la moltiplicazione non è lo stesso utilizzato per l'addizione e la sottrazione.


Operatore /

Utilizzato per dividere due numeri e restituire un risultato con virgola mobile.

Sintassi

risultato = numero1/numero2

La sintassi dell'operatore / è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
numero1	Obbligatoria. Qualsiasi espressione numerica.
numero2	Obbligatoria. Qualsiasi espressione numerica.
Osservazioni

Il tipo di dati di risultato è in genere Double o un valore Variant di tipo Double. Esistono tuttavia alcune eccezioni a tale tipo di ordine:

Se	Risultato sarà
Entrambe le espressioni sono Byte, Integer o Single,	un valore Single a meno che non superi l'intervallo ammesso. In quest'ultimo caso, verrà generato un errore.
Entrambe le espressioni sono Variant di tipo Byte, Integer o Single,	un valore Variant di tipo Single a meno che non superi l'intervallo ammesso. In quest'ultimo caso, risultato sarà un valore Variant che contiene un valore Double.
La divisione riguarda il tipo di dati Decimal e qualsiasi altro tipo di dati,	un tipo di dati Decimal.
Se una o entrambe le espressioni sono espressioni Null, risultato sarà Null. Qualsiasi espressione con valore Empty sarà considerata uguale a 0.


Operatore \

Utilizzato per dividere due numeri e restituire un risultato intero.

Sintassi

risultato = numero1\numero2

La sintassi dell'operatore \ è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
numero1	Obbligatoria. Qualsiasi espressione numerica.
numero2	Obbligatoria. Qualsiasi espressione numerica.
Osservazioni

Prima di eseguire la divisione, le espressioni numeriche vengono arrotondate in espressioni di tipo Byte, Integer o Long.

Il tipo di dati di risultato è in genere Byte, un valore Variant con sottotipo Byte, Integer, Variant Integer, Long o Variant Long indipendentemente dal fatto che risultato sia o meno un numero intero. La parte frazionaria verrà eliminata. Se tuttavia un'espressione è Null, risultato sarà Null. Qualsiasi espressione con valore Empty sarà considerata uguale a 0.


Operatore Mod

Utilizzato per dividere due numeri e restituire soltanto il resto della divisione.

Sintassi

risultato = numero1 Mod numero2

La sintassi dell'operatore Mod è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
numero1	Obbligatoria. Qualsiasi espressione numerica.
numero2	Obbligatoria. Qualsiasi espressione numerica.
Osservazioni

L'operatore Mod, o resto, divide numero1 per numero2, arrotondando i numeri a virgola mobile in numeri interi e restituisce come risultato soltanto il resto della divisione. Come, ad esempio, nell'espressione che segue in cui A (risultato) è uguale a 5.

A = 19 Mod 6.7

Il tipo di dati di risultato è in genere Byte, Variant  Byte, Integer, Variant Integer, Long o Variant che contiene un valore Long, indipendentemente dal fatto che risultato sia o meno un numero intero. La parte frazionaria verrà troncata. Se tuttavia un'espressione è Null, risultato sarà Null. Qualsiasi espressione con valore Empty sarà considerata uguale a 0.


Operatore &

Utilizzato per concatenare le stringhe di due espressioni.

Sintassi

risultato = espressione1 & espressione2

La sintassi dell'operatore & è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile String o Variant.
espressione1	Obbligatoria. Qualsiasi espressione.
espressione2	Obbligatoria. Qualsiasi espressione.
Osservazioni

Quando espressione non è una stringa viene convertita in un valore Variant di tipo String. Il tipo di dati di risultato è String se entrambe le espressioni sono espressioni stringa, altrimenti risultato è un valore Variant di tipo String. Se entrambe le espressioni sono Null, risultato sarà Null. Se, tuttavia, solo un'espressione è Null, tale espressione sarà considerata come una stringa di lunghezza zero quando viene concatenata all'altra espressione. Qualsiasi espressione con valore Empty sarà considerata equivalente a una stringa di lunghezza zero.


Operatori di confronto

Utilizzati per confrontare due espressioni.

Sintassi

risultato = espressione1 operatorediconfronto espressione2

risultato = oggetto1 Is oggetto2

risultato = stringa Like criterio

La sintassi degli operatori di confronto è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
espressione	Obbligatoria. Qualsiasi espressione.
operatorediconfronto	Obbligatoria. Qualsiasi operatore di confronto.
oggetto	Obbligatoria. Qualsiasi nome di oggetto.
stringa	Obbligatoria. Qualsiasi espressione stringa.
criterio	Obbligatoria. Qualsiasi espressione stringa o intervallo di caratteri.
Osservazioni

La seguente tabella contiene un elenco degli operatori di confronto e delle condizioni che determinano se risultato è True, False o Null:

Operatore	True se	False se	Null se
< (Minore di)	espressione1 < espressione2	espressione1 >= espressione2	espressione1 o espressione2 = Null
<= (Minore o uguale a)	espressione1 <= espressione2	espressione1 > espressione2	espressione1 o espressione2 = Null
> (Maggiore di)	espressione1 > espressione2	espressione1 <= espressione2	espressione1 o espressione2 = Null
>= (Maggiore o uguale a)	espressione1 >= espressione2	espressione1 < espressione2	espressione1 o espressione2 = Null
= (Uguale a)	espressione1 = espressione2	espressione1 <> espressione2	espressione1 o espressione2 = Null
<> (Diverso)	espressione1 <> espressione2	espressione1 = espressione2	espressione1 o espressione2 = Null
Nota   Gli operatori Is e Like eseguono il confronto in un modo specifico diverso rispetto a quello utilizzato dagli operatori elencati nella tabella.

Confrontando due espressioni, può risultare difficile stabilire se le espressioni sono numeri o stringhe. La tabella seguente mostra le modalità di confronto o il risultato del confronto quando una delle due espressioni non è di tipo Variant:

Se	Risultato
Entrambe le espressioni sono tipi di dati numerici (Byte, Boolean, Integer, Long, Single, Double, Date, Currency o Decimal)	Viene eseguito un confronto numerico.
Entrambe le espressioni sono di tipo String	Viene eseguito un confronto fra stringhe.
Un'espressione è un valore di tipo numerico e l'altra è di tipo Variant convertibile in un numero	Viene eseguito un confronto numerico.
Un'espressione è un valore di tipo numerico e l'altra è una stringa di tipo Variant non convertibile in un numero	Viene generato l'errore Tipo non corrispondente.
Un'espressione è di tipo String e l'altra è una qualsiasi Variant a eccezione di Null	Viene eseguito un confronto fra stringhe.
Un'espressione ha valore Empty e l'altra è un tipo di dati numerico	Viene eseguito un confronto numerico utilizzando 0 come espressione con valore Empty.
Un'espressione è Empty e l'altra è di tipo String	Viene eseguito un confronto fra stringhe utilizzando una stringa di lunghezza zero come espressione con valore Empty.
Se espressione1 ed espressione2 sono entrambe espressioni di tipo Variant il loro sottotipo determinerà la modalità di confronto. La tabella seguente mostra come vengono confrontate le espressioni o qual è il risultato del confronto in base al sottotipo Variant:

Se	Risultato
Entrambe le espressioni Variant sono numeriche	Viene eseguito un confronto numerico.
Entrambe le espressioni Variant sono stringhe	Viene eseguito un confronto fra stringhe.
Un'espressione Variant è di tipo numerico e l'altra è di tipo stringa	L'espressione numerica è minore dell'espressione stringa.
Un'espressione Variant ha valore Empty e l'altra è di tipo numerico	Viene eseguito un confronto numerico utilizzando 0 come espressione con valore Empty.
Un'espressione Variant ha valore Empty e l'altra è di tipo stringa	Viene eseguito un confronto fra stringhe, utilizzando una stringa di lunghezza zero ("") come espressione con valore Empty.
Entrambe le espressioni Variant hanno valore Empty	Le espressioni sono uguali.
Quando un valore Single viene confrontato con un valore Double, il valore Double viene arrotondato alla precisione del valore Single.

Se un valore di tipo Currency viene confrontato con un valore di tipo Single o Double, il valore Single o Double verrà convertito in un valore di tipo Currency. In modo analogo, se un valore Decimal viene confrontato cun valore Single o Double, il valore Single o Double viene convertito in Decimal. Per i valori Currency, le parti frazionarie del valore inferiori a 0,0001 potrebbero essere perdute; per i valori Decimal, le parti frazionarie del valore inferiori a 1E-28 potrebbero essere perdute oppure potrebbe verificarsi un errore di overflow. A causa di tale perdita della parte frazionaria del valore sarà possibile che il risultato indichi come uguali due valori che in realtà non lo sono.


Operatore And

Utilizzato per eseguire un collegamento logico tra due espressioni.

Sintassi

risultato = espressione1 And espressione2

La sintassi dell'operatore And è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
espressione1	Obbligatoria. Qualsiasi espressione.
espressione2	Obbligatoria. Qualsiasi espressione.
Osservazioni

Solo nel caso in cui entrambe le espressioni diano come risultato True, risultato sarà True. Se una delle espressioni dà come risultato False, risultato sarà False. La seguente tabella mostra come viene determinato risultato:

Valore di espressione1	Valore di espressione2	Valore di risultato
True	True	True
True	False	False
True	Null	Null
False	True	False
False	False	False
False	Null	False
Null	True	Null
Null	False	False
Null	Null	Null
L'operatore And esegue un confronto bit per bit dei bit collocati nella stessa posizione in due diverse espressioni numeriche e imposta il bit corrispondente in risultato in base alla seguente tabella:

Valore del bit in espressione1	Valore del bit in espressione2	Valore di risultato
0	0	0
0	1	0
1	0	0
1	1	1


Operatore Eqv

Utilizzato per stabilire un'equivalenza logica tra due espressioni.

Sintassi

risultato = espressione1 Eqv espressione2

La sintassi dell'operatore Eqv è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
espressione1	Obbligatoria. Qualsiasi espressione.
espressione2	Obbligatoria. Qualsiasi espressione.
Osservazioni

Quando una delle due espressioni è un valore Null, anche risultato sarà Null. Quando nessuna delle due espressioni è Null, risultato sarà determinato in base alla seguente tabella:

Valore di espressione1	Valore di espressione2	Valore di risultato
True	True	True
True	False	False
False	True	False
False	False	True
L'operatore Eqv esegue un confronto bit per bit dei bit collocati nella stessa posizione in due diverse espressioni numeriche e imposta il bit corrispondente in risultato in base alla seguente tabella:

Valore di espressione1	Valore di espressione2	Valore di risultato
0	0	1
0	1	0
1	0	0
1	1	1


Operatore Imp

Utilizzato per stabilire un'implicazione logica tra due espressioni.

Sintassi

risultato = espressione1 Imp espressione2

La sintassi dell'operatore Imp è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
espressione1	Obbligatoria. Qualsiasi espressione.
espressione2	Obbligatoria. Qualsiasi espressione.
Osservazioni

La seguente tabella mostra come viene determinato risultato:

Valore di espressione1	Valore di espressione2	Valore di risultato
True	True	True
True	False	False
True	Null	Null
False	True	True
False	False	True
False	Null	True
Null	True	True
Null	False	Null
Null	Null	Null
L'operatore Imp esegue un confronto bit per bit dei bit collocati nella stessa posizione in due diverse espressioni numeriche e imposta il bit corrispondente in risultato in base alla seguente tabella:

Valore del bit in espressione1	Valore del bit in espressione2	Valore di risultato
0	0	1
0	1	1
1	0	0
1	1	1


Operatore Not

Utilizzato per per eseguire una negazione logica di un'espressione.

Sintassi

risultato = Not espressione

La sintassi dell'operatore Not è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
espressione	Obbligatoria. Qualsiasi espressione.
Osservazioni

La seguente tabella mostra come viene determinato risultato:

Valore di espressione	Valore di risultato
True	False
False	True
Null	Null
L'operatore Not inverte inoltre i valori dei bit in qualsiasi variabile e imposta il bit corrispondente in risultato in base alla seguente tabella:

Bit in espressione	Bit in risultato
0	1
1	0


Operatore Or

Utilizzato per eseguire una disgiunzione logica tra due espressioni.

Sintassi

risultato = espressione1 Or espressione2

La sintassi dell'operatore Or è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
espressione1	Obbligatoria. Qualsiasi espressione.
espressione2	Obbligatoria. Qualsiasi espressione.
Osservazioni

Se una o entrambe le espressioni rappresentano un valore True, risultato sarà True. La seguente tabella mostra come viene determinato risultato:

Valore di espressione1	Valore di espressione2	Valore di risultato
True	True	True
True	False	True
True	Null	True
False	True	True
False	False	False
False	Null	Null
Null	True	True
Null	False	Null
Null	Null	Null
L'operatore Or esegue un confronto bit per bit dei bit collocati nella stessa posizione in due diverse espressioni numeriche e imposta il bit corrispondente in risultato in base alla seguente tabella:

Valore del bit in espressione1	Valore del bit in espressione2	Valore di risultato
0	0	0
0	1	1
1	0	1
1	1	1


Operatore Xor

Utilizzato per eseguire un'esclusione logica tra due espressioni.

Sintassi

[risultato =] espressione1 Xor espressione2

La sintassi dell'operatore Xor è composta dalle seguenti parti:

Parte	Descrizione
risultato	Facoltativa. qualsiasi variabile numerica.
espressione1	Obbligatoria. Qualsiasi espressione.
espressione2	Obbligatoria. Qualsiasi espressione.
Osservazioni

Se solo una delle due espressioni rappresenta un valore True, risultato sarà True. Tuttavia se una delle due espressioni è Null, risultato sarà Null. Quando nessuna delle due espressioni è un valore Null, risultato verrà determinato in base alla seguente tabella:

Valore di espressione1	Valore di espressione2	Valore di risultato
True	True	False
True	False	True
False	True	True
False	False	False
L'operatore Xor funziona sia da operatore logico che da operatore bit per bit. Esegue un confronto bit per bit fra due diverse espressioni utilizzando la logica dell'OR esclusivo per formare il risultato in base alla seguente tabella:

Valore del bit in espressione1	Valore del bit in espressione2	Valore di risultato
0	0	0
0	1	1
1	0	1
1	1	0


Operatore Is

Utilizzato per confrontare due variabili che fanno riferimento a oggetti.

Sintassi

risultato = oggetto1 Is oggetto2

La sintassi dell'operatore Is è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
oggetto1	Obbligatoria. Qualsiasi espressione.
oggetto2	Obbligatoria. Qualsiasi espressione.
Osservazioni

Se oggetto1 e oggetto2 si riferiscono allo stesso oggetto, risultato sarà True; in caso contrario, risultato sarà False. Due variabili possono fare riferimento allo stesso oggetto in diversi modi.

Nel seguente esempio, A è stata impostata in modo che faccia riferimento allo stesso oggetto di B:

Set A = B

Nel seguente esempio A e B sono state impostate in modo che facciano riferimento allo stesso oggetto di C:

Set A = C

Set B = C


Operatore Like

Utilizzato per confrontare due stringhe.

Sintassi

risultato = stringa Like criterio

La sintassi dell'operatore Like è composta dalle seguenti parti:

Parte	Descrizione
risultato	Obbligatoria. Qualsiasi variabile numerica.
stringa	Obbligatoria. Qualsiasi espressione stringa.
criterio	Obbligatoria. Qualsiasi espressione stringa che corrisponda ai criteri di confronto come indicato nella sezione "Osservazioni".
Osservazioni

Se stringa corrisponde a criterio, risultato sarà True; se non c'è corrispondenza, risultato sarà False. Se stringa oppure criterio è Null, anche risultato sarà Null.

Il comportamento dell'operatore Like dipende dall'istruzione Option Compare. Il metodo di confronto fra stringhe predefinito per tutti i moduli è Option Compare Binary.

L'istruzione Option Compare Binary consente di eseguire confronti fra stringhe sulla base di un tipo di ordinamento derivato dalla rappresentazione binaria interna dei caratteri. Il tipo di ordinamento è determinato dalla tabella codici. Nell'esempio che segue viene illustrato un tipico ordinamento binario:

A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

L'istruzione Option Compare Text consente di eseguire confronti fra stringhe sulla base di un ordinamento testuale indipendente dalla combinazione di maiuscole/minuscole e determinato dalle impostazioni internazionali del sistema in uso. Se gli stessi caratteri dell'esempio precedente venissero ordinati utilizzando l'istruzione Option Compare Text verrebbe prodotto il seguente risultato:

(A=a) < (À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)

I criteri di confronto incorporati rappresentano un valido strumento per i confronti fra stringhe. Tali criteri consentono di utilizzare i caratteri jolly, elenchi di caratteri o intervalli di caratteri in qualsiasi combinazione. La seguente tabella indica i caratteri utilizzabili in criterio e le relative corrispondenze:

Carattere/i in criterio	Corrispondenze in stringa
?	Qualsiasi carattere singolo.
*	Zero o più caratteri.
#	Qualsiasi cifra singola (0-9).
[elencocaratteri]	Qualsiasi carattere singolo in elencocaratteri.
[!elencocaratteri]	Qualsiasi carattere singolo non compreso in elencocaratteri.
È possibile utilizzare un gruppo di uno o più caratteri (elencocaratteri) racchiusi tra parentesi quadre ([ ]) per cercare una corrispondenza con qualsiasi carattere singolo in stringa. Tale gruppo può comprendere qualsiasi codice di carattere, incluse le cifre.

Nota   Per trovare i caratteri speciali parentesi quadra sinistra ([), punto interrogativo (?), simbolo di numero (#) e asterisco (*) è necessario racchiuderli tra parentesi quadre. La parentesi quadra destra (]) non può essere utilizzata in un gruppo per la ricerca di altre parentesi quadre destre, ma può essere utilizzata come carattere singolo al di fuori di un gruppo.

In elencocaratteri è possibile specificare un intervallo di caratteri utilizzando un trattino (-) per separare il limite superiore e quello inferiore dell'intervallo di caratteri. Se si specifica, ad esempio, [A-Z] verrà trovata la corrispondenza se la posizione del carattere corrispondente in stringa contiene una delle lettere maiuscole dell'intervallo da A a Z. È possibile inserire tra parentesi quadre più intervalli, senza alcun carattere di delimitazione.

Il significato di un determinato intervallo dipende dall'ordinamento dei caratteri valido in fase di esecuzione, determinato dall'istruzione Option Compare e dalle impostazioni internazionali del sistema in cui è in esecuzione il codice. Sulla base dell'esempio sopraindicato per l'istruzione Option Compare Binary, l'intervallo [A–E] consente di individuare le corrispondenze A, B e E. Se si utilizza l'istruzione Option Compare Text, [A–E] consente di individuare le corrispondenze A, a, À, à, B, b, E, e. Si noti che nel confronto le lettere Ê o ê non risultano corrispondenti in quanto nell'ordine alfabetico i caratteri accentati seguono i caratteri non accentati.

Di seguito vengono riportate alcune delle regole più importanti relative alla corrispondenza dei criteri:

•	Un punto esclamativo (!) all'inizio di elencocaratteri significa che verrà segnalata una corrispondenza se in stringa sarà rilevato qualsiasi carattere ad eccezione dei caratteri contenuti in elencocaratteri. Se è utilizzato al di fuori delle parentesi quadre, il punto esclamativo consentirà di trovare una corrispondenza con un altro punto esclamativo.

•	Per ottenere una corrispondenza con il trattino (-) tale carattere dovrà essere inserito all'inizio (dopo l'eventuale punto esclamativo) o alla fine di elencocaratteri. In qualsiasi altra posizione, il trattino viene utilizzato per identificare un intervallo di caratteri.

•	Quando si specifica un intervallo di caratteri, tali caratteri devono essere indicati in ordine crescente (dal minore al maggiore). [A-Z] è ad esempio un criterio valido a differenza di [Z-A].

•	La sequenza di caratteri [] viene considerata come una stringa di lunghezza zero ("").

L'alfabeto di alcune lingue include caratteri speciali che rappresentano l'insieme di due diversi caratteri, come ad esempio il carattere "æ" per rappresentare "a" e "e". L'operatore Like riconosce il singolo carattere speciale come equivalente dei due caratteri distinti.

Se nelle impostazioni internazionali di sistema viene specificata una lingua che utilizza questo tipo di caratteri speciali, un'occorrenza del singolo carattere speciale in criterio o stringa corrisponderà alla sequenza equivalente di due caratteri nell'altra stringa. In modo analogo, un singolo carattere speciale in criterio racchiuso tra parentesi quadre (da solo, in un elenco o in un intervallo) corrisponderà alla sequenza equivalente di due caratteri in stringa.


Esempio di proprietà Count

In questo esempio la proprietà Count dell'oggetto Collection viene utilizzata per specificare il numero di iterazioni necessarie per rimuovere tutti gli elementi dell'insieme denominato MyClasses. Se gli insiemi sono indicizzati in modo numerico, il valore di base predefinito è 1. Dato che gli insiemi vengono reindicizzati automaticamente quando uno dei membri viene rimosso, il codice seguente rimuove il primo membro ad ogni iterazione.

Dim Num, MyClasses

For Num = 1 To MyClasses.Count	' Rimuove il nome dall'insieme.

MyClasses.Remove 1	' Indici numerici predefiniti dell'insieme

Next	' inizia da 1.


Esempio di proprietà Description

In questo esempio viene assegnato un messaggio definito dall'utente alla proprietà Description dell'oggetto Err.

Err.Description = "Impossibile accedere ad un oggetto necessario" _

& "per questa operazione."


Esempio di proprietà HelpContext

In questo esempio la proprietà HelpContext dell'oggetto Err viene utilizzata per visualizzare l'argomento della Guida di Visual Basic relativo all'errore Overflow.

Dim Msg

Err.Clear

On Error Resume Next

Err.Raise 6 ' Genera un errore "Overflow".

If Err.Number <> 0 Then

Msg = "Premere F1 o fare clic su ? per visualizzare " & Err.HelpFile & " l'argomento per" & _

" il contesto della Guida: " & Err.HelpContext

MsgBox Msg, , "Errore: " & Err.Description, Err.HelpFile, _

Err.HelpContext

End If


Esempio di proprietà HelpFile

In questo esempio la proprietà HelpFile dell'oggetto Err viene utilizzata per avviare il sistema di Guida. Per impostazione predefinita la proprietà HelpFile contiene il nome del file della Guida di Visual Basic.

Dim Msg

Err.Clear

On Error Resume Next	' Annulla gli errori a scopo dimostrativo.

Err.Raise 6	' Genera un errore "Overflow".

Msg = "Premere F1 o fare clic su ? per visualizzare" & Err.HelpFile & _

" l'argomento relativo a questo errore"

MsgBox Msg, , "Errore: " & Err.Description,Err.HelpFile, Err.HelpContext


Esempio di proprietà LastDLLError

Se il codice seguente viene incollato in un modulo UserForm, provoca un tentativo di chiamata a una funzione DLL. La chiamata fallisce poiché l'argomento passato (un puntatore nullo) genera un errore e SQL non può essere annullato in nessun evento se non è in esecuzione. Il codice successivo alla chiamata controlla il valore da essa restituito e quindi stampa la proprietà LastDLLError dell'oggetto Err per segnalare il codice di errore. Nei sistemi senza DLL LastDLLError restituisce sempre zero.

 Private Declare Function SQLCancel Lib "ODBC32.dll" _

 (ByVal hstmt As Long) As Integer

Private Sub UserForm_Click()

Dim RetVal

' Chiamata con argomento non valido.

RetVal = SQLCancel(myhandle&)

' Verifica il codice di errore SQL.

If RetVal = -2 Then

' Visualizza il codice dei dati.

MsgBox "Il codice di errore è :" & Err.LastDllError

    End If

End Sub


Esempi di proprietà Number

Nel primo esempio viene illustrato un tipico utilizzo della proprietà Number in una routine di gestione degli errori. Nel secondo esempio, la proprietà Number dell'oggetto Err viene esaminata per determinare se un errore restituito da un oggetto di automazione è stato definito dall'oggetto oppure abbinato ad un errore definito da Visual Basic. Si noti che la costante vbObjectError è un numero negativo molto grande che un oggetto aggiunge al proprio codice di errore ad indicare che l'errore è definito dal server. Se lo si sottrae da Err.Number, tale numero verrà eliminato dal risultato. Se l'errore è definito dall'oggetto, il numero di base viene mantenuto in MyError, che viene visualizzato in una finestra di messaggio insieme all'origine iniziale dell'errore. Se Err.Number rappresenta un errore di Visual Basic, nella finestra di messaggio verrà visualizzato il numero dell'errore di Visual Basic.

' Utilizzo tipico della proprietà Number

Sub test()

On Error GoTo out

Dim x, y

x = 1 / y	' Crea un errore di divisione per zero

Exit Sub

out:

MsgBox Err.Number

MsgBox Err.Description

' Controlla errore di divisione per zero

If Err.Number = 11 Then

y = y + 1

End If

Resume

End Sub

' Utilizzo della proprietà Number con un errore

' generato da un oggetto di automazione

Dim MyError, Msg

' Sottrae la costante aggiunta all'oggetto per indicare

' un errore interno.

MyError = Err.Number - vbObjectError

' Se dopo la sottrazione della costante vbObjectError

' il numero rientra ancora nell'intervallo 0-65.535, si

' tratta di un codice di errore definito dall'oggetto

If MyError > 0 And MyError < 65535 Then

Msg = "Numero assegnato all'errore dall'oggetto:" _

 	& MyError & ". Origine dell'errore: " _

& Err.Source & ". Premere F1 per visualizzare l'argomento della Guida relativo all'origine dell'errore."

' In caso contrario, è un numero di errore di Visual Basic.

Else

Msg = "Questo errore (" & Err.Number & ") è un numero di errore di Visual Basic" & _

" Premere F1 o fare clic su ? per visualizzare l'argomento della Guida di Visual " _

& " Basic relativo a questo errore."

End If

MsgBox Msg, , "Errore dell'oggetto", Err.HelpFile, Err.HelpContext


Esempio di proprietà Source

In questo esempio l'ID programmatico di un oggetto di automazione creato in Visual Basic viene assegnato alla variabile MyObjectID, quindi tale variabile viene assegnata alla proprietà Source dell'oggetto Err quando questo genera un errore tramite il metodo Raise. Per la gestione degli errori, è consigliabile non utilizzare a livello di programmazione la proprietà Source, né le altre proprietà di Err ad eccezione di Number. Il solo motivo valido per l'utilizzo di proprietà diverse da Number è la visualizzazione di informazioni il più possibile complete per l'utente, nei casi in cui la gestione di un errore non è possibile. Nell'esempio si presuppone che App e MyClass siano riferimenti validi.

Dim MyClass, MyObjectID, MyHelpFile, MyHelpContext

' Un oggetto di tipo MyClass genera un errore e imposta

' tutte le proprietà dell'oggetto Err, compresa Source,

' che riceve MyObjectID, una combinazione della

' proprietà Title dell'oggetto App e della proprietà

' Name dell'oggetto MyClass.

MyObjectID = App.Title & "." & MyClass.Name

Err.Raise	Number := vbObjectError + 894, Source := MyObjectID, _

Description := "Impossibile completare l'operazione", _

HelpFile := MyHelpFile, HelpContext := MyHelpContext


Proprietà Calendar

Restituisce o imposta un valore che specifica il tipo di calendario da utilizzare nel progetto.

Le possibili impostazioni della proprietà Calendar sono:

Impostazione	Valore	Descrizione
vbCalGreg	0	Utilizza il calendario gregoriano (impostazione predefinita).
vbCalHijri	1	Utilizza il calendario Hijri.
Osservazioni

La proprietà Calendar può essere impostata solo a livello di programmazione. Ad esempio, per impostare il calendario Hijri, utilizzare:

Calendar = vbCalHijri


Proprietà Count

Restituisce un valore Long (intero lungo) che contiene il numero di oggetti di un insieme. Di sola lettura.


Proprietà Description

Restituisce o imposta un'espressione stringa che contiene una stringa descrittiva associata a un oggetto. Lettura/scrittura.

Per l'oggetto Err, la proprietà restituisce o imposta una stringa descrittiva associata a un errore.

Osservazioni

La proprietà Description consente di descrivere brevemente un errore. Utilizzare tale proprietà per segnalare all'utente un errore che non è possibile o non si desidera gestire. Quando si genera un errore definito dall'utente, includere tramite questa proprietà una breve descrizione dell'errore. Se Description non contiene alcun valore e il valore di Number corrisponde a un errore di run-time di Visual Basic, quando viene generato l'errore la stringa restituita dalla funzione Error verrà utilizzata per Description.


Proprietà HelpContext

Restituisce o imposta un'espressione stringa che contiene l'ID di contesto relativo a un argomento di un file della Guida in linea di Microsoft Windows. Lettura/scrittura.

Osservazioni

Se HelpFile specifica un file della Guida, la proprietà HelpContext viene utilizzata per visualizzare automaticamente l'argomento della Guida specificato. Se sia HelpFile che HelpContext non contengono alcun valore, verrà verificato il valore di Number. Se tale valore corrisponde a un errore di run-time di Visual Basic, verrà utilizzato l'ID di contesto della Guida in linea di Visual Basic relativo a tale errore. Se il valore di Number non corrisponde a un errore di Visual Basic, verrà visualizzato il Sommario della Guida in linea di Visual Basic.

Nota   È consigliabile scrivere, all'interno dell'applicazione, una serie di routine di gestione degli errori più tipici. Durante la programmazione tramite oggetti, sarà possibile utilizzare la Guida in linea fornita dal file dell'oggetto per migliorare la gestione degli errori oppure per visualizzare un messaggio significativo per il programmatore o l'utente nel caso in cui l'errore sia irreversibile.


Proprietà HelpFile

Restituisce o imposta un'espressione stringa che contiene il percorso completo relativo a un file della Guida in linea di Microsoft Windows. Lettura/scrittura.

Osservazioni

Se in HelpFile è specificato un file della Guida, tale file verrà richiamato automaticamente quando si fa clic sul pulsante ? nella finestra di dialogo del messaggio di errore oppure si preme F1 in Windows o il tasto AIUTO in Macintosh. Se la proprietà HelpContext contiene un ID di contesto valido per il file specificato, verrà visualizzato direttamente l'argomento corrispondente. Se in HelpFile non è specificato alcun file della Guida in linea, verrà visualizzato il file della Guida in linea di Visual Basic.

Nota   È consigliabile scrivere, all'interno dell'applicazione, una serie di routine di gestione degli errori più tipici. Durante la programmazione tramite oggetti, sarà possibile utilizzare la Guida in linea fornita dal file dell'oggetto per migliorare la gestione degli errori oppure per visualizzare un messaggio significativo per il programmatore o l'utente nel caso in cui l'errore sia irreversibile.


Proprietà LastDLLError

Restituisce un codice di errore del sistema prodotto da una chiamata a una libreria a collegamento dinamico (DLL). Sola lettura. In Macintosh LastDLLError restituisce sempre zero.

Osservazioni

La proprietà LastDLLError si applica solo a chiamate di DLL eseguite dal codice di Visual Basic. Quando si eseguono chiamate di questo tipo, la funzione richiamata in genere restituisce un codice che indica il risultato positivo o negativo della chiamata e il valore viene assegnato alla proprietà LastDLLError. Consultare la documentazione relativa alle funzioni della DLL per determinare i valori che indicano risultati positivi o negativi. Se il valore restituito indica un risultato negativo, l'applicazione Visual Basic dovrebbe controllare immediatamente la proprietà LastDLLError Se la proprietà LastDLLError è impostata, non vengono sollevate eccezioni.


Proprietà Number

Restituisce o imposta un valore numerico che specifica un errore. Number è la proprietà predefinita per l'oggetto Err. Lettura/scrittura.

Osservazioni

Quando si desidera che un oggetto restituisca un errore definito dall'utente, impostare Err.Number aggiungendo il numero scelto come codice di errore alla costante vbObjectError. Per fare in modo che venga restituito ad esempio il numero 1051 come codice di errore, utilizzare il codice che segue:

Err.Raise Number := vbObjectError + 1051, Source:= "SomeClass"


Proprietà Source

Restituisce o imposta un'espressione stringa che specifica il nome dell'oggetto o dell'applicazione che ha generato inizialmente l'errore. Lettura/scrittura.

Osservazioni

La proprietà Source specifica un'espressione stringa che indica l'oggetto che ha generato inizialmente l'errore. L'espressione corrisponde in genere al nome di classe o all'ID programmatico dell'oggetto. Utilizzare Source per fornire informazioni agli utenti quando il codice non è in grado di gestire un errore generato in un oggetto al quale si ha avuto accesso. Se ad esempio si accede a Microsoft Excel e tale applicazione restituisce un errore di divisione per zero, Microsoft Excel imposterà Err.Number sul codice relativo a tale errore e imposterà Source su Excel.Application.

Quando si genera un errore nel codice, Source corrisponde all'ID programmatico dell'applicazione. Per i moduli di classe, Source dovrà contenere un nome nella forma progetto.classe. Quando viene generato un errore nel codice, la proprietà Source viene impostata automaticamente. In caso di errori in un modulo standard, la proprietà Source viene impostata sul nome del progetto. In caso di errori in un modulo di classe, la proprietà Source viene impostata su un nome nella forma progetto.classe.


Esempio di istruzione DeleteSetting

In questo esempio l'istruzione SaveSetting viene innanzitutto utilizzata per creare voci nel registro di Windows o nel file ini in piattaforme Windows a 16 bit per l'applicazione MyApp. L'istruzione DeleteSetting viene quindi utilizzata per eliminarle. Dato che non è specificato l'argomento key, viene eliminata l'intera sezione, inclusi il nome della sezione e tutte le chiavi corrispondenti.

' Inserisce alcune impostazioni nel registro.

SaveSetting appname := "MyApp", section := "Startup", _

            key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' Rimuove la sezione e tutte le impostazioni dal

' registro.

DeleteSetting "MyApp", "Startup"


Esempio di funzione GetAllSettings

In questo esempio l'istruzione SaveSetting viene innanzitutto utilizzata per creare voci nel registro di Windows per l'applicazione specificata dall'argomento appname. La funzione GetAllSettings viene quindi utilizzata per visualizzare le impostazioni. Si noti che non è possibile utilizzare la funzione GetAllSettings per recuperare i nomi di applicazione e i nomi di sezione. L'istruzione DeleteSetting viene infine utilizzata per eliminare le voci relative all'applicazione.

' Variabile Variant per archiviare la matrice bidimensionale

' restituita da GetAllSettings.

' Valore Integer per memorizzare il contatore.

Dim MySettings As Variant, intSettings As Integer

' Inserisce alcune impostazioni nel registro.

SaveSetting appname := "MyApp", section := "Startup", _

key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' Legge le impostazioni.

MySettings = GetAllSettings(appname := "MyApp", section := "Startup")

For intSettings = LBound(MySettings, 1) To UBound(MySettings, 1)

Debug.Print MySettings(intSettings, 0), MySettings(intSettings, 1)

Next intSettings

DeleteSetting "MyApp", "Startup"


Esempio di funzione GetSetting

In questo esempio l'istruzione SaveSetting viene innanzitutto utilizzata per creare voci nel registro di Windows o nel file ini in piattaforme Windows a 16 bit per l'applicazione specificata dall'argomento appname. La funzione GetSetting viene quindi utilizzata per visualizzare una delle impostazioni. Dato che viene specificato l'argomento default, verrà restituito in ogni caso un valore. Si noti che non è possibile utilizzare la funzione GetSetting per recuperare i nomi di sezione. L'istruzione DeleteSetting viene infine utilizzata per eliminare tutte le voci relative all'applicazione.

' Variabile Variant per archiviare la matrice bidimensionale

' restituita da GetSetting.

Dim MySettings As Variant

' Inserisce alcune impostazioni nel registro.

SaveSetting "MyApp","Startup", "Top", 75

SaveSetting "MyApp","Startup", "Left", 50

Debug.Print GetSetting(appname := "MyApp", section := "Startup", _

                       key := "Left", default := "25")

DeleteSetting "MyApp", "Startup"


Esempio di istruzione SaveSetting

In questo esempio l'istruzione SaveSetting viene innanzitutto utilizzata per creare voci nel registro di Windows o nel file ini in piattaforme Windows a 16 bit per l'applicazione MyApp. L'istruzione DeleteSetting viene quindi utilizzata per eliminarle.

' Inserisce alcune impostazioni nel registro.

SaveSetting appname := "MyApp", section := "Startup", _

            key := "Top", setting := 75

SaveSetting "MyApp","Startup", "Left", 50

' Rimuove la sezione e tutte le impostazioni dal

' registro.

DeleteSetting "MyApp", "Startup"


Istruzione DeleteSetting

Elimina un'impostazione di sezione o di chiave dalla voce del registro di configurazione di Windows oppure (in Macintosh) informazioni dal file di inizializzazione dell'applicazione.

Sintassi

DeleteSetting appname, section[, key]

La sintassi dell'istruzione DeleteSetting è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
appname	Obbligatoria. Espressione stringa contenente il nome dell'applicazione o del progetto a cui si riferisce l'impostazione di sezione o di chiave. In Macintosh questo è il nome di file del file di inizializzazione nella cartella Preferenze della cartella Sistema.
section	Obbligatoria. Espressione stringa contenente il nome della sezione dalla quale viene eliminata l'impostazione di chiave. Se vengono specificati solo gli argomenti appname e section, la sezione specificata viene eliminata insieme a tutte le impostazioni di chiave correlate.
key	Facoltativa. Espressione stringa contenente il nome dell'impostazione di chiave da eliminare.
Osservazioni

Se vengono specificati tutti gli argomenti, viene eliminata l'impostazione specificata. Se si utilizza l'istruzione DeleteSetting in una impostazione di sezione o di chiave non esistente, verrà generato un errore di run-time.


Funzione GetAllSettings

Restituisce un elenco di impostazioni di chiave e dei rispettivi valori (creati in origine con SaveSetting) da una voce del registro di configurazione di Windows oppure (in Macintosh) informazioni dal file di inizializzazione dell'applicazione.

Sintassi

GetAllSettings(appname, section)

La sintassi della funzione GetAllSettings è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
appname	Obbligatoria. Espressione stringa contenente il nome dell'applicazione o del progetto per il quale vengono richieste le impostazioni di chiave. In Macintosh questo è il nome di file del file di inizializzazione nella cartella Preferenze della cartella Sistema.
section	Obbligatoria. Espressione stringa contenente il nome della sezione per la quale vengono richieste le impostazioni di chiave. GetAllSettings restituisce un valore Variant costituito da una matrice bidimensionale di stringhe contenenti tutte le impostazioni di chiave della sezione specificata e i valori corrispondenti.
Osservazioni

Se appname o section non esistono, la funzioneGetAllSettings restituisce un valore Variant non inizializzato.


Funzione GetSetting

Restituisce un valore di impostazione di chiave da una voce del registro di configurazione di Windows oppure (in Macintosh) informazioni dal file di inizializzazione dell'applicazione.

Sintassi

GetSetting(appname, section, key[, default])

La sintassi della funzione GetSetting è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
appname	Obbligatoria. Espressione stringa contenente il nome dell'applicazione o del progetto per il quale viene richiesta l'impostazione di chiave. In Macintosh questo è il nome di file del file di inizializzazione nella cartella Preferenze della cartella Sistema.
section	Obbligatoria. Espressione stringa contenente il nome della sezione nella quale viene individuata l'impostazione di chiave.
key	Obbligatoria. Espressione stringa contenente il nome dell'impostazione di chiave da restituire.
default	Facoltativa. Espressione contenente il valore da restituire nel caso in cui nell'impostazione di chiave non sia impostato alcun valore. Se default è omesso, viene considerato come una stringa di lunghezza zero ("").
Osservazioni

Se uno qualsiasi degli argomenti della funzione GetSetting non esiste, la funzione restituisce il valore di default.


Istruzione SaveSetting

Salva o crea una voce per un'applicazione nel registro di configurazione di Windows oppure (in Macintosh) informazioni dal file di inizializzazione dell'applicazione.

Sintassi

SaveSetting appname, section, key, setting

La sintassi dell'istruzione SaveSetting è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
appname	Obbligatoria. Espressione stringa contenente il nome dell'applicazione o del progetto a cui si riferisce l'impostazione. In Macintosh questo è il nome di file del file di inizializzazione nella cartella Preferenze della cartella Sistema.
section	Obbligatoria. Espressione stringa contenente il nome della sezione nella quale viene salvata l'impostazione di chiave.
key	Obbligatoria. Espressione stringa contenente il nome dell'impostazione di chiave salvata.
setting	Obbligatoria. Espressione contenente il valore sul quale viene impostato l'argomento key.
Osservazioni

Se non è possibile salvare l'impostazione di chiave, verrà generato un errore.


Esempio di funzione Chr

In questo esempio la funzione Chr viene utilizzata per restituire il carattere associato al codice di carattere specificato.

Dim MyChar

MyChar = Chr(65)	' Restituisce A.

MyChar = Chr(97)	' Restituisce a.

MyChar = Chr(62)	' Restituisce >.

MyChar = Chr(37)	' Restituisce %.


Esempio di funzione Format

In questo esempio vengono illustrati vari utilizzi della funzione Format per formattare i valori utilizzando sia formati predefiniti che formati definiti dall'utente. Per quanto riguarda il separatore di data (/), il separatore di ora (:) e i valori letterali AM/PM, il formato dell'output effettivamente visualizzato dipenderà dalle impostazioni internazionali del sistema in cui si esegue il codice. Quando date e orari vengono visualizzati in ambiente di sviluppo, verranno utilizzati il formato breve di data e il formato breve di ora delle impostazioni internazionali del codice. Quando date e orari vengono visualizzati dal codice in esecuzione, verranno utilizzati i formati brevi di data e ora delle impostazioni internazionali del sistema. Nell'esempio seguente, le impostazioni internazionali sono Italia/Italiano.

MyTime e MyDate verranno visualizzate nell'ambiente di sviluppo utilizzando le impostazioni correnti di sistema per il formato breve di data e il formato breve di ora.

Dim MyTime, MyDate, MyStr

MyTime = #17:04:23#

MyDate = #Gennaio 27, 1993#

' Restituisce l'ora corrente di sistema nel formato

' esteso impostato nel sistema.

MyStr = Format(Time, "Long Time")

' Restituisce la data corrente di sistema nel formato

' esteso impostato nel sistema.

MyStr = Format(Date, "Long Date")

MyStr = Format(MyTime, "h:m:s")	' Restituisce "17.04.23".

MyStr = Format(MyTime, "hh:mm:ss AMPM")	' Restituisce "05.04.23".

MyStr = Format(MyDate, "dddd, mmm d yyyy")	' Restituisce "mercoledì, gen 27 1993".

' Se il formato non viene indicato, viene restituita una stringa.

MyStr = Format(23)	' Restituisce "23".

' Formati definiti dall'utente.

MyStr = Format(5459.4, "##,##0.00")	' Restituisce "5.459,40".

MyStr = Format(334.9, "###0.00")	' Restituisce "334,90".

MyStr = Format(5, "0.00%")	' Restituisce "500,00%".

MyStr = Format("SALVE", "<")	' Restituisce "salve".

MyStr = Format("Ecco", ">")	' Restituisce "ECCO".


Esempio di funzione Hex

In questo esempio la funzione Hex viene utilizzata per restituire il valore esadecimale di un numero.

Dim MyHex

MyHex = Hex(5)	' Restituisce 5.

MyHex = Hex(10)	' Restituisce A.

MyHex = Hex(459)	' Restituisce 1CB.


Esempio di funzione InStr

In questo esempio la funzione InStr viene utilizzata per restituire la posizione della prima occorrenza di una stringa all'interno di un'altra.

Dim SearchString, SearchChar, MyPos

SearchString ="XXpXXpXXPXXP"	' Stringa in cui eseguire la ricerca.

SearchChar = "P"	' Cerca "P".

' Confronto testuale a partire dalla posizione 4. Restituisce 6.

MyPos = Instr(4, SearchString, SearchChar, 1)

' Confronto binario a partire dalla posizione 1. Restituisce 9.

MyPos = Instr(1, SearchString, SearchChar, 0)

' Il confronto predefinito è binario (l'ultimo

' argomento viene omesso).

MyPos = Instr(SearchString, SearchChar)	' Restituisce 9.

MyPos = Instr(1, SearchString, "W")	' Restituisce 0.


Esempio di funzione LCase

In questo esempio la funzione LCase viene utilizzata per restituire una stringa in lettere minuscole.

Dim UpperCase, LowerCase

Uppercase = "Salve Gente 1234"	' Stringa da convertire.

Lowercase = Lcase(UpperCase)	' Restituisce "salve gente 1234".


Esempio di funzione Left

In questo esempio la funzione Left viene utilizzata per restituire un numero specificato di caratteri di una stringa a partire da sinistra.

Dim AnyString, MyStr

AnyString = "Salve gente"	' Definisce la stringa.

MyStr = Left(AnyString, 1)	' Restituisce "S".

MyStr = Left(AnyString, 7)	' Restituisce "Salve g".

MyStr = Left(AnyString, 20)	' Restituisce "Salve gente".


Esempio di funzione Len

Nel primo esempio Len viene utilizzata per restituire il numero di caratteri di una stringa o il numero di byte necessari per archiviare una variabile. Il blocco di istruzioni Type...End Type che definisce CustomerRecord deve essere preceduto dalla parola chiave Private se inserito in un modulo di classe. In un modulo standard, un'istruzione Type può essere Public.

Type CustomerRecord	' Definisce il tipo dell'utente.

ID As Integer	' Inserisce questa definizione in

Name As String * 10	' un modulo standard.

Address As String * 30

End Type

Dim Customer As CustomerRecord	' Dichiara le variabili.

Dim MyInt As Integer, MyCur As Currency

Dim MyString, MyLen

MyString = "Salve gente"	' Inizializza la variabile.

MyLen = Len(MyInt)	' Restituisce 2.

MyLen = Len(Customer)	' Restituisce 42.

MyLen = Len(MyString)	' Restituisce 11.

MyLen = Len(MyCur)	' Restituisce 8.

Nel secondo esempio vengono utilizzate LenB e una funzione definita dall'utente (LenMbcs) per restituire il numero di caratteri da un byte in una stringa se la stringa viene rappresentata dal codice ANSI.

Function LenMbcs (ByVal str as String)

LenMbcs = LenB(StrConv(str, vbFromUnicode))

End Function

Dim MyString, MyLen

MyString = "ABc"

' Dove "A" e "B" sono DBCS e "c" è SBCS.

MyLen = Len(MyString)

' Restituisce 3 - 3 caratteri nella stringa.

MyLen = LenB(MyString)

' Restituisce 6 - 6 byte utilizzati per Unicode.

MyLen = LenMbcs(MyString)

' Restituisce 5 - 5 byte utilizzati per ANSI.


Esempio di istruzione LSet

In questo esempio l'istruzione LSet viene utilizzata per allineare a sinistra una stringa contenuta in una variabile stringa. È consigliabile non utilizzare LSet per copiare una variabile di tipo definito dall'utente su una variabile di altro tipo, ma compatibile, definito dall'utente. A causa della differenza tra la struttura dei dati nelle diverse piattaforme, questa operazione, pur essendo supportata, potrebbe non essere trasferibile.

Dim MyString

MyString = "0123456789"	' Inizializza la stringa.

Lset MyString = "<-Sinistra"	' MyString contiene "<-Sinistra    ".


Esempio di funzioni LTrim, RTrim e Trim

In questo esempio la funzione LTrim viene utilizzata per eliminare gli spazi iniziali e la funzione RTrim per eliminare gli spazi finali da una variabile stringa. La funzione Trim consente di eliminare entrambi i tipi di spazi.

Dim MyString, TrimString

MyString = "  <-Elimina->  "	' Inizializza la stringa.

TrimString = LTrim(MyString)	' TrimString = "<-Elimina->  ".

TrimString = RTrim(MyString)	' TrimString = "  <-Elimina->".

TrimString = LTrim(RTrim(MyString))	' TrimString = "<-Elimina->".

' Utilizzando la funzione Trim si ottiene lo stesso risultato.

TrimString = Trim(MyString)	' TrimString = "<-Elimina->".


Esempio di funzione Mid

Nel primo esempio la funzione Mid viene utilizzata per restituire un numero specificato di caratteri da una stringa.

Dim MyString, FirstWord, LastWord, MidWords

MyString = "Demo funzione Mid"	' Crea una stringa di testo.

FirstWord = Mid(MyString, 1, 4)	' Restituisce "Demo".

LastWord = Mid(MyString, 15, 3)	' Restituisce "Mid".

MidWords = Mid(MyString, 6)	' Restituisce "funzione Mid".

Nel secondo esempio vengono utilizzate MidB e una funzione definita dall'utente (MidMbcs) per restituire anche in questo caso caratteri da una stringa. Questo esempio è diverso in quanto la stringa di input è in codice ANSI e la lunghezza è in byte.

Function MidMbcs(ByVal str as String, start, length)

MidMbcs = StrConv(MidB(StrConv(str, vbFromUnicode), start, length), vbUnicode)

End Function

Dim MyString

MyString = "AbCdEfG"

' Dove "A", "C", "E" e "G" sono DBCS e "b", "d",

' e "f" sono SBCS.

MyNewString = Mid(MyString, 3, 4)

' Restituisce ""CdEf"

MyNewString = MidB(MyString, 3, 4)

' Restituisce ""bC"

MyNewString = MidMbcs(MyString, 3, 4)

' Restituisce "bCd"


Esempio di istruzione Mid

In questo esempio l'istruzione Mid viene utilizzata per sostituire un numero specificato di caratteri in una variabile stringa con i caratteri di un'altra stringa.

Dim MyString

MyString = "Il gatto salta"	' Inizializza la stringa.

Mid(MyString, 4, 5) = "pesce"	' MyString = "Il pesce salta".

Mid(MyString, 4) = "tonno"	' MyString = "Il tonno salta".

Mid(MyString, 4) = "leone dorme"	' MyString = "Il leone dorme".

Mid(MyString, 4, 5) = "corvo"	' MyString = "Il corvo dorme".


Esempio di funzione Oct

In questo esempio la funzione Oct viene utilizzata per restituire il valore ottale di un numero.

Dim MyOct

MyOct = Oct(4) 	' Restituisce 4.

MyOct = Oct(8)	' Restituisce 10.

MyOct = Oct(459)	' Restituisce 713.


Esempio di funzione Right

In questo esempio la funzione Right viene utilizzata per restituire un numero specificato di caratteri di una stringa a partire da destra.

Dim AnyString, MyStr

AnyString = "Salve gente"	' Definisce la stringa.

MyStr = Right(AnyString, 1)	' Restituisce "e".

MyStr = Right(AnyString, 6)	' Restituisce " gente".

MyStr = Right(AnyString, 20)	' Restituisce "Salve gente".


Esempio di istruzione RSet

In questo esempio l'istruzione RSet viene utilizzata per allineare a destra una stringa contenuta in una variabile stringa.

Dim MyString

MyString = "0123456789"	' Inizializza la stringa.

Rset MyString = "Destra->"	' MyString contiene "   Destra->".


Esempio di funzione Space

In questo esempio la funzione Space viene utilizzata per restituire una stringa costituita da un numero specificato di spazi.

Dim MyString

' Restituisce una stringa con 10 spazi.

MyString = Space(10)

' Inserisce 10 spazi tra 2 stringhe.

MyString = "Salve" & Space(10) & "gente"


Esempio di funzione Str

In questo esempio la funzione Str viene utilizzata per restituire una rappresentazione di un numero in forma di stringa. Quando un numero viene convertito in stringa, viene sempre riservato uno spazio iniziale per il segno.

Dim MyString

MyString = Str(459)	' Restituisce " 459".

MyString = Str(-459.65)	' Restituisce "-459,65".

MyString = Str(459.001)	' Restituisce " 459,001".


Esempio di funzione StrComp

In questo esempio la funzione StrComp viene utilizzata per restituire i risultati di un confronto di stringhe. Se come terzo argomento viene indicato 1, verrà eseguito un confronto alfabetico. Se il terzo argomento è 0 o viene omesso, verrà eseguito un confronto binario.

Dim MyStr1, MyStr2, MyComp

MyStr1 = "ABCD": MyStr2 = "abcd"	' Definisce le variabili.

MyComp = StrComp(MyStr1, MyStr2, 1)	' Restituisce 0.

MyComp = StrComp(MyStr1, MyStr2, 0)	' Restituisce -1.

MyComp = StrComp(MyStr2, MyStr1)	' Restituisce 1.


Esempio di funzione String

In questo esempio la funzione String viene utilizzata per restituire stringhe di caratteri ripetuti della lunghezza specificata.

Dim MyString

MyString = String(5, "*")	' Restituisce "*****".

MyString = String(5, 42)	' Restituisce "*****".

MyString = String(10, "ABC")	' Restituisce "AAAAAAAAAA".


Esempio di funzione UCase

In questo esempio la funzione UCase viene utilizzata per restituire una stringa convertita in maiuscole.

Dim LowerCase, UpperCase

LowerCase = "Salve gente 1234"	' Stringa da convertire.

UpperCase = UCase(LowerCase)	' Restituisce "SALVE GENTE 1234".


Esempio di funzione StrConv

In questo esempio la funzione StrConv viene utilizzata per convertire una stringa Unicode in una stringa ANSI.

Dim i As Long

Dim x() As Byte

x = StrConv("ABCDEFG", vbFromUnicode)	' Converte la stringa.

For i = 0 To UBound(x)

Debug.Print x(i)

Next


Funzione Chr

Restituisce un valore String che contiene il carattere associato al codice di carattere specificato.

Sintassi

Chr(codicecarattere)

L'argomento obbligatorio codicecarattere è un valore Long che identifica un carattere.

Osservazioni

I numeri da 0 a 31 corrispondono ai codici ASCII standard non stampabili. La funzione Chr(10), ad esempio, restituisce un carattere di avanzamento riga. L'intervallo valido per codicecarattere è in genere compreso fra 0 e 255. Nei sistemi DBCS l'intervallo valido per codicecarattere è compreso fra -32768 e 65535.

Nota   La funzione ChrB viene utilizzata con i dati byte contenuti in un valore String. Anziché restituire un carattere, composto da uno o due byte, la funzione ChrB restituisce sempre un solo byte. La funzione ChrW restituisce un valore String contenente il carattere Unicode tranne che nelle piattaforme che non supportano Unicode. In questo caso le funzioni sono identiche a quelle della funzione Chr.

Nota   Visual Basic per Macintosh non supporta stringhe Unicode. Di conseguenza, a differenza dell'ambiente Windows, la funzione ChrW(n) non restituisce tutti i caratteri Unicode per n valori compresi tra 128 e 65.535, ma individua i valori Unicode n più probabili maggiori di 127. Non utilizzare la funzione ChrW nell'ambiente Macintosh.


Funzione Format

Restituisce un valore Variant (String) che contiene un'espressione formattata in base alle istruzioni contenute in un'espressione di formato.

Sintassi

Format(espressione[, formato[, primogiornosettimana[, primasettimanaanno]]])

La sintassi della funzione Format è composta dalle seguenti parti:

Parte	Descrizione
espressione	Obbligatoria. Qualsiasi espressione valida
formato	Facoltativa. Espressione di formato valida, predefinita o definita dall'utente
primogiornosettimana	Facoltativa. Costante che specifica il primo giorno della settimana.
primasettimanaanno	Facoltativa. Costante che specifica la prima settimana dell'anno.
Impostazioni

Le possibili impostazioni dell'argomento primogiornosettimana sono:

Costante	Valore	Descrizione
vbUseSystem	0	Utilizza l'impostazione NLS API.
VbSunday	1	Domenica (impostazione predefinita)
vbMonday	2	Lunedì
vbTuesday	3	Martedì
vbWednesday	4	Mercoledì
vbThursday	5	Giovedì
vbFriday	6	Venerdì
vbSaturday	7	Sabato
Le possibili impostazioni dell'argomento primasettimanaanno sono:

Costante	Valore	Descrizione
vbUseSystem	0	Utilizza l'impostazione NLS API.
vbFirstJan1	1	Inizia dalla settimana che include il 1 gennaio (impostazione predefinita).
vbFirstFourDays	2	Inizia dalla prima settimana dell'anno che include almeno quattro giorni.
vbFirstFullWeek	3	Inizia dalla prima settimana completa dell'anno.
Osservazioni

Per formattare	Procedura
Numeri	Utilizzare formati numerici predefiniti o creare formati numerici definiti dall'utente.
Date e ore	Utilizzare formati predefiniti di data e ora o creare formati di data e ora definiti dall'utente.
Numeri seriali di data e ora	Utilizzare formati di data e ora o formati numerici.
Stringhe	Creare formati di stringa definiti dall'utente.
Se si cerca di formattare un numero senza specificare formato, le funzioni Format e Str avranno caratteristiche analoghe, anche se la prima tiene in considerazione le impostazioni internazionali. I numeri positivi formattati come stringhe utilizzando Format non hanno tuttavia lo spazio iniziale per la visualizzazione del segno del valore, mentre quelli convertiti mediante la funzione Str conservano lo spazio iniziale.

Se si formatta una stringa numerica non localizzata, è consigliabile utilizzare un formato numerico definito dall'utente in modo da assicurare che il formato ottenuto sia quello desiderato.

Nota   Se la proprietà Calendar è impostata sul calendario Gregoriano e l'argomento formato specifica la formattazione della data, è necessario specificare un'espressione Gregoriana. Se invece la proprietà Calendar è impostata sul calendario è Hijri, è necessario specificare un'espressione Hijri.

Se il calendario è Gregoriano, il significato dei simboli dell'espressione formato rimane invariato. Se invece il calendario è Hijri, il significato dei simboli del formato data, ad esempio dddd, mmm, yyyy, rimane invariato ma viene applicato al calendario Hijri. I simboli di formato sono sempre in inglese. I simboli che determinano la visualizzazione di testo, ad esempio AM e PM, visualizzano la stringa (in inglese o in arabo) associata a tali simboli. L'intervallo di determinati simboli risulta diverso quando viene impostato il calendario Hijri.

Simbolo	Intervallo di valori
d	Da 1 a 30
dd	Da 1 a 30
ww	Da 1 a 51
mmm	Visualizza il nome completo dei mesi (per i nomi dei mesi Hijri non è disponibile alcuna abbreviazione).
y	Da 1 a 355
yyyy	Da 100 a 9666


Formati numerici predefiniti (funzione Format)

Nella tabella che segue sono riportati i nomi dei formati numerici predefiniti:

Nome formato	Descrizione
General Number	Visualizza il numero senza separatori delle migliaia.
Currency	Visualizza il numero con il separatore delle migliaia, se necessario; visualizza due cifre a destra del separatore decimale. Si noti che l'output è basato sulle impostazioni internazionali del sistema.
Fixed	Visualizza almeno una cifra a sinistra e due cifre a destra del separatore decimale.
Standard	Visualizza il numero con il separatore delle migliaia, almeno una cifra a sinistra e due cifre a destra del separatore decimale.
Percent	Visualizza il numero moltiplicato per 100 con il segno di percentuale (%) aggiunto a destra; visualizza sempre due cifre a destra del separatore decimale.
Scientific	Utilizza la notazione scientifica standard.
Yes/No	Visualizza "No" se il numero è 0, in caso contrario visualizza "Sì".
True/False	Visualizza False se il numero è 0; in caso contrario visualizza True.
On/Off	Visualizza "Off" se il numero è 0, in caso contrario visualizza "On".


Formati numerici definiti dall'utente (funzione Format)

Nella tabella che segue sono indicati i caratteri che è possibile utilizzare per creare formati numerici definiti dall'utente:

Carattere	Descrizione
Nessuno	Visualizza il numero senza alcuna formattazione.
(0)	Segnaposto di cifra. Visualizza una cifra o uno zero. Se l'espressione contiene una cifra nella posizione in cui compare lo 0 nella stringa del formato, tale cifra verrà visualizzata; in caso contrario in tale posizione verrà visualizzato uno zero. Se nell'espressione di formato il numero è composto da una quantità di cifre inferiore agli zeri (a destra o a sinistra del separatore decimale), verranno visualizzati zeri iniziali o finali. Se il numero include più cifre a destra del separatore decimale di quanti siano gli zeri a destra del separatore decimale, il numero verrà arrotondato di tanti decimali quanti sono gli zeri. Se il numero include più cifre a sinistra del separatore decimale di quanti siano gli zeri a sinistra del separatore decimale, le cifre in più verranno visualizzate senza modifiche.
(#)	Segnaposto di cifra. Visualizza una cifra o non visualizza niente. Se l'espressione include una cifra nella posizione in cui appare il simbolo di numero (#) nella stringa di formato tale cifra verrà visualizzata; in caso contrario in tale posizione non verrà visualizzato niente. Questo simbolo ha la stessa funzione del segnaposto di cifra 0. La sola differenza è che gli zeri iniziali e finali non vengono visualizzati se il numero contiene un numero di cifre uguale o minore rispetto ai caratteri # presenti a destra o a sinistra del separatore decimale nell'espressione di formato.
(.)	Segnaposto decimale. Il separatore decimale può essere una virgola o un punto a seconda delle impostazioni internazionali. Il segnaposto decimale determina il modo in cui molte cifre vengono visualizzate a sinistra e a destra del separatore decimale. Se l'espressione di formato contiene solo segni di numero a sinistra di questo simbolo, i numeri minori di 1 inizieranno con un separatore decimale. Se si desidera che venga sempre visualizzato uno zero iniziale per i numeri frazionari, utilizzare invece 0 come primo segnaposto di cifra a sinistra del separatore decimale. Il carattere effettivo utilizzato come segnaposto decimale nell'output formattato dipende dal formato numerico impostato nel sistema in uso.
(%)	Segnaposto percentuale. L'espressione è moltiplicata per 100. Il carattere di percentuale (%) verrà inserito nella posizione in cui appare nella stringa di formato.
(,)	Il separatore delle migliaia può essere una virgola o un punto a seconda delle impostazioni internazionali. Il separatore delle migliaia separa le migliaia dalle centinaia nei numeri in cui sono presenti quattro o più cifre a sinistra del separatore decimale. L'uso normale del separatore delle migliaia viene specificato qualora il formato contenga un separatore delle migliaia preceduto e seguito da segnaposto di cifra (0 o #). Due separatori delle migliaia adiacenti o un separatore delle migliaia immediatamente a sinistra del separatore decimale (che sia o meno specificato un decimale), significa "modificare il numero dividendolo per 1000 e arrotondandolo adeguatamente". È possibile, ad esempio, utilizzare la stringa di formato "##0,," per rappresentare 100 milioni come 100. I numeri inferiori a 1 milione sono visualizzati come 0. Due separatori delle migliaia adiacenti in una qualsiasi posizione diversa da quella immediatamente a sinistra del separatore decimale, sono trattati semplicemente come un'indicazione dell'uso del separatore delle migliaia. Il carattere effettivo utilizzato come separatore delle migliaia nell'output formattato dipende dal formato numerico impostato nel sistema in uso.
(:)	Separatore di ora. In alcune impostazioni internazionali possono essere utilizzati altri caratteri come separatori di ora. Il separatore di ora separa ore, minuti e secondi quando vengono formattati i valori di orario. Il carattere effettivo utilizzato come separatore di ora nell'output formattato è determinato dalle impostazioni del sistema in uso.
(/)	Separatore di data. In alcune impostazioni internazionali possono essere utilizzati altri caratteri come separatori di data. Il separatore di data separa giorno, mese e anno quando vengono formattati i valori di data. Il carattere effettivo utilizzato come separatore di data nell'output formattato è determinato dalle impostazioni del sistema in uso.
(E- E+ e- e+)	Formato in notazione scientifica. Se l'espressione di formato contiene almeno un segnaposto di cifra (0 o #) a destra di E-, E+, e- o e+, il numero viene visualizzato in formato di notazione scientifica e vengono inseriti E o e fra il numero e il suo esponente. Il numero di segnaposto di cifra presente a destra determina il numero di cifre dell'esponente. Utilizzare E- o e- per inserire un segno meno accanto a esponenti negativi. Utilizzare E+ o e+ per inserire un segno meno accanto a esponenti negativi e un segno più accanto a esponenti positivi.
- + $ ( )	Visualizzazione di un carattere letterale. Per visualizzare un carattere diverso da quelli elencati, farlo precedere da una barra rovesciata (\) o racchiuderlo fra virgolette doppie (" ").
(\)	Visualizzazione del carattere successivo della stringa di formato. Per visualizzare un carattere con un significato speciale come carattere letterale, farlo precedere da una barra rovesciata. La barra rovesciata, tuttavia, non viene visualizzata. Utilizzare una barra rovesciata equivale a racchiudere il carattere successivo fra virgolette doppie. Per visualizzare la barra rovesciata utilizzarne due consecutive (\\). Esempi di caratteri che non possono essere visualizzati come caratteri letterali sono i caratteri di formattazione di data e ora (a, c, d, h, m, n, p, q, s, t , w, y, /:), i caratteri di formattazione numerica (#, 0, %, E, e, virgola e punto) e i caratteri di formattazione di stringa (@, &, <, > e !).
("ABC")	Visualizzazione della stringa fra virgolette doppie (" "). Per includere una stringa come argomento format all'interno del codice, occorre utilizzare la funzione Chr(34) per racchiudere il testo (34 è il codice di carattere per le virgolette doppie (")).


Formati diversi per valori numerici diversi (funzione Format)

Un'espressione di formato definita dall'utente per valori numerici può avere da una a quattro sezioni separate da punti e virgola. Se l'argomento formato contiene uno dei formati numerici predefiniti, è consentita solo una sezione.

Utilizzando	Il risultato è
Una sola sezione	L'espressione di formato è valida per tutti i valori.
Due sezioni	La prima sezione è valida per i valori positivi e gli zeri, la seconda per i valori negativi.
Tre sezioni	La prima sezione è valida per i valori positivi, la seconda per i valori negativi e la terza per gli zeri.
Quattro sezioni	La prima sezione è valida per i valori positivi, la seconda per i valori negativi, la terza per gli zeri e la quarta per i valori Null.
L'esempio che segue include due sezioni: la prima definisce il formato per i valori positivi e gli zeri, la seconda definisce il formato per i valori negativi.

"$#,##0;($#,##0)"

Se si includono punti e virgola senza indicare nulla fra essi, la sezione mancante verrà scritta utilizzando il formato del valore positivo. Il formato che segue, ad esempio, visualizza i valori positivi e negativi utilizzando il formato della prima sezione e visualizza "Zero" se il valore è zero.

"$#,##0;;\Z\e\r\o"


Esempi di formati numerici definiti dall'utente

Di seguito sono riportati alcuni esempi di espressioni di formato numerico. Si presuppone che le impostazioni internazionali siano quelle italiane. La prima colonna contiene le stringhe di formato. Nelle altre colonne è riportato l'output che risulta se i dati formattati possiedono il valore indicato nell'intestazione della rispettiva colonna.

Formato (format)	Positivo 5	Negativo 5	Decimale 0,5	Null
Stringa di lunghezza zero ("")	5	-5	0.5
0	5	-5	1
0.00	5.00	-5.00	0.50
#,##0	5	-5	1
#,##0.00;;;Niente	5.00	-5.00	0.50	Niente
$#,##0;($#,##0)	$5	($5)	$1
$#,##0.00;($#,##0.00)	$5.00	($5.00)	$0.50
0%	500%	-500%	50%
0.00%	500.00%	-500.00%	50.00%
0.00E+00	5.00E+00	-5.00E+00	5.00E-01
0.00E-00	5.00E00	-5.00E00	5.00E-01


Formati predefiniti di data e ora (funzione Format)

La tabella che segue contiene i formati predefiniti di data e ora:

Nome formato	Descrizione
General Date	Visualizza una data e/o un'ora. Per i numeri reali visualizza una data e un'ora (ad esempio 3/4/93 17.34); se la parte frazionaria non è presente visualizza solo una data (ad esempio 3/4/93); se la parte intera non è presente visualizza solo l'ora (ad esempio 17.34). La visualizzazione della data è determinata dalle impostazioni del sistema in uso.
Long Date	Visualizza una data in base al formato di data estesa del sistema in uso.
Medium Date	Visualizza una data utilizzando il formato di data breve adeguato della versione dell'applicazione host.
Short Date	Visualizza una data utilizzando il formato di data breve del sistema in uso.
Long Time	Visualizza un'ora utilizzando il formato di ora estesa del sistema in uso. Include le ore, i minuti e i secondi.
Medium Time	Visualizza l'ora nel formato breve di 12 ore, indicando le ore, i minuti e l'identificatore AM/PM.
Short Time	Visualizza l'ora utilizzando il formato di 24 ore (ad esempio 17.45).


Formati di data e ora definiti dall'utente (funzione Format)

La tabella che segue contiene i caratteri utilizzabili per creare formati di data e ora definiti dall'utente:

Carattere	Descrizione
(:)	Separatore di ora. In alcune impostazioni internazionali, possono essere utilizzati come separatori di ora altri caratteri. Il separatore di ora separa ore, minuti e secondi quando vengono formattati i valori di ora. Il carattere effettivo utilizzato come separatore di ora nell'output formattato è determinato dalle impostazioni del sistema in uso.
(/)	Separatore di data. In alcune impostazioni internazionali possono essere utilizzati come separatori di data altri caratteri. Il separatore di data separa giorno, mese e anno quando vengono formattati i valori di data. Il carattere effettivo utilizzato come separatore di data nell'output formattato è determinato dalle impostazioni del sistema in uso.
c	Visualizza la data come ddddd e l'ora come ttttt, nell'ordine. Visualizza solo informazioni relative alla data se nel numero seriale della data non è presente una parte frazionaria; visualizza solo le informazioni relative all'ora se non è presente alcuna parte intera.
d	Visualizza il giorno come numero senza zero iniziale (1 – 31).
dd	Visualizza il giorno come numero con zero iniziale (01 – 31).
ddd	Visualizza il giorno abbreviato (dom – sab).
dddd	Visualizza il giorno per esteso (domenica – sabato).
ddddd	Visualizza una data completa (comprendente giorno, mese e anno), formattata in base alle impostazioni relative al formato di data breve del sistema in uso. Il formato di data breve predefinito è d/m/yy.
dddddd	Visualizza il numero seriale di una data come data completa (comprendente giorno, mese e anno), formattata in base alle impostazioni relative alla data estesa del sistema in uso. Il formato di data estesa predefinito è dd mmmm, yyyy.
aaaa	Equivale a dddd, ma corrisponde alla versione localizzata della stringa.
w	Visualizza il giorno della settimana come numero (1 per domenica-7 per sabato).
ww	Visualizza la settimana di un anno come numero (1 – 54).
m	Visualizza il mese come numero senza zero iniziale (1 – 12). Se m segue immediatamente h o hh, viene visualizzato il valore relativo ai minuti anziché il mese.
mm	Visualizza il mese come numero con zero iniziale (01 – 12). Se m segue immediatamente h o hh, viene visualizzato il valore relativo ai minuti anziché il mese.
mmm	Visualizza il mese abbreviato (gen – dic).
mmmm	Visualizza il mese con il relativo nome per esteso (gennaio – dicembre).
oooo	Equivale a mmmm, ma corrisponde alla versione localizzata della stringa.
q	Visualizza il trimestre dell'anno come numero (1 – 4).
y	Visualizza il giorno dell'anno come numero (1 – 366).
yy	Visualizza l'anno come numero di due cifre (00 – 99).
yyyy	Visualizza l'anno come numero di quattro cifre (100 – 9999).
h	Visualizza l'ora come numero senza zero iniziale (0 – 23).
Hh	Visualizza l'ora come numero con zero iniziale (00 – 23).
N	Visualizza i minuti come numero senza zero iniziale (0 – 59).
Nn	Visualizza i minuti come numero con zero iniziale (00 – 59).
S	Visualizza i secondi come numero senza zero iniziale (0 – 59).
Ss	Visualizza i secondi come numero con zero iniziale (00 – 59).
t t t t t	Visualizza un'ora come ora completa, ovvero vengono indicati l'ora, i minuti e i secondi, formattata con il separatore di ora definito dal formato di ora impostato nel sistema in uso. Viene visualizzato uno zero iniziale se è selezionata l'opzione Zero iniziale e l'ora è antecedente alle 10.00. Il formato di ora predefinito è h:mm:ss.
AM/PM	Utilizza il formato 12 ore e visualizza AM in maiuscolo accanto alle ore precedenti mezzogiorno e PM in maiuscolo accanto alle ore comprese fra mezzogiorno e le 23.59.
am/pm	Utilizza il formato 12 ore e visualizza am in minuscolo accanto alle ore precedenti mezzogiorno e pm in minuscolo accanto alle ore comprese fra mezzogiorno e le 23.59.
A/P	Utilizza il formato 12 ore e visualizza una A maiuscola accanto alle ore precedenti mezzogiorno e una P maiuscola accanto alle ore comprese fra mezzogiorno e le 23.59.
a/p	Utilizza il formato 12 ore e visualizza una a minuscola accanto alle ore precedenti mezzogiorno e una p minuscola accanto alle ore comprese fra mezzogiorno e le 23.59.
AMPM	Utilizza il formato 12 ore e visualizza la stringa di caratteri AM definita dal sistema in uso accanto alle ore precedenti mezzogiorno e la stringa di caratteri PM definita dal sistema in uso accanto alle ore comprese fra mezzogiorno e le 23.59. AM e PM possono essere sia in maiuscolo che in minuscolo, tuttavia le maiuscole e minuscole della stringa visualizzata vengono adeguate alla stringa definita dalle impostazioni del sistema in uso. Il formato predefinito è AM/PM.


Esempi di formati di data e ora definiti dall'utente

Di seguito sono elencati esempi di formati di data e ora definiti dall'utente per la data 7 dicembre 1958:

Formato	Visualizzazione
d/m/yy	7/12/58
d-mmm	7-dic
d-mmmm-yy	7-dicembre-58
d mmmm	7 dicembre
mmmm yy	dicembre 58
hh:mm AM/PM	08.50 PM
h:mm:ss a/p	8.50.35 p
h:mm	20.50
h:mm:ss	20.50.35
d/m/yy h:mm	7/12/58 20.50


Formati stringa definiti dall'utente (funzione Format)

Per creare un'espressione di formato per le stringhe è possibile utilizzare uno qualsiasi dei caratteri che seguono:

Carattere	Descrizione
@	Segnaposto di carattere. Visualizza un carattere o uno spazio. Se la stringa include un carattere nella posizione in cui compare @ nella stringa di formato, tale carattere verrà visualizzato, in caso contrario in tale posizione verrà visualizzato uno spazio. I segnaposto vengono riempiti da destra a sinistra, a meno che non vi sia un punto esclamativo (!) nella stringa di formato.
&	Segnaposto di carattere. Visualizza un carattere oppure nulla. Se la stringa include un carattere nella posizione in cui compare &, tale carattere verrà visualizzato; in caso contrario non verrà visualizzato nulla. I segnaposto vengono riempiti da destra a sinistra, a meno che non vi sia un punto esclamativo (!) nella stringa di formato.
<	Applica le minuscole. Visualizza tutti i caratteri in minuscolo.
>	Applica le maiuscole. Visualizza tutti i caratteri in maiuscolo.
!	Applica il riempimento da sinistra a destra dei segnaposto. L'impostazione predefinita è il riempimento da destra a sinistra.


Formati diversi per valori stringa diversi (funzione Format)

Un'espressione di formato per stringhe può avere una sezione oppure due sezioni separate da un punto e virgola.

Utilizzando	Il risultato è
Una sola sezione	Il formato è valido per tutti i dati di stringa.
Due sezioni	La prima sezione è valida per i dati di stringa, la seconda per valori Null e per stringhe di lunghezza zero ("").


Funzione Hex

Restituisce un valore String che rappresenta il valore esadecimale di un numero.

Sintassi

Hex(numero)

L'argomento obbligatorio numero è qualsiasi espressione numerica o espressione stringa valida.

Osservazioni

Se numero non è già un numero intero, verrà arrotondato al numero intero più prossimo prima di essere valutato.

Se numero è	Hex restituisce
Null	Null
Empty	Zero (0)
Qualsiasi altro numero	Fino a otto caratteri esadecimali
È possibile rappresentare direttamente i numeri esadecimali facendo precedere i numeri nell'intervallo appropriato da &H. Ad esempio, &H10 rappresenta il decimale 16 in notazione esadecimale.


Funzione InStr

Restituisce un valore Variant (Long) che specifica la posizione della prima occorrenza di una stringa all'interno di un'altra.

Sintassi

InStr([inizio, ]stringa1, stringa2[, confronto])

La sintassi della funzione InStr è composta dai seguenti argomenti:

Parte	Descrizione
inizio	Facoltativa. Espressione numerica che definisce la posizione di inizio per ciascuna ricerca. Se omessa, la ricerca inizia dalla posizione del primo carattere. Se inizio include dati Null, verrà generato un errore. L'argomento è obbligatorio se viene specificato confronto.
stringa1	Obbligatoria. Espressione stringa oggetto della ricerca.
stringa2	Obbligatoria. Espressione stringa cercata.
confronto	Facoltativa. Specifica il tipo di confronto di stringa. Se confronto è Null, verrà generato un errore. Se confronto viene omesso, per determinare il tipo di confronto verrà utilizzata l'impostazione di Option Compare. Specificare un identificatore locale (LCID) valido in modo che nel confronto vengano utilizzate le regole specifiche della lingua.
Impostazioni

Le possibili impostazioni dell'argomento confronto sono:

Costante	Valore	Descrizione
vbUseCompareOption	-1	Esegue un confronto utilizzando l'impostazione dell'istruzione Option Compare.
vbBinaryCompare	0	Esegue un confronto binario.
vbTextCompare	1	Esegue un confronto di testo.
vbDatabaseCompare	2	Solo per Microsoft Access. Esegue un confronto in base alle informazioni del database.
Valori restituiti

Se	Valore restituito
stringa1 è di lunghezza zero	0
stringa1 è Null	Null
stringa2 è di lunghezza zero	inizio
stringa2 è Null	Null
stringa2 non viene trovata	0
stringa2 viene trovata in stringa1	Posizione in cui viene trovata la corrispondenza
inizio > stringa2	0
Osservazioni

La funzione InStrB viene utilizzata con i dati byte contenuti in una stringa. Anziché restituire la posizione del carattere della prima occorrenza di una stringa all'interno di un'altra, InStrB restituisce la posizione del byte.


Funzione LCase

Restituisce un valore String convertito in minuscole.

Sintassi

LCase(stringa)

L'argomento obbligatorio stringa è una qualsiasi espressione stringa valida. Se stringa contiene Null, verrà restituito Null.

Osservazioni

Solo le lettere maiuscole vengono convertite in minuscole; tutte le lettere minuscole e i caratteri non letterali rimangono invariati.


Funzione Left

Restituisce un valore Variant (String) che contiene un numero specificato di caratteri di una stringa a partire da sinistra.

Sintassi

Left(string, length)

La sintassi della funzione Left è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
string	Obbligatoria. Espressione stringa dalla quale vengono restituiti i caratteri situati all'estrema sinistra. Se string contiene Null verrà restituito Null.
length	Obbligatoria. Variant (Long). Espressione numerica che indica quanti caratteri devono essere restituiti. Se è 0, verrà restituita una stringa di lunghezza zero (""). Se è maggiore o uguale al numero di caratteri presenti in string, verrà restituita l'intera stringa.
Osservazioni

Per determinare il numero di caratteri in string, utilizzare la funzione Len.

Nota   Utilizzare la funzione LeftB con i dati byte contenuti in una stringa. Anziché specificare il numero di caratteri da restituire, length specifica il numero di byte.


Funzione Len

Restituisce un valore Long che contiene il numero di caratteri presenti in una stringa o il numero di byte necessari per memorizzare una variabile.

Sintassi

Len(stringa | nomevariabile)

La sintassi della funzione Len è composta dalle seguenti parti:

Parte	Descrizione
stringa	Qualsiasi espressione stringa valida. Se stringa contiene Null, verrà restituito Null.
nomevariabile	Qualsiasi nome di variabile valido. Se nomevariabile contiene Null, verrà restituito Null. Se l'argomento nomevariabile è Variant, Len lo considera come String e restituisce sempre il numero di caratteri contenuti.
Osservazioni

È necessario specificare uno solo dei due argomenti possibili. Per i tipi definiti dall'utente Len restituisce le stesse dimensioni che verranno scritte su file.

Nota   Utilizzare la funzione LenB con i dati byte contenuti in una stringa, come nelle lingue con set di caratteri a doppio byte (DBCS). Anziché restituire il numero di caratteri di una stringa, LenB restituisce il numero di byte utilizzati per rappresentare la stringa. Per i tipi definiti dall'utente LenB restituisce le dimensioni in memoria, compresi i riempimenti tra gli elementi. Nel secondo blocco di codice dell'argomento di esempio della funzione Len viene utilizzata la funzione LenB.

Nota   È possibile che la funzione Len non consenta di determinare il numero effettivo di byte richiesti per la memorizzazione se utilizzata con stringhe di lunghezza variabile in tipi di dati definiti dall'utente.


Istruzione LSet

Allinea una stringa a sinistra all'interno di una variabile stringa, o copia una variabile di tipo definito dall'utente su una variabile di un altro tipo definito dall'utente.

Sintassi

LSet varstringa = stringa

LSet nomevariabile1 = nomevariabile2

La sintassi dell'istruzione LSet è composta dalle seguenti parti:

Parte	Descrizione
varstringa	Obbligatoria. Nome della variabile stringa
stringa	Obbligatoria. Espressione stringa da allineare a sinistra in varstringa.
nomevariabile1	Obbligatoria. Nome di variabile di tipo definito dall'utente sulla quale viene eseguita la copia.
nomevariabile2	Obbligatoria. Nome di variabile di tipo definito dall'utente dalla quale viene eseguita la copia.
Osservazioni

LSet sostituisce qualsiasi carattere eccedente in varstringa con uno spazio.

Se stringa è più lunga di varstringa, LSet trasferisce in varstringa solo i caratteri situati all'estrema sinistra, fino alla lunghezza di varstringa.

Avvertenza   Evitare di utilizzare LSet per la copia di una variabile di un tipo definito dall'utente in una variabile di un altro tipo definito dall'utente. Quando si copiano dati di un determinato tipo nello spazio riservato a dati di tipo diverso, potrebbero verificarsi risultati imprevisti.

Quando si copia una variabile di un tipo definito dall'utente in un'altra di tipo diverso, i dati binari di una variabile vengono semplicemente copiati nello spazio in memoria riservato alla seconda variabile e non vengono presi in considerazione i tipi di dati specificati per i vari elementi.


Funzioni LTrim, RTrim e Trim

Restituisce un valore Variant (String) contenente una copia di una stringa senza spazi iniziali (LTrim), spazi finali (RTrim) o senza spazi iniziali e finali (Trim).

Sintassi

LTrim(stringa)

RTrim(stringa)

Trim(stringa)

L'argomento obbligatorio stringa è qualsiasi espressione stringa valida. Se stringa contiene Null, verrà restituito Null.


Funzione Mid

Restituisce un valore Variant (String) che contiene un numero specificato di caratteri di una stringa.

Sintassi

Mid(string, start[, length])

La sintassi della funzione Mid è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
string	Obbligatoria. Espressione stringa dalla quale vengono restituiti i caratteri. Se string contiene Null, verrà restituito Null.
start	Obbligatoria. Long. Posizione di un carattere in string dalla quale inizia la parte che deve essere prelevata. Se start è superiore al numero di caratteri in string, Mid restituisce una stringa di lunghezza zero ("").
length	Facoltativa. Variant (Long). Numero di caratteri da restituire. Se omesso, o se nel testo vi sono meno caratteri che in length  (compreso il carattere di start), vengono restituiti tutti i caratteri dalla posizione start alla fine della stringa.
Osservazioni

Per determinare il numero di caratteri in string, utilizzare la funzione Len.

Nota   Utilizzare la funzione MidB con i dati byte contenuti in una stringa, come nelle lingue con set di caratteri a doppio byte. Anziché specificare il numero di caratteri, gli argomenti specificano il numero di byte. Nel secondo blocco di codice dell'argomento di esempio della funzione Mid viene utilizzata la funzione MidB.


Istruzione Mid

Sostituisce un numero specificato di caratteri in una variabile Variant (String) con caratteri di un'altra stringa.

Sintassi

Mid(varstringa, inizio[, lunghezza]) = stringa

La sintassi dell'istruzione Mid è composta dalle seguenti parti:

Parte	Descrizione
varstringa	Obbligatoria. Nome della variabile stringa da modificare.
inizio	Obbligatoria. Variant (Long). Posizione di un carattere in varstringa dalla quale inizia la sostituzione del testo.
lunghezza	Facoltativa. Variant (Long). Numero di caratteri da sostituire. Se omesso, viene utilizzata l'intera espressione stringa.
stringa	Obbligatoria. Espressione stringa che sostituisce parte di varstringa.
Osservazioni

Il numero di caratteri sostituiti è sempre minore o uguale al numero di caratteri in varstringa.

Nota   Utilizzare l'istruzione MidB con i dati byte contenuti in una stringa. In tale istruzione, inizio specifica la posizione del byte all'interno di varstringa dove ha inizio la sostituzione e lunghezza specifica il numero di byte da sostituire.


Funzione Oct

Restituisce un valore Variant (String) che rappresenta il valore ottale di un numero.

Sintassi

Oct(numero)

L'argomento obbligatorio numero è qualsiasi espressione numerica o espressione stringa valida.

Osservazioni

Se numero non è un numero intero, verrà arrotondato al numero intero più prossimo prima di essere valutato.

Se numero è	Oct restituisce
Null	Null
Empty	Zero (0)
Qualsiasi altro numero	Fino a 11 caratteri ottali
È possibile rappresentare direttamente i numeri ottali facendo precedere i numeri nell'intervallo appropriato da &O. Ad esempio, &O10 rappresenta il decimale 8 in notazione ottale.


Funzione Right

Restituisce un valore Variant (String) che contiene un numero specificato di caratteri di una stringa a partire da destra.

Sintassi

Right(string, length)

La sintassi della funzione Right è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
string	Obbligatoria. Espressione stringa dalla quale vengono restituiti i caratteri situati all'estrema destra. Se string contiene Null, verrà restituito Null.
length	Obbligatoria. Variant (Long). Espressione numerica che indica quanti caratteri devono essere restituiti. Se pari a 0 viene restituita una stringa di lunghezza zero (""). Se maggiore o uguale rispetto al numero di caratteri in string, viene restituita l'intera stringa.
Osservazioni

Per determinare il numero di caratteri in string utilizzare la funzione Len.

Nota   Utilizzare la funzione RightB con i dati byte contenuti in una stringa. Anziché specificare il numero di caratteri che devono essere restituiti, length specifica il numero di byte.


Istruzione RSet

Allinea a destra una stringa contenuta in una variabile stringa.

Sintassi

RSet varstringa = stringa

La sintassi dell'istruzione RSet è composta dalle seguenti parti:

Parte	Descrizione
varstringa	Obbligatoria. Nome di una variabile stringa.
stringa	Obbligatoria. Espressione stringa che deve essere allineata a destra all'interno di varstringa.
Osservazioni

Se varstringa è più lunga di stringa, RSet sostituisce i caratteri rimanenti in varstringa con degli spazi.

Nota   RSet non può essere utilizzata con tipi definiti dall'utente.


Funzione Space

Restituisce un valore Variant (String) costituito dal numero specificato di spazi.

Sintassi

Space(numero)

L'argomento obbligatorio numero è il numero di spazi che si desidera inserire nella stringa.

Osservazioni

La funzione Space è utile per la formattazione dell'output e per meglio distinguere i dati nelle stringhe di lunghezza fissa.


Funzione Str

Restituisce una rappresentazione Variant (String) di un numero.

Sintassi

Str(numero)

L'argomento obbligatorio numero è un valore Long che contiene una qualsiasi espressione numerica valida.

Osservazioni

Quando i numeri vengono convertiti in stringhe, viene sempre riservato uno spazio iniziale al segno di numero. Se numero è positivo, la stringa restituita dalla funzione contiene uno spazio iniziale, mentre il segno più è sottinteso.

Utilizzare la funzione Format per convertire valori numerici che si desidera vengano formattati come data, ora o valuta o in altri formati definiti dall'utente. A differenza di Str, la funzione Format non prevede uno spazio iniziale per il segno di numero.

Nota   La funzione Str riconosce solo il punto (.) come separatore decimale valido. Se è necessario utilizzare separatori decimali diversi, ad esempio in applicazioni internazionali, utilizzare CStr per convertire un numero in stringa.


Funzione StrComp

Restituisce un valore Variant (Integer) che indica il risultato di un confronto fra stringhe.

Sintassi

StrComp(string1, string2[, compare])

La sintassi della funzione StrComp è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
string1	Obbligatoria. Qualsiasi espressione stringa valida
string2	Obbligatoria. Qualsiasi espressione stringa valida.
compare	Facoltativa. Numero che specifica il tipo di confronto fra stringhe. Se l'argomento compare è Null, verrà generato un errore. Se compare viene omesso, per determinare il tipo di confronto verrà utilizzata l'impostazione di Option Compare.
Impostazioni

Le possibili impostazioni dell'argomento compare sono:

Costante	Valore	Descrizione
vbUseCompareOption	-1	Esegue un confronto utilizzando l'impostazione dell'istruzione Option Compare.
vbBinaryCompare	0	Esegue un confronto binario.
vbTextCompare	1	Esegue un confronto di testo.
vbDatabaseCompare	2	Solo per Microsoft Access. Esegue un confronto in base alle informazioni del database.
Valori restituiti

La funzione StrComp restituisce i seguenti valori:

Se	Valore restituito
string1 è minore di string2	-1
string1 è uguale a string2	0
string1 è maggiore di string2	1
string1 o string2 è Null	Null


Funzione StrConv

Restituisce un valore Variant (String) convertito come specificato.

Sintassi

StrConv(string, conversion, LCID)

La sintassi della funzione StrConv è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
string	Obbligatoria. Espressione stringa da convertire.
conversion	Obbligatoria. Integer. Somma dei valori che specificano il tipo di conversione da eseguire.
LCID	Facoltativa. Identificatore delle impostazioni internazionali, se queste sono diverse dalle impostazioni internazionali del sistema. Le impostazioni internazionali del sistema sono il valore predefinito.
Impostazioni

Le possibili impostazioni dell'argomento conversion sono:

Costante	Valore	Descrizione
vbUpperCase	1	Rende maiuscola la stringa.
vbLowerCase	2	Rende minuscola la stringa.
vbProperCase	3	Rende maiuscola la prima lettera di ogni parola della stringa.
vbWide*	4*	Converte i caratteri stretti (a singolo byte) della stringa in caratteri larghi (a byte doppio).
vbNarrow*	8*	Converte i caratteri larghi (a byte doppio) in caratteri stretti (a singolo byte).
vbKatakana**	16**	Converte i caratteri Hiragana della stringa in caratteri Katakana.
vbHiragana**	32**	Converte i caratteri Katakana della stringa in caratteri Hiragana.
vbUnicode	64	Converte la stringa in Unicode utilizzando la tabella codici del sistema. Non disponibile in Macintosh.
vbFromUnicode	128	Converte la stringa da Unicode utilizzando la tabella codici del sistema. Non disponibile in Macintosh.
*	Valida per le impostazioni internazionali orientali

**	Valida solo per il Giappone

Nota   Queste costanti vengono specificate da Visual Basic, Applications Edition e possono essere utilizzate in qualsiasi punto del codice in sostituzione dei valori effettivi. La maggior parte di esse può essere utilizzata in combinazione, ad esempio vbUpperCase + vbWide, ad eccezione dei casi in cui si escludono reciprocamente, ad esempio vbUnicode + vbFromUnicode. Le costanti vbWide, vbNarrow, vbKatakana e vbHiragana generano errori di run-time se utilizzate in sistemi con impostazioni internazionali non appropriate.

Vengono elencati di seguito i separatori di parola validi per una corretta distinzione fra maiuscole e minuscole: Null (Chr$(0)), tabulazione orizzontale (Chr$(9)), avanzamento riga (Chr$(10)), tabulazione verticale (Chr$(11)), avanzamento pagina (Chr$(12)), ritorno a capo (Chr$(13)), spazio (SBCS) (Chr$(32)). Il valore effettivo per lo spazio varia in base al paese per il set di caratteri DBCS.

Osservazioni

Quando si converte in una stringa una matrice Byte in formato ANSI, è consigliabile utilizzare la funzione StrConv. Quando si converte in formato Unicode una matrice di questo tipo, utilizzare un'istruzione di assegnazione.


Funzione String

Restituisce un valore Variant (String) che contiene una stringa di caratteri ripetuti della lunghezza specificata.

Sintassi

String(number, character)

La sintassi della funzione String è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
number	Obbligatoria. Long. Lunghezza della stringa restituita. Se number contiene Null verrà restituito Null.
character	Obbligatoria. Variant. Codice di carattere che specifica il carattere o l'espressione stringa il cui primo carattere viene utilizzato per costruire la stringa restituita. Se character contiene Null verrà restituito Null.
Osservazioni

Se per character viene specificato un numero maggiore di 255, la funzione String converte il numero in un codice di carattere valido tramite la formula:

character Mod 256


Funzione UCase

Restituisce un valore Variant (String) che contiene la stringa specificata, convertita in maiuscole.

Sintassi

UCase(stringa)

L'argomento obbligatorio stringa è qualsiasi espressione stringa valida. Se stringa contiene Null, verrà restituito Null.

Osservazioni

Solo le lettere minuscole vengono convertite in maiuscole. Tutte le lettere maiuscole e i caratteri non letterali rimangono invariati.


Parole chiave per categoria di operazione

Categoria	Descrizione
Controllo del flusso	Ripetizione ciclica e controllo del flusso di routine.
Conversione	Conversione di valori numerici e tipi di dati.
Data e ora	Conversione e utilizzo di espressioni di data e di ora
Directory e file	Controllo del file system ed elaborazione di file.
Errori	Intercettazione e restituzione dei valori di errore.
Finanziaria	Esecuzione di calcoli finanziari.
Input e output	Lettura dell'input e visualizzazione o stampa dell'output.
Istruzioni di compilazione	Controllo del processo di compilazione.
Manipolazione di stringhe	Manipolazione di stringhe e di tipi di dati String.
Matematica	Esecuzione di calcoli trigonometrici e di altri calcoli matematici.
Matrici	Creazione, definizione e utilizzo delle matrici.
Operatori	Confronto di espressioni e altre operazioni.
Tipi di dati	Tipi di dati e sottotipi Variant.
Variabili e costanti	Dichiarazione e definizione di variabili e costanti.
Varie	Avvio di altre applicazioni ed elaborazione di eventi.


Riepilogo delle parole chiave relative alle matrici

Operazione	Parole chiave
Verificare una matrice.	IsArray
Creare una matrice.	Array
Modificare il limite inferiore predefinito.	Option Base
Dichiarare ed inizializzare una matrice.	Dim, Private, Public, ReDim, Static
Individuare i limiti di una matrice.	LBound, UBound
Reinizializzare una matrice.	Erase, ReDim


Riepilogo delle parole chiave relative all'oggetto Collection

Operazione	Parole chiave
Creare un oggetto Collection.	Collection
Aggiungere un oggetto a un insieme.	Add
Rimuovere un oggetto da un insieme.	Remove
Fare riferimento a un elemento di un insieme.	Item


Riepilogo delle parole chiave relative alle istruzioni di compilazione

Operazione	Parole chiave
Definire la costante di compilazione.	#Const
Compilare i blocchi di codice selezionati.	#If...Then...#Else


Riepilogo delle parole chiave relative al flusso di controllo

Operazione	Parole chiave
Passaggio.	GoSub...Return, GoTo, On Error, On...GoSub, On...GoTo
Uscire dal programma o sospenderlo.	DoEvents, End, Exit, Stop
Ciclo.	Do...Loop, For...Next, For Each...Next, While...Wend, With
Operare scelte.	Choose, If...Then...Else, Select Case, Switch
Utilizzare routine.	Call, Function, Property Get, Property Let, Property Set, Sub


Riepilogo delle parole chiave relative alla conversione

Operazione	Parole chiave
Da valore ANSI a stringa.	Chr
In minuscole o maiuscole.	Format, LCase, UCase
Da data a numero seriale.	DateSerial, DateValue
Da numero decimale ad altre basi.	Hex, Oct
Da numero a stringa.	Format, Str
Da un tipo di dati a un altro.	CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
Da data in giorno, mese, giorno della settimana o anno.	Day, Month, Weekday, Year
Da orario in ora, minuto o secondo.	Hour, Minute, Second
Da stringa a valore ASCII.	Asc
Da stringa a numero.	Val
Da ora a numero seriale.	TimeSerial, TimeValue


Riepilogo delle parole chiave relative ai tipi di dati

Operazione	Parole chiave
Convertire da un tipo di dati ad un altro.	CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
Impostare tipi di dati intrinseci.	Boolean, Byte, Currency, Date, Double, Integer, Long, Object, Single, String, Variant (predefinito)
Verificare tipi di dati.	IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject


Riepilogo delle parole chiave relative a data e ora

Operazione	Parole chiave
Ottenere la data o l'ora corrente.	Date, Now, Time
Eseguire calcoli con le date.	DateAdd, DateDiff, DatePart
Restituire una data.	DateSerial, DateValue
Restituire un orario.	TimeSerial, TimeValue
Impostare la data o l'orario.	Date, Time
Temporizzare un processo.	Timer


Riepilogo delle parole chiave relative a directory e a file

Operazione	Parole chiave
Cambiare directory o cartella.	ChDir
Cambiare unità.	ChDrive
Copiare un file.	FileCopy
Creare una directory o una cartella.	MkDir
Eliminare una directory o una cartella.	RmDir
Rinominare un file, una directory o una cartella.	Name
Restituire il percorso corrente.	CurDir
Restituire l'indicatore di data e ora di un file.	FileDateTime
Restituire attributi di file, directory o etichetta.	GetAttr
Restituire la lunghezza del file.	FileLen
Restituire il nome del file o l'etichetta di volume.	Dir
Impostare gli attributi di un file.	SetAttr


Riepilogo delle parole chiave relative agli errori

Operazione	Parole chiave
Generare errori di run-time.	Clear, Error, Raise
Leggere messaggi di errore.	Error
Fornire informazioni sugli errori.	Err
Restituire un valore Error.	CVErr
Intercettare errori durante la fase di esecuzione.	On Error, Resume
Verificare il tipo di errore.	IsError


Riepilogo delle parole chiave relative ai calcoli finanziari

Operazione	Parole chiave
Calcolare l'ammortamento.	DDB, SLN, SYD
Calcolare il valore futuro.	FV
Calcolare il tasso di interesse.	Rate
Calcolare il tasso di rendimento interno.	IRR, MIRR
Calcolare il numero di periodi.	NPer
Calcolare i pagamenti.	IPmt, Pmt, PPmt
Calcolare il valore attuale.	NPV, PV


Riepilogo delle parole chiave relative a input e output

Operazione	Parole chiave
Accedere ad un file o crearlo.	Open
Chiudere file.	Close, Reset
Controllare l'aspetto dell'output.	Format, Print, Print #, Spc, Tab, Width #
Copiare un file.	FileCopy
Ottenere informazioni su un file.	EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc, LOF, Seek
Gestire i file.	Dir, Kill, Lock, Unlock, Name
Leggere da un file.	Get, Input, Input #, Line Input #
Restituire la lunghezza di un file.	FileLen
Impostare o leggere gli attributi dei file.	FileAttr, GetAttr, SetAttr
Impostare la posizione di lettura-scrittura in un file.	Seek
Scrivere su file.	Print #, Put, Write #


Riepilogo delle parole chiave relative ad operazioni matematiche

Operazione	Parole chiave
Derivare funzioni trigonometriche.	Atn, Cos, Sin, Tan
Calcoli generici.	Exp, Log, Sqr
Generare numeri casuali.	Randomize, Rnd
Ottenere un valore assoluto.	Abs
Ottenere il segno di un'espressione.	Sgn
Eseguire conversioni numeriche.	Fix, Int


Riepilogo delle parole chiave varie

Operazione	Parole chiave
Elaborare eventi in sospeso.	DoEvents
Eseguire altri programmi.	AppActivate, Shell
Inviare sequenze di tasti ad un'applicazione.	SendKeys
Fare emettere un segnale acustico al computer.	Beep
Sistema.	Environ
Fornire una stringa della riga di comando	Command
Automazione.	CreateObject, GetObject
Colori.	QBColor, RGB


Parole chiave relative agli operatori

Operazione	Parole chiave
Aritmetici.	^, – , *,  /, \, Mod, +, &, =
Di confronto.	=, <>, <, >, <=, >=, Like, Is
Logici.	Not, And, Or, Xor, Eqv, Imp


Riepilogo delle parole chiave relative al registro di configurazione

Operazione	Parole chiave
Eliminare impostazioni di programma.	DeleteSetting
Leggere impostazioni di programma.	GetSetting, GetAllSettings
Salvare impostazioni di programma.	SaveSetting


Riepilogo delle parole chiave relative alla manipolazione di stringhe

Operazione	Parole chiave
Confrontare due stringhe.	StrComp
Convertire stringhe.	StrConv
Convertire in minuscole o in maiuscole.	Format, Lcase, Ucase
Creare una stringa di caratteri ripetuti.	Space, String
Trovare la lunghezza di una stringa.	Len
Formattare una stringa.	Format
Allineare una stringa.	LSet, Rset
Manipolare stringhe.	InStr, Left, LTrim, Mid, Right, RTrim, Trim
Impostare criteri di confronto fra stringhe.	Option Compare
Utilizzare valori ASCII e ANSI.	Asc, Chr


Riepilogo delle parole chiave relative a variabili e costanti

Operazione	Parole chiave
Assegnare un valore.	Let
Dichiarare variabili o costanti.	Const, Dim, Private, Public, New, Static
Dichiarare un modulo come privato.	Option Private Module
Ottenere informazioni su una variabile Variant.	IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject, TypeName, VarType
Fare riferimento all'oggetto corrente.	Me
Richiedere dichiarazioni di variabili esplicite.	Option Explicit
Impostare il tipo di dati predefinito.	Deftype


Errori intercettabili

Gli errori intercettabili possono verificarsi durante l'esecuzione di un'applicazione. Alcuni vengono generati in fase di progettazione o in fase di compilazione. È possibile individuare e fornire una risposta agli errori intercettabili utilizzando l'istruzione On Error e l'oggetto Err. I numeri di errore non utilizzati compresi tra 1 e 1000 sono riservati per utilizzi futuri.

Codice	Messaggio
3	Return senza GoSub
5	Chiamata di routine o argomento non validi
6	Overflow
7	Memoria esaurita
9	Indice non compreso nell'intervallo
10	Questa matrice è fissa o temporaneamente bloccata
11	Divisione per zero
13	Tipo non corrispondente
14	Spazio stringa esaurito
16	Espressione troppo complessa
17	Impossibile eseguire l'operazione richiesta
18	Interruzione dell'utente
20	Resume senza Error
28	Spazio dello stack esaurito
35	Sub, Function o Property non definita
47	Troppe applicazioni client DLL o codici risorsa
48	Errore di caricamento DLL o codici risorsa
49	Convenzione di chiamata DLL o codici risorsanon valida
51	Errore interno
52	Nome o numero di file non valido
53	Impossibile trovare il file
54	Modalità file non valida
55	File già aperto
57	Errore I/O periferica
58	File già esistente
59	Lunghezza del record non valida
61	Disco pieno
62	Input oltre la fine del file
63	Numero di record non valido
67	Troppi file
68	Periferica non disponibile
70	Autorizzazione negata
71	Disco non pronto
74	Impossibile rinominare con unità diversa
75	Errore di accesso al percorso/file
76	Impossibile trovare il percorso
91	Variabile oggetto o variabile del blocco With non impostata
92	Ciclo For non inizializzato
93	Stringa campione non valida
94	Utilizzo non valido di Null
97	Impossibile richiamare la routine Friend da un oggetto che non è un'istanza della classe di definizione
98	Una chiamata a una proprietà o a un metodo non può includere un riferimento a un oggetto privato, né come argomento né come valore restituito
298	Impossibile caricare la risorsa o la DLL di sistema specificata
320	Impossibile utilizzare nomi di periferiche per i nomi di file
321	Formato di file non valido
322	Impossibile creare il file temporaneo necessario
325	Formato non valido nel file di risorse
327	Impossibile trovare il valore dati
328	Parametro non valido. Impossibile scrivere nelle matrici
335	Impossibile accedere al registro di configurazione del sistema
336	Componente non registrato correttamente
337	Impossibile trovare il componente
338	Impossibile eseguire correttamente il componente
360	Oggetto già caricato
361	Impossibile caricare o scaricare l'oggetto
363	Impossibile trovare il controllo specificato
364	L'oggetto è stato scaricato
365	Impossibile scaricare in questo contesto
368	La versione del file specificato non è più valida. Il programma richiede una versione aggiornata
371	Impossibile utilizzare l'oggetto specificato come form proprietario per Show()
380	Valore di proprietà non valido
381	Indice della matrice di proprietà non valido
382	Impossibile eseguire Property Set in fase di esecuzione
383	Impossibile utilizzare Property Set per proprietà in sola lettura
385	Necessario indice della matrice di proprietà
387	Property Set non ammessa
393	Impossibile eseguire Property Get in fase di esecuzione
394	Impossibile eseguire Property Get per proprietà in sola scrittura
400	Form già visualizzato. Impossibile visualizzarlo a scelta obbligatoria
402	È innanzitutto necessario chiudere o nascondere il form a scelta obbligatoria in primo piano
419	Autorizzazione negata per utilizzare l'oggetto
422	Impossibile trovare la proprietà
423	Impossibile trovare proprietà o metodo
424	Necessario oggetto
425	Utilizzo non valido dell'oggetto
429	Il componente non è in grado di creare l'oggetto o di restituire un riferimento a questo oggetto
430	La classe non supporta l'automazione
432	Impossibile trovare nome di file o nome di classe durante un'operazione di automazione
438	Proprietà o metodo non supportati dall'oggetto
440	Errore di automazione
442	Il collegamento alla libreria dei tipi o alla libreria degli oggetti per il processo remoto non è più disponibile
443	L'oggetto di automazione non ha un valore predefinito
445	Azione non valida per l'oggetto
446	L'oggetto non supporta argomenti predefiniti
447	L'oggetto non supporta le impostazioni internazionali correnti
448	Impossibile trovare argomento predefinito
449	Argomento non facoltativo
450	Numero errato di argomenti o assegnazione di proprietà non valida
451	L'oggetto non è un insieme
452	Ordinale non valido
453	Impossibile trovare la risorsa codice  specificata
454	Impossibile trovare la risorsa codice
455	Errore di blocco risorsa codice
457	Questa chiave è già associata ad un elemento dell'insieme
458	La variabile utilizza un tipo non supportato in Visual Basic
459	Il componente non supporta eventi
460	Formato degli Appunti non valido
461	Impossibile trovare il metodo o il membro dei dati
462	Il computer server remoto non esiste o non è disponibile
463	Classe non registrata nel computer locale
480	Impossibile creare un'immagine AutoRedraw
481	Immagine non valida
482	Errore della stampante
483	Il driver della stampante non supporta la proprietà specificata
484	Problemi di recupero delle informazioni sulla stampante nel sistema. Verificare che la stampante sia impostata correttamente
485	Tipo di immagine non valido
486	Impossibile stampare l'immagine del form su questo tipo di stampante
520	Impossibile svuotare gli Appunti
521	Impossibile aprire gli Appunti
735	Impossibile salvare il file in TEMP
744	Impossibile trovare il testo di ricerca
746	Sostituzioni troppo lunghe
31001	Memoria esaurita
31004	Impossibile trovare l'oggetto
31018	Classe non impostata
31027	Impossibile attivare l'oggetto
31032	Impossibile creare oggetto incorporato
31036	Errore di salvataggio su file
31037	Errore di caricamento dal file


Operatore AddressOf

Operatore unario che determina il passaggio dell'indirizzo della routine che lo segue a una routine API che prevede un puntatore alla funzione nella stessa posizione all'interno dell'elenco degli argomenti.

Sintassi

AddressOf nomeroutine

L'argomento obbligatorio nomeroutine specifica la routine per la quale è necessario passare l'indirizzo. Deve rappresentare una routine di un modulo standard del progetto all'interno del quale viene eseguita la chiamata.

Osservazioni

Se in un elenco di argomenti compare un nome di routine, in genere tale routine viene valutata e viene quindi passato l'indirizzo del relativo valore restituito. L'operatore AddressOf consente di passare l'indirizzo della routine a una funzione API di Windows in una libreria a collegamento dinamico (DLL), anziché di passare il valore restituito dalla routine. La funzione API potrà quindi utilizzare l'indirizzo per eseguire una chiamata alla routine Basic, processo conosciuto come callback. L'operatore AddressOf comparirà solo nella chiamata alla routine API.

Benché sia possibile utilizzare AddressOf per passare puntatori alle routine nelle routine Basic, non è possibile richiamare una funzione mediante un puntatore di questo tipo in Basic. Ciò implica, ad esempio, che per una classe scritta in Basic non è possibile eseguire callback al relativo controller utilizzando questo puntatore. Quando AddressOf viene utilizzato per passare un puntatore alle routine in Basic, come parametro della routine richiamata deve essere specificato As Long.

Avvertenza   L'utilizzo dell'operatore AddressOf può comportare risultati imprevisti se non si è compreso pienamente il concetto di callback delle funzioni. È infatti necessario capire il funzionamento della parte Basic del callback e inoltre il codice della DLL nel quale viene passato l'indirizzo della funzione. Il debug di tali interazioni risulta difficile, poiché il programma viene eseguito nel medesimo processo come ambiente di sviluppo. In alcuni casi può non essere possibile eseguire il debug a livello di sistema.

Nota   È possibile creare prototipi di funzioni di callback personalizzati in DLL compilate con Microsoft Visual C++ (o strumenti simili). Per utilizzare AddressOf, nel prototipo è necessario specificare la convenzione di chiamata __stdcall, visto che la convenzione predefinita (__cdecl) non funziona con AddressOf.

Poiché la chiamata a una funzione callback non viene eseguita dal programma, è importante che qualsiasi errore nella routine callback non venga passato al chiamante. A tale scopo, è possibile aggiungere On Error Resume Next all'inizio della routine callback.


Metodo Assert

Sospende l'esecuzione in modo condizionale a partire dalla riga in cui viene specificato.

Sintassi

oggetto.Assert espressionebooleana

La sintassi del metodo Assert è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre l'oggetto Debug.
espressionebooleana	Obbligatoria. Espressione che restituisce True o False.
Osservazioni

Le chiamate al metodo Assert sono valide solo all'interno dell'ambiente di sviluppo. Quando il modulo viene compilato in un eseguibile, le chiamate del metodo all'oggetto Debug verranno omesse.

L'intero contenuto di espressionebooleana viene sempre valutato. Se, ad esempio, la prima parte di un'espressione And restituisce False, verrà comunque valutata l'intera espressione.


Friend

Modifica la definizione di una routine in un modulo di form o in un modulo di classe allo scopo di poterla richiamare da moduli esterni alla classe, ma che fanno parte del progetto all'interno del quale viene definita la classe. Non è possibile utilizzare le routine Friend nei moduli standard.

Sintassi

[Private | Friend | Public] [Static] [Sub | Function | Property] nomeroutine

L'argomento obbligatorio nomeroutine rappresenta il nome della routine che si desidera rendere visibile in tutto il progetto, ma che non deve essere visibile ai controller della classe.

Osservazioni

Le routine Public di una classe possono essere richiamate da qualsiasi posizione, anche dai controller delle istanze della classe. La dichiarazione di una routine Private impedisce ai controller dell'oggetto di poterla richiamare, ma impedisce anche di richiamarla dal progetto nel quale è definita la classe. Friend consente di rendere la routine visibile in tutto il progetto, ma non per un controller di un'istanza dell'oggetto. Friend può comparire solo nei moduli di form e di classe e può modificare i nomi di routine, ma non le variabili o i tipi. Le routine di una classe possono accedere alle routine Friend di tutte le altri classi di un progetto. Le routine Friend non compaiono nella libreria dei tipi della relativa classe e non supportano l'associazione tardiva.


Istruzione RaiseEvent

Genera un evento dichiarato a livello di modulo all'interno di una classe, di un form o di un documento.

Sintassi

RaiseEvent nomeevento [(elencoargomenti)]

L'argomento obbligatorio nomevento rappresenta il nome di un evento dichiarato all'interno del modulo, in base alle convenzioni di denominazione delle variabili Basic.

La sintassi dell'istruzione RaiseEvent è composta dalle seguenti parti:

Parte	Descrizione
nomeevento	Obbligatoria. Nome dell'evento che deve essere generato.
elencoargomenti	Facoltativa. Elenco di variabili, matrici o espressioni delimitato da virgole. L'argomento elencoargomenti deve essere inserito tra parentesi. Se non sono disponibili argomenti, le parentesi devono essere omesse.
Osservazioni

Se l'evento non è stato dichiarato all'interno del modulo in cui viene generato, si verificherà un errore. Nell'esempio seguente viene illustrata la dichiarazione di un evento e una routine in cui viene generato l'evento.

' Dichiara un evento a livello di modulo di un modulo di classe

Event LogonCompleted (UserName as String)

Sub

' Genera l'evento.

RaiseEvent LogonCompleted ("Giovanni")

End Sub

Se per l'evento non sono disponibili argomenti, incluse le parentesi vuote, il richiamo dell'evento tramite l'istruzione RaiseEvent genererà un errore. Non è possibile utilizzare RaiseEvent per generare eventi che non sono dichiarati in modo esplicito nel modulo. Se, ad esempio, un form include un evento Click, non è possibile generare tale evento mediante l'istruzione RaiseEvent. Se nel modulo di form viene dichiarato un evento Click, tale evento oscurerà l'evento Click del form stesso. È tuttavia possibile richiamare l'evento Click del form utilizzando la sintassi normale per il richiamo dell'evento.

La generazione degli eventi viene eseguita in base all'ordine dei collegamenti. Poiché gli eventi possono includere parametri ByRef, un processo per il quale il collegamento avviene tardivamente è possibile che riceva parametri che sono già stati modificati da una routine di gestione degli eventi.


Esempio di operatore AddressOf

In questo esempio viene creato un form con una casella di riepilogo contenente un elenco dei caratteri disponibili nel sistema, ordinato alfabeticamente.

Per eseguire il codice, creare un form contenente una casella di riepilogo. Il codice per il form è il seguente:

Option Explicit

Private Sub Form_Load()

    Module1.FillListWithFonts List1

End Sub

Inserire il codice seguente in un modulo. Il terzo argomento nella definizione della funzione EnumFontFamilies è un valore Long che rappresenta una routine. L'argomento deve includere l'indirizzo della routine, anziché il valore restituito dalla routine stessa. Nella chiamata alla funzione EnumFontFamilies, il terzo argomento richiede l'operatore AddressOf per restituire l'indirizzo della routine EnumFontFamProc, che corrisponde al nome della routine callback specificata per la chiamata alla funzione API di Windows, EnumFontFamilies. EnumFontFamProc viene richiamata da Windows per ciascuno dei gruppi di caratteri nel sistema quando si passa AddressOf EnumFontFamProc a EnumFontFamilies. L'ultimo argomento passato a EnumFontFamilies specifica la casella di riepilogo in cui vengono visualizzate le informazioni.

'Tipi di enumerazione dei caratteri

Public Const LF_FACESIZE = 32

Public Const LF_FULLFACESIZE = 64

Type LOGFONT

        lfHeight As Long

        lfWidth As Long

        lfEscapement As Long

        lfOrientation As Long

        lfWeight As Long

        lfItalic As Byte

        lfUnderline As Byte

        lfStrikeOut As Byte

        lfCharSet As Byte

        lfOutPrecision As Byte

        lfClipPrecision As Byte

        lfQuality As Byte

        lfPitchAndFamily As Byte

        lfFaceName(LF_FACESIZE) As Byte

End Type

Type NEWTEXTMETRIC

        tmHeight As Long

        tmAscent As Long

        tmDescent As Long

        tmInternalLeading As Long

        tmExternalLeading As Long

        tmAveCharWidth As Long

        tmMaxCharWidth As Long

        tmWeight As Long

        tmOverhang As Long

        tmDigitizedAspectX As Long

        tmDigitizedAspectY As Long

        tmFirstChar As Byte

        tmLastChar As Byte

        tmDefaultChar As Byte

        tmBreakChar As Byte

        tmItalic As Byte

        tmUnderlined As Byte

        tmStruckOut As Byte

        tmPitchAndFamily As Byte

        tmCharSet As Byte

        ntmFlags As Long

        ntmSizeEM As Long

        ntmCellHeight As Long

        ntmAveWidth As Long

End Type

' flag del campo ntmFlags

Public Const NTM_REGULAR = &H40&

Public Const NTM_BOLD = &H20&

Public Const NTM_ITALIC = &H1&

'  flag di tmPitchAndFamily

Public Const TMPF_FIXED_PITCH = &H1

Public Const TMPF_VECTOR = &H2

Public Const TMPF_DEVICE = &H8

Public Const TMPF_TRUETYPE = &H4

Public Const ELF_VERSION = 0

Public Const ELF_CULTURE_LATIN = 0

'  Maschere di EnumFonts

Public Const RASTER_FONTTYPE = &H1

Public Const DEVICE_FONTTYPE = &H2

Public Const TRUETYPE_FONTTYPE = &H4

Declare Function EnumFontFamilies Lib "gdi32" Alias _
 "EnumFontFamiliesA" _
 (ByVal hDC As Long, ByVal lpszFamily As String, _
 ByVal lpEnumFontFamProc As Long, LParam As Any) As Long

Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long

Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, _
 ByVal hDC As Long) As Long

Function EnumFontFamProc(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, _
 ByVal FontType As Long, LParam As ListBox) As Long

Dim FaceName As String

Dim FullName As String

    FaceName = StrConv(lpNLF.lfFaceName, vbUnicode)

    LParam.AddItem Left$(FaceName, InStr(FaceName, vbNullChar) - 1)

    EnumFontFamProc = 1

End Function

Sub FillListWithFonts(LB As ListBox)

Dim hDC As Long

    LB.Clear

    hDC = GetDC(LB.hWnd)

    EnumFontFamilies hDC, vbNullString, AddressOf EnumFontFamProc, LB

    ReleaseDC LB.hWnd, hDC

End Sub


Esempio di metodo Assert

In questo esempio viene illustrato l'utilizzo del metodo Assert. Per l'esempio è richiesto un form contenente due pulsanti. I nomi predefiniti dei pulsanti sono Command1 e Command2.

Durante l'esecuzione del codice, se si fa clic sul pulsante Command1 il testo sul pulsante verrà modificato da 0 a 1 e viceversa. Se si fa clic sul pulsante Command2 non accadrà nulla oppure verrà generata un'asserzione, a seconda del valore visualizzato su Command1. L'asserzione interromperà l'esecuzione e rimarrà evidenziata l'ultima istruzione eseguita, la riga Debug.Assert.

Option Explicit

Private blnAssert As Boolean

Private intNumber As Integer

Private Sub Command1_Click()

    blnAssert = Not blnAssert

    intNumber = IIf(intNumber <> 0, 0, 1)

    Command1.Caption = intNumber

End Sub

Private Sub Command2_Click()

    Debug.Assert blnAssert

End Sub

Private Sub Form_Load()

    Command1.Caption = intNumber

    Command2.Caption = "prova di Assert"

End Sub


Esempio di parola chiave Friend

Se si inserisce il codice seguente in un modulo di classe, la variabile dblBalance sarà accessibile a tutti gli utenti di tale classe all'interno del progetto. Qualsiasi utente della classe potrà ottenere il valore e sarà possibile assegnare un valore alla variabile solo tramite il codice del progetto.

Private dblBalance As Double

Public Property Get Balance() As Double

    Balance = dblBalance

End Property

Friend Property Let Balance(dblNewBalance As Double)

    dblBalance = dblNewBalance

End Property


Esempio di istruzione RaiseEvent

Nell'esempio seguente gli eventi vengono utilizzati per conteggiare i secondi durante una gara di corsa di 100 metri. Nel codice vengono illustrati tutti i metodi, le proprietà e le istruzioni correlati agli eventi, inclusa l'istruzione RaiseEvent.

La classe che genera un evento è l'origine dell'evento e le classi che realizzano l'evento sono le routine di elaborazione. Un'origine dell'evento può includere più routine di elaborazione per gli eventi da essa generati. Quando la classe genera l'evento, tale evento viene generato in ogni classe che elaborerà eventi per tale istanza dell'oggetto.

Nell'esempio viene inoltre utilizzato un form (Form1) che include un pulsante (Command1), un'etichetta (Label1) e due caselle di testo (Text1 e Text2). Quando si fa clic sul pulsante, nella prima casella di testo verrà visualizzato "A partire da ora" e nella seconda casella inizierà il conteggio dei secondi. Dopo che il tempo completo è trascorso (9,84 secondi), nella prima casella di testo verrà visualizzato "Fino ad ora" e nella seconda casella apparirà "9,84".

Il codice per Form1 specifica lo stato iniziale e finale del form e contiene inoltre il codice eseguito durante la generazione degli eventi.

Option Explicit

Private WithEvents mText As TimerState

Private Sub Command1_Click()

    Text1.Text = "A partire da ora"

    Text1.Refresh

    Text2.Text = "0"

    Text2.Refresh

    Call mText.TimerTask(9.84)

End Sub

Private Sub Form_Load()

    Command1.Caption = "Fare clic per avviare il timer"

    Text1.Text = ""

    Text2.Text = ""

    Label1.Caption = "Il tempo minimo registrato per i 100 metri è stato:"

    Set mText = New TimerState

    End Sub

Private Sub mText_ChangeText()

    Text1.Text = "Fino ad ora"

    Text2.Text = "9,84"

End Sub

Private Sub mText_UpdateTime(ByVal dblJump As Double)

    Text2.Text = Str(Format(dblJump, "0"))

    DoEvents

End Sub

La parte rimanente del codice si trova in un modulo di classe denominato TimerState. Tra i comandi disponibili in tale modulo ci sono anche le istruzioni Raise Event.

Option Explicit

Public Event UpdateTime(ByVal dblJump As Double)

Public Event ChangeText()

Public Sub TimerTask(ByVal Duration As Double)

    Dim dblStart As Double

    Dim dblSecond As Double

    Dim dblSoFar As Double

    dblStart = Timer

    dblSoFar = dblStart

    Do While Timer < dblStart + Duration

        If Timer - dblSoFar >= 1 Then

            dblSoFar = dblSoFar + 1

            RaiseEvent UpdateTime(Timer - dblStart)

        End If

    Loop

    RaiseEvent ChangeText

End Sub


Set di caratteri (128 - 255)
Set di caratteri (128 – 255)

128	•	160	[spazio]	192	À	224	à
129	•	161	¡	193	Á	225	á
130	•	162	¢	194	Â	226	â
131	•	163	£	195	Ã	227	ã
132	•	164	¤	196	Ä	228	ä
133	•	165	¥	197	Å	229	å
134	•	166	¦	198	Æ	230	æ
135	•	167	§	199	Ç	231	ç
136	•	168	¨	200	È	232	è
137	•	169	©	201	É	233	é
138	•	170	ª	202	Ê	234	ê
139	•	171	«	203	Ë	235	ë
140	•	172	¬	204	Ì	236	ì
141	•	173	­	205	Í	237	í
142	•	174	®	206	Î	238	î
143	•	175	¯	207	Ï	239	ï
144	•	176	°	208	Ð	240	ð
145	‘	177	±	209	Ñ	241	ñ
146	’	178	²	210	Ò	242	ò
147	•	179	³	211	Ó	243	ó
148	•	180	´	212	Ô	244	ô
149	•	181	µ	213	Õ	245	õ
150	•	182	¶	214	Ö	246	ö
151	•	183	·	215	×	247	÷
152	•	184	¸	216	Ø	248	ø
153	•	185	¹	217	Ù	249	ù
154	•	186	º	218	Ú	250	ú
155	•	187	»	219	Û	251	û
156	•	188	¼	220	Ü	252	ü
157	•	189	½	221	Ý	253	ý
158	•	190	¾	222	Þ	254	þ
159	•	191	¿	223	ß	255	ÿ
•	Questi caratteri non sono supportati da Microsoft Windows.

I valori della tabella sono i valori predefiniti di Windows. Tuttavia, i valori del set di caratteri ANSI superiori a 127 vengono determinati nella pagina del codice specifica del sistema operativo.


Costanti del formato data

Queste costanti sono disponibili solo quando il progetto presenta un riferimento esplicito alla libreria dei tipi appropriata che contiene queste definizioni di costanti.

Costante	Valore	Descrizione
vbGeneralDate	0	Consente di visualizzare la data e/o l'ora. Nel caso di numeri reali, vengono visualizzate la data e l'ora. Se il numero non include alcuna parte frazionaria, viene visualizzata solo la data. Il tipo di visualizzazione di data e ora dipende dalle impostazioni del sistema.
vbLongDate	1	Visualizza la data nel formato esteso specificato nelle impostazioni internazionali del sistema.
vbShortDate	2	Visualizza la data nel formato breve specificato nelle impostazioni internazionali del sistema.
vbLongTime	3	Visualizza l'ora nel formato esteso specificato nelle impostazioni internazionali del sistema.
vbShortTime	4	Visualizza l'ora nel formato breve specificato nelle impostazioni internazionali del sistema.


Costanti DriveType

Queste costanti sono disponibili solo quando il progetto presenta un riferimento esplicito alla libreria dei tipi appropriata che contiene queste definizioni di costanti.

Costante	Valore	Descrizione
Unknown	0	Non è possibile determinare il tipo di unità.
Removable	1	L'unità è costituita da un supporto rimovibile. Sono comprese tutte le unità disco floppy e diverse altre periferiche di memorizzazione.
Fixed	2	L'unità è costituita da un supporto fisso (non rimovibile). Sono comprese tutte le unità disco rigido e i dischi rigidi rimovibili.
Remote	3	Unità di rete. Sono comprese le unità di rete condivise.
CDROM	4	Unità CD-ROM. Non viene fatta alcuna distinzione tra unità CD-ROM di sola lettura e di lettura/scrittura.
RAMDisk	5	Unità costituita da un blocco di memoria ad accesso casuale (RAM, Random Access Memory) sul computer locale, utilizzato come un'unità disco.


Costanti degli attributi di file

Queste costanti sono disponibili solo quando il progetto presenta un riferimento esplicito alla libreria dei tipi appropriata che contiene queste definizioni di costanti.

Costante	Valore	Descrizione
Normal	0	File normale. Non è impostato alcun attributo.
ReadOnly	1	File di sola lettura. L'attributo è di lettura/scrittura.
Hidden	2	File nascosto. L'attributo è di lettura/scrittura.
System	4	File di sistema. L'attributo è di lettura/scrittura.
Volume	8	Etichetta di volume dell'unità disco. L'attributo è di sola lettura.
Directory	16	Cartella o directory. L'attributo è di sola lettura.
Archive	32	Il file è stato modificato dall'ultimo backup. L'attributo è di lettura/scrittura.
Alias	64	Collegamento o scelta rapida. L'attributo è di sola lettura.
Compressed	128	File compresso. L'attributo è di sola lettura.


Costanti di input/output dei file

Queste costanti sono disponibili solo quando il progetto presenta un riferimento esplicito alla libreria dei tipi appropriata che contiene queste definizioni di costanti.

Costante	Valore	Descrizione
ForReading	1	Apre un file in sola lettura in cui non è possibile eseguire operazioni di scrittura.
ForWriting	2	Apre un file in scrittura. Se esiste già un file con lo stesso nome, il contenuto di tale file verrà sovrascritto.
ForAppending	8	Apre un file e scrive alla fine del file.


Costanti SpecialFolder

Queste costanti sono disponibili solo quando il progetto presenta un riferimento esplicito alla libreria dei tipi appropriata che contiene queste definizioni di costanti.

Costante	Valore	Descrizione
WindowsFolder	0	La cartella Windows contiene i file installati dal sistema operativo Windows.
SystemFolder	1	La cartella System contiene le librerie, i caratteri e i driver di periferica.
TemporaryFolder	2	La cartella Temp viene utilizzata per memorizzare i file temporanei. Il percorso si trova nella variabile di ambiente TMP.


Costanti Tristate

Queste costanti sono disponibili solo quando il progetto presenta un riferimento esplicito alla libreria dei tipi appropriata che contiene queste definizioni di costanti.

Costante	Valore	Descrizione
vbTrue	–1	True
vbFalse	0	False
vbUseDefault	–2	Viene utilizzata l'impostazione predefinita


Funzione Filter

Descrizione

Restituisce una matrice con base zero contenente un sottoinsieme di una matrice di stringhe definito in base a un criterio di filtro specificato.

Sintassi

Filter(sourcesrray, match[, include[, compare]])

La sintassi della funzione Filter è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
sourcearray	Obbligatoria. Matrice di stringhe a una dimensione in cui eseguire la ricerca.
match	Obbligatoria. Stringa da cercare.
include	Facoltativa. Valore booleano che specifica se devono essere restituite sottostringhe che includono o escludono match. If include è True, la funzione Filter restituisce come sottostringa il sottoinsieme della matrice che include match. Se include è False, Filter restituisce come sottostringa il sottoinsieme della matrice che non include match.
compare	Facoltativa. Valore numerico che specifica il tipo di confronto di stringhe da utilizzare. I possibili valori sono indicati nella sezione "Impostazioni".
Impostazioni

Le possibili impostazioni di compare sono:

Costante	Valore	Descrizione
vbUseCompareOption	–1	Esegue un confronto utilizzando l'impostazione dell'istruzione Option Compare.
vbBinaryCompare	0	Esegue un confronto binario.
vbTextCompare	1	Esegue un confronto di testo.
vbDatabaseCompare	2	Solo per Microsoft Access. Esegue un confronto in base alle informazioni del database.
Osservazioni

Se in sourcearray non viene trovata alcuna corrispondenza di match, la funzione Filter restituisce una matrice vuota. Se sourcearray è Null o non è una matrice a una dimensione, verrà restituito un errore.

La matrice restituita dalla funzione Filter include solo il numero di elementi sufficiente per il numero di corrispondenze trovate.


Funzione FormatCurrency

Descrizione

Restituisce un'espressione in formato di valore di valuta utilizzando il simbolo di valuta impostato nel Pannello di controllo del sistema.

Sintassi

FormatCurrency(Espressione[,NumCifreDecimali [,CifraIniziale [,NumeriNegativiTraParentesi [,CifreRaggruppate]]]])

La sintassi della funzione FormatCurrency è composta dalle seguenti parti:

Parte	Descrizione
Espressione	Obbligatoria. Espressione a cui verrà applicato il formato.
NumCifreDecimali	Facoltativa. Valore numerico che specifica il numero di cifre decimali da visualizzare. Il valore predefinito è -1, che indica che vengono utilizzate le impostazioni internazionali del sistema.
CifraIniziale	Facoltativa. Costante Tristate che specifica se per i valori frazionari deve essere visualizzato o meno uno zero iniziale. I possibili valori sono indicati nella sezione "Impostazioni".
NumeriNegativiTraParentesi	Facoltativa. Costante Tristate che specifica se i valori negativi devono essere racchiusi o meno tra parentesi. I possibili valori sono indicati nella sezione "Impostazioni".
CifreRaggruppate	Facoltativa. Costante Tristate che specifica se i numeri devono essere o meno raggruppati utilizzando il carattere di delimitazione di gruppo specificato nelle impostazioni internazionali del sistema. I possibili valori sono indicati nella sezione "Impostazioni".
Impostazioni

Le possibili impostazioni di CifraIniziale, NumeriNegativiTraParentesi e CifreRaggruppate sono:

Costante	Valore	Descrizione
vbTrue	–1	True
vbFalse	0	False
vbUseDefault	–2	Vengono utilizzate le impostazioni internazionali del sistema.
Osservazioni

Gli argomenti facoltativi omessi vengono definiti in base alle impostazioni internazionali del sistema.

La posizione del simbolo di valuta viene determinata in base alle impostazioni internazionali del sistema.

Nota   Tutti i valori vengono determinati in base alle impostazioni della scheda Valuta delle impostazioni internazionali, tranne lo zero iniziale che viene impostato nella scheda Numero.


Funzione FormatDateTime

Descrizione

Restituisce un'espressione in formato di data o ora.

Sintassi

FormatDateTime(Data[,FormatoSpecifico])

La sintassi della funzione FormatDateTime è composta dalle seguenti parti:

Parte	Descrizione
Data	Obbligatoria. Espressione di data a cui verrà applicato il formato.
FormatoSpecifico	Facoltativa. Valore numerico che specifica il formato di data/ora utilizzato. Se omesso, viene automaticamente utilizzata la costante vbGeneralDate.
Impostazioni

Le possibili impostazioni di FormatoSpecifico sono:

Costante	Valore	Descrizione
vbGeneralDate	0	Viene visualizzata una data e/o un'ora. Se si include la parte della data, la data verrà visualizzata in formato breve. Se si include la parte dell'ora, l'ora verrà visualizzata in formato esteso. Se entrambe le parti vengono specificate, verrà visualizzata sia la data che l'ora.
vbLongDate	1	Visualizza la data nel formato esteso specificato nelle impostazioni internazionali del sistema.
vbShortDate	2	Visualizza la data nel formato breve specificato nelle impostazioni internazionali del sistema.
vbLongTime	3	Visualizza l'ora nel formato specificato nelle impostazioni internazionali del sistema.
vbShortTime	4	Visualizza l'ora nel formato a 24 ore (hh:mm).


Funzione FormatNumber

Descrizione

Restituisce un'espressione in formato di numero.

Sintassi

FormatNumber(Espressione[,NumCifreDecimali [,CifraIniziale [,NumeriNegativiTraParentesi [,CifreRaggruppate]]]])

La sintassi della funzione FormatNumber è composta dalle seguenti parti:

Parte	Descrizione
Espressione	Obbligatoria. Espressione a cui verrà applicato il formato.
NumCifreDecimali	Facoltativa. Valore numerico che specifica il numero di cifre decimali da visualizzare. Il valore predefinito è -1, che indica che vengono utilizzate le impostazioni internazionali del sistema.
CifraIniziale	Facoltativa. Costante Tristate che specifica se per i valori frazionari deve essere visualizzato o meno uno zero iniziale. I possibili valori sono indicati nella sezione "Impostazioni".
NumeriNegativiTraParentesi	Facoltativa. Costante Tristate che specifica se i valori negativi devono essere racchiusi o meno tra parentesi. I possibili valori sono indicati nella sezione "Impostazioni".
CifreRaggruppate	Facoltativa. Costante Tristate che specifica se i numeri devono essere o meno raggruppati utilizzando il carattere di delimitazione di gruppo specificato nelle impostazioni internazionali del sistema. I possibili valori sono indicati nella sezione "Impostazioni".
Impostazioni

Le possibili impostazioni di CifraIniziale, NumeriNegativiTraParentesi e CifreRaggruppate sono:

Costante	Valore	Descrizione
vbTrue	–1	True
vbFalse	0	False.
vbUseDefault	–2	Vengono utilizzate le impostazioni internazionali del sistema.
Osservazioni

I valori degli argomenti facoltativi omessi vengono definiti in base alle impostazioni internazionali del sistema.

Nota   Tutti i valori vengono determinati in base alle impostazioni della scheda Numero nelle impostazioni internazionali.


Funzione FormatPercent

Descrizione

Restituisce un'espressione in formato di percentuale (moltiplicata per 100) con il carattere % finale.

Sintassi

FormatPercent(Espressione[,NumCifreDecimali [,CifraIniziale [,NumeriNegativiTraParentesi [,CifreRaggruppate]]]])

La sintassi della funzione FormatPercent è composta dalle seguenti parti:

Parte	Descrizione
Espressione	Obbligatoria. Espressione a cui verrà applicato il formato.
NumCifreDecimali	Facoltativa. Valore numerico che specifica il numero di cifre decimali da visualizzare. Il valore predefinito è -1, che indica che vengono utilizzate le impostazioni internazionali del sistema.
CifraIniziale	Facoltativa. Costante Tristate che specifica se per i valori frazionari deve essere visualizzato o meno uno zero iniziale. I possibili valori sono indicati nella sezione "Impostazioni".
NumeriNegativiTraParentesi	Facoltativa. Costante Tristate che specifica se i valori negativi devono essere racchiusi o meno tra parentesi. I possibili valori sono indicati nella sezione "Impostazioni".
CifreRaggruppate	Facoltativa. Costante Tristate che specifica se i numeri devono essere o meno raggruppati utilizzando il carattere di delimitazione di gruppo specificato nel Pannello di controllo. I possibili valori sono indicati nella sezione "Impostazioni".
Impostazioni

Le possibili impostazioni di CifraIniziale, NumeriNegativiTraParentesi e CifreRaggruppate sono:

Costante	Valore	Descrizione
vbTrue	–1	True
vbFalse	0	False.
vbUseDefault	–2	Vengono utilizzate le impostazioni internazionali del sistema.
Osservazioni

Gli argomenti facoltativi omessi vengono definiti in base alle impostazioni internazionali del sistema.

Nota   Tutti i valori vengono determinati in base alle impostazioni della scheda Numero nelle impostazioni internazionali.


Funzione InstrRev

Descrizione

Restituisce la posizione di un'occorrenza di una stringa inclusa in un'altra a partire dalla fine della stringa.

Sintassi

InstrRev(stringcheck, stringmatch[, start[, compare]])

La sintassi della funzione InstrRev è composta dai seguenti argomenti predefinit:

Parte	Descrizione
stringcheck	Obbligatoria. Espressione stringa in cui viene eseguita la ricerca.
stringmatch	Obbligatoria. Espressione stringa da cercare.
start	Facoltativa. Espressione numerica che imposta il punto di partenza di ciascuna ricerca. Se omessa, viene automaticamente utilizzato il valore -1 che imposta la ricerca a partire dall'ultimo carattere. Se l'argomento include un valore Null, verrà generato un errore.
compare	Facoltativa. Valore numerico che specifica il tipo di confronto da utilizzare nella valutazione delle sottostringhe. Se omesso, viene eseguito un confronto binario. I possibili valori sono indicati nella sezione "Impostazioni".
Impostazioni

Le possibili impostazioni di confronto sono:

Costante	Valore	Descrizione
vbUseCompareOption	–1	Esegue un confronto utilizzando l'impostazione dell'istruzione Option Compare.
vbBinaryCompare	0	Esegue un confronto binario.
vbTextCompare	1	Esegue un confronto di testo.
vbDatabaseCompare	2	Solo per Microsoft Access. Esegue un confronto in base alle informazioni del database.
Valori restituiti

I possibili valori restituiti dalla funzione InStrRev sono:

Se	InStrRev restituisce
stringcheck è di lunghezza zero	0
stringcheck è Null	Null
stringmatch è di lunghezza zero	start
stringmatch è Null	Null
stringmatch non viene trovata	0
stringmatch è contenuto in stringcheck	Posizione in cui viene trovata la corrispondenza.
start > Len(stringmatch)	0
Osservazioni

La sintassi della funzione InstrRev è diversa da quella della funzione Instr.


Funzione Join

Descrizione

Restituisce una stringa creata tramite l'unione di un certo numero di sottostringhe di una matrice.

Sintassi

Join(sourcearray[, delimiter])

La sintassi della funzione Join è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
sourcearray	Obbligatoria. Matrice a una dimensione contenente le sottostringhe da unire.
delimiter	Facoltativa. Carattere stringa utilizzato per separare le sottostringhe nella stringa restituita. Se omesso, verrà automaticamente utilizzato lo spazio (" "). Se delimiter è una stringa di lunghezza zero (""), verranno unite tutte le voci dell'elenco senza alcun delimitatore.


Funzione MonthName

Descrizione

Restituisce una stringa che indica il mese specificato.

Sintassi

MonthName(mese[, abbreviazione])

La sintassi della funzione MonthName è composta dalle seguenti parti:

Parte	Descrizione
mese	Obbligatoria. Definizione numerica del mese, ad esempio 1 corrisponde a gennaio, 2 a febbraio e così via.
abbreviazione	Facoltativa. Valore booleano che specifica se il nome del mese deve essere o meno abbreviato. Se omesso, l'impostazione predefinita è False, in base a cui il nome del mese non viene abbreviato.


Funzione Replace

Descrizione

Restituisce una stringa in cui la sottostringa specificata è stata sostituita con un'altra sottostringa per il numero di volte indicato.

Sintassi

Replace(expression, find, replace[, start[, count[, compare]]])

La sintassi della funzione Replace è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
expression	Obbligatoria. Espressione stringa che specifica la sottostringa da sostituire.
find	Obbligatoria. Sottostringa di cui si esegue la ricerca.
replace	Obbligatoria. Sottostringa di sostituzione.
start	Facoltativa. Posizione all'interno di expression da cui iniziare la ricerca. Se omessa, viene automaticamente impostata la posizione 1.
count	Facoltativa. Numero di sostituzioni di sottostringhe da eseguire. Se omesso, viene automaticamente impostato -1, che indica che verranno eseguite tutte le sostituzioni possibili.
compare	Facoltativa. Valore numerico che specifica il tipo di confronto da utilizzare nella valutazione delle sottostringhe. I possibili valori sono indicati nella sezione "Impostazioni".
Impostazioni

Le possibili impostazioni di compare sono:

Costante	Valore	Descrizione
vbUseCompareOption	–1	Esegue un confronto utilizzando l'impostazione dell'istruzione Option Compare.
vbBinaryCompare	0	Esegue un confronto binario.
vbTextCompare	1	Esegue un confronto di testo.
vbDatabaseCompare	2	Solo per Microsoft Access. Esegue un confronto in base alle informazioni del database.
Valori restituiti

I possibili valori restituiti dalla funzione Replace sono:

Se	Replace restituisce
expression è di lunghezza zero	Una stringa di lunghezza zero ("")
expression è Null	Un errore.
find è di lunghezza zero	Una copia di expression.
replace è di lunghezza zero	Una copia di expression da cui sono state rimosse tutte le occorrenze di find.
start > Len(expression)	Una stringa di lunghezza zero.
count è 0	Una copia di expression.
Osservazioni

Il valore restituito dalla funzione Replace è una stringa, in cui sono state eseguite le sostituzioni, che inizia dalla posizione specificata nell'argomento start e termina alla fine della stringa expression. Non si tratta di una copia della stringa originale.


Funzione Round

Descrizione

Restituisce un numero arrotondato in base al numero di cifre decimali specificato.

Sintassi

Round(espressione[, numcifredecimali])

La sintassi della funzione Round è composta dalle seguenti parti:

Parte	Descrizione
espressione	Obbligatoria. Espressione numerica da arrotondare.
numcifredecimali	Facoltativa. Numero che specifica il numero di cifre decimali da includere nell'arrotondamento. Se omesso, la funzione Round restituisce numeri interi.


Funzione Split

Descrizione

Restituisce una matrice a una dimensione con base zero contenente il numero di sottostringhe specificato.

Sintassi

Split(expression[, delimiter[, limit[, compare]]])

La sintassi della funzione Split è composta dai seguenti argomenti predefiniti:

Parte	Descrizione
expression	Obbligatoria. Espressione stringa contenente sottostringhe e delimitatori. Se expression è una stringa di lunghezza zero (""), la funzione Split restituirà una matrice vuota, ovvero una matrice che non contiene alcun elemento o dato.
delimiter	Facoltativa. Carattere che consente di identificare i limiti della sottostringa. Se omesso, viene automaticamente utilizzato come delimitatore lo spazio (" "). Se delimiter è una stringa di lunghezza zero, verrà restituita una matrice di un solo elemento contenente l'intera stringa expression.
limit	Facoltativa. Numero di sottostringhe da restituire. Il valore -1 indica che vengono restituite tutte le sottostringhe.
compare	Facoltativa. Valore numerico che specifica il tipo di confronto da utilizzare nella valutazione delle sottostringhe. I possibili valori sono indicati nella sezione "Impostazioni".
Impostazioni

Le possibili impostazioni di compare sono:

Costante	Valore	Descrizione
vbUseCompareOption	–1	Esegue un confronto utilizzando l'impostazione dell'istruzione Option Compare.
vbBinaryCompare	0	Esegue un confronto binario.
vbTextCompare	1	Esegue un confronto di testo.
vbDatabaseCompare	2	Solo per Microsoft Access. Esegue un confronto in base alle informazioni del database.


Funzione StrReverse

Descrizione

Restituisce una stringa in cui l'ordine dei caratteri della stringa specificata è stato invertito.

Sintassi

StrReverse(expression)

L'argomento expression è la stringa di cui deve essere invertito l'ordine dei caratteri. Se expression è una stringa di lunghezza zero (""), verrà restituita una stringa di lunghezza zero. Se expression è Null, verrà generato un errore.


Funzione WeekDayName

Descrizione

Restituisce una stringa che indica il giorno della settimana specificato.

Sintassi

WeekdayName(giornosettimana, abbreviazione, primogiornosettimana)

La sintassi della funzione WeekDayName è composta dalle seguenti parti:

Parte	Descrizione
giornosettimana	Obbligatoria. Definizione numerica del giorno della settimana. Il valore numerico dei vari giorni dipende dal valore di primogiornosettimana.
abbreviazione	Facoltativa. Valore booleano che specifica se il nome del giorno della settimana deve essere o meno abbreviato. Se omesso, l'impostazione predefinita è False, in base a cui il nome del giorno della settimana non viene abbreviato.
primogiornosettimana	Facoltativa. Valore numerico che specifica il primo giorno della settimana. I possibili valori sono indicati nella sezione "Impostazioni".
Impostazioni

Le possibili impostazioni di primogiornosettimana sono:

Costante	Valore	Descrizione
vbUseSystem	0	Viene utilizzata l'impostazione API National Language Support (NLS).
vbSunday	1	Domenica (impostazione predefinita)
vbMonday	2	Lunedì
vbTuesday	3	Martedì
vbWednesday	4	Mercoledì
vbThursday	5	Giovedì
vbFriday	6	Venerdì
vbSaturday	7	Sabato


Metodo Add (Dictionary)

Descrizione

Aggiunge una coppia chiave/voce in un oggetto Dictionary.

Sintassi

oggetto.Add chiave, voce

La sintassi del metodo Add è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto Dictionary.
chiave	Obbligatoria. Chiave associata alla voce da aggiungere.
voce	Obbligatoria. Voce associata alla chiave da aggiungere.
Osservazioni

Se chiave esiste già, verrà generato un errore.


Metodo Add (Folders)

Descrizione

Aggiunge un nuovo oggetto Folder in un insieme Folders.

Sintassi

oggetto.Add nomecartella

La sintassi del metodo Add è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un insieme Folders.
nomecartella	Obbligatoria. Nome del nuovo oggetto Folder aggiunto.
Osservazioni

Se nomecartella esiste già, verrà generato un errore.


Metodo BuildPath

Descrizione

Accoda un nome a un percorso esistente.

Sintassi

oggetto.BuildPath(percorso, nome)

La sintassi del metodo BuildPath è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
percorso	Obbligatoria. Percorso esistente a cui viene accodato nome. Il percorso può essere assoluto o relativo e non è necessario specificare una cartella esistente.
nome	Obbligatoria. Nome da accodare al percorso esistente.
Osservazioni

Il metodo BuildPath inserisce un altro separatore di percorso tra il nome e il percorso esistente soltanto se necessario.


Metodo Close

Descrizione

Chiude un file TextStream aperto.

Sintassi

oggetto.Close

L'argomento oggetto è sempre il nome di un oggetto TextStream.


Metodo Copy

Descrizione

Copia un file o una cartella specificata da una posizione a un'altra.

Sintassi

oggetto.Copy destinazione[, sovrascrittura]

La sintassi del metodo Copy è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto File o Folder.
destinazione	Obbligatoria. Destinazione in cui copiare il file o la cartella. Non è consentito l'utilizzo dei caratteri jolly.
sovrascrittura	Facoltativa. Valore booleano che deve essere impostato su True (impostazione predefinita) se si desidera sovrascrivere i file o le cartelle esistenti, oppure su False in caso contrario.
Osservazioni

I risultati ottenuti utilizzando il metodo Copy su un oggetto File o Folder equivalgono a quelli ottenuti utilizzando FileSystemObject.CopyFile o FileSystemObject.CopyFolder, dove il file o la cartella a cui fa riferimento oggetto viene passato come argomento. Si noti tuttavia che i metodi alternativi consentono di copiare più file o cartelle contemporaneamente.


Metodo CopyFile

Descrizione

Copia uno o più file da una posizione a un'altra.

Sintassi

oggetto.CopyFile origine, destinazione[, sovrascrittura]

La sintassi del metodo CopyFile è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
origine	Obbligatoria. Indicazione del file o dei file da copiare espressa come stringa di caratteri che può contenere caratteri jolly.
destinazione	Obbligatoria. Destinazione espressa come stringa di caratteri in cui copiare i file provenienti da origine. Non è consentito l'utilizzo dei caratteri jolly.
sovrascrittura	Facoltativa. Valore booleano che indica se sovrascrivere i file esistenti. Se è True, i file verranno sovrascritti, se è False, non verranno sovrascritti. Il valore predefinito è True. Si noti che se per destinazione è stato impostato l'attributo di sola lettura, non sarà possibile eseguire il metodo CopyFile, indipendentemente dal valore di sovrascrittura.
Osservazioni

È possibile utilizzare i caratteri jolly soltanto nell'ultimo componente del percorso dell'argomento origine. Ad esempio, è possibile utilizzare:

FileSystemObject.CopyFile "c:\mieidocumenti\lettere\*.doc", "c:\cartellatemporanea\"

Non è tuttavia possibile utilizzare:

FileSystemObject.CopyFile "c:\mieidocumenti\*\R1???97.xls", "c:\cartellatemporanea"

Se origine contiene caratteri jolly o se destinazione termina con un separatore di percorso (\), destinazione specificherà una cartella esistente in cui copiare i file corrispondenti. In caso contrario, destinazione specificherà il nome di un file da creare. Quando si copia un singolo file, possono essere eseguite tre operazioni.

•	Se destinazione non esiste, il file di origine verrà copiato (impostazione predefinita).

•	Quando destinazione è un file esistente, se sovrascrittura è False verrà generato un errore. In caso contrario, si tenterà di copiare origine sul file esistente.

•	Se destinazione è una directory, verrà generato un errore.

Verrà inoltre generato un errore se il carattere jolly utilizzato per origine non consente di trovare corrispondenze con file esistenti. Il metodo CopyFile si interrompe quando viene generato il primo errore. Non verrà annullata alcuna modifica apportata prima del verificarsi dell'errore.


Metodo CopyFolder

Descrizione

Copia una cartella in modo ricorsivo da una posizione a un'altra.

Sintassi

oggetto.CopyFolder origine, destinazione[, sovrascrittura]

La sintassi del metodo CopyFolder è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
origine	Obbligatoria. Indicazione della cartella o delle cartelle da copiare espressa come stringa di caratteri che può contenere caratteri jolly.
destinazione	Obbligatoria. Destinazione espressa come stringa di caratteri in cui copiare la cartella e le sottocartelle provenienti da origine. Non è consentito l'utilizzo dei caratteri jolly.
sovrascrittura	Facoltativa. Valore booleano che indica se sovrascrivere le cartelle esistenti. Se è True, le cartelle verranno sovrascritte, se è False, non verranno sovrascritte. Il valore predefinito è True.
Osservazioni

È possibile utilizzare i caratteri jolly soltanto nell'ultimo componente del percorso dell'argomento origine. Ad esempio, è possibile utilizzare:

FileSystemObject.CopyFolder "c:\mieidocumenti\lettere\*", "c:\cartellatemporanea\"

Non è tuttavia possibile utilizzare:

FileSystemObject.CopyFolder "c:\mieidocumenti\*\*", "c:\cartellatemporanea\"

Se origine contiene caratteri jolly o se destinazione termina con un separatore di percorso (\), destinazione specificherà una cartella esistente in cui copiare le cartelle o le sottocartelle corrispondenti. In caso contrario, destinazione corrisponderà il nome di una cartella da creare. Quando si copia una singola cartella, possono essere eseguite quattro operazioni.

•	Se destinazione non esiste, la cartella di origine verrà copiata insieme al relativo contenuto (impostazione predefinita).

•	Se destinazione è un file esistente, verrà generato un errore.

•	Se destinazione è una directory, si tenterà di copiare la cartella e il relativo contenuto. Quando un file contenuto in origine esiste già in destinazione, verrà generato un errore se sovrascrittura è False. In caso contrario, si tenterà di sovrascrivere il file esistente.

•	Quando destinazione è una directory di sola lettura, se si tenta di copiare un file di sola lettura esistente in tale directory e sovrascrittura è False verrà generato un errore.

Verrà inoltre generato un errore se il carattere jolly utilizzato per origine non consente di trovare corrispondenze con cartelle esistenti.

Il metodo CopyFolder si interrompe quando viene generato il primo errore. Non verrà annullata alcuna modifica apportata prima del verificarsi dell'errore.


Metodo CreateFolder

Descrizione

Crea una cartella.

Sintassi

oggetto.CreateFolder(nomecartella)

La sintassi del metodo CreateFolder è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
nomecartella	Obbligatoria. Espressione stringa che identifica la cartella da creare.
Osservazioni

Se la cartella specificata esiste già, verrà generato un errore.


Metodo CreateTextFile

Descrizione

Crea il file specificato e restituisce un oggetto TextStream che è possibile utilizzare per leggere dal file o per scrivere nel file.

Sintassi

oggetto.CreateTextFile(nomefile[, sovrascrittura[, unicode]])

La sintassi del metodo CreateTextFile è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject o Folder.
nomefile	Obbligatoria. Espressione stringa che identifica il file da creare.
sovrascrittura	Facoltativa. Valore booleano che specifica se sovrascrivere o meno i file esistenti. È True se i file possono essere sovrascritti, False in caso contrario. Se omesso, i file esistenti non vengono sovrascritti.
unicode	Facoltativa. Valore booleano che specifica se il file viene creato come file Unicode o ASCII. È True se il file viene creato come file Unicode, False se viene creato come file ASCII. Se omesso, viene creato un file ASCII.
Osservazioni

In questo esempio viene illustrato l'utilizzo del metodo CreateTextFile per creare e aprire un file di testo:

Sub CreateAfile

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set a = fs.CreateTextFile("c:\prova.txt", True)

    a.WriteLine("Questa è una prova.")

    a.Close

End Sub

Se l'argomento sovrascrittura è False, o non viene specificato, per un file già esistente indicato in nomefile, verrà generato un errore.


Metodo Delete

Descrizione

Elimina un file o una cartella specificata.

Sintassi

oggetto.Delete elimina

La sintassi del metodo Delete è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto File o Folder.
elimina	Facoltativa. Valore booleano che deve essere impostato su True se si desidera eliminare i file o le cartelle di cui è stato impostato l'attributo di sola lettura oppure su False (impostazione predefinita) in caso contrario.
Osservazioni

Se il file o la cartella specificata non esiste, verrà generato un errore.

I risultati del metodo Delete su un oggetto File o Folder corrispondono ai risultati delle operazioni eseguite utilizzando FileSystemObject.DeleteFile o FileSystemObject.DeleteFolder.

Il metodo Delete non fa distinzione tra cartelle contenenti elementi e cartelle vuote. La cartella specificata viene eliminata indipendentemente dal suo contenuto.


Metodo DeleteFile

Descrizione

Elimina un file specificato.

Sintassi

oggetto.DeleteFile filespec[, elimina]

La sintassi del metodo DeleteFile è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
filespec	Nome del file da eliminare. In filespec è possibile specificare caratteri jolly nell'ultimo elemento del percorso.
elimina	Facoltativa. Valore booleano che deve essere impostato su True se si desidera eliminare i file di cui è stato impostato l'attributo di sola lettura oppure su False (impostazione predefinita) in caso contrario.
Osservazioni

Se non vengono trovati file corrispondenti, verrà generato un errore. Il metodo DeleteFile si interrompe quando viene generato il primo errore. Non verrà annullata alcuna modifica apportata prima del verificarsi dell'errore.


Metodo DeleteFolder

Descrizione

Elimina una cartella specificata e il relativo contenuto.

Sintassi

oggetto.DeleteFolder cartellaspec[, elimina]

La sintassi del metodo DeleteFolder è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
cartellaspec	Obbligatoria. Nome della cartella da eliminare. In cartellaspec è possibile specificare caratteri jolly nell'ultimo elemento del percorso.
elimina	Facoltativa. Valore booleano che deve essere impostato su True se si desidera eliminare le cartelle di cui è stato impostato l'attributo di sola lettura oppure su False (impostazione predefinita) in caso contrario.
Osservazioni

Il metodo DeleteFolder non fa distinzione tra cartelle contenente elementi e cartelle vuote. La cartella specificata viene eliminata indipendentemente dal suo contenuto.

Se non vengono trovate cartelle corrispondenti, verrà generato un errore. Il metodo DeleteFolder si interrompe quando viene generato il primo errore. Non verrà annullata alcuna modifica apportata prima del verificarsi dell'errore.


Metodo DriveExists

Descrizione

Restituisce True se l'unità specificata esiste; False in caso contrario.

Sintassi

oggetto.DriveExists(unitàspec)

La sintassi del metodo DriveExists è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
unitàspec	Obbligatoria. Lettera di unità o percorso completo.
Osservazioni

Per le unità con supporto rimovibile, il metodo DriveExists restituisce True anche se non è presente alcun supporto. Utilizzare la proprietà IsReady dell'oggetto Drive per determinare se un'unità è pronta.


Metodo Exists

Descrizione

Restituisce True se la chiave specificata è inclusa nell'oggetto Dictionary, False in caso contrario.

Sintassi

oggetto.Exists(chiave)

La sintassi del metodo Exists è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto Dictionary.
chiave	Obbligatoria. Valore chiave di cui si esegue la ricerca nell'oggetto Dictionary.


Metodo FileExists

Descrizione

Restituisce True se il file specificato esiste, False in caso contrario.

Sintassi

oggetto.FileExists(filespec)

La sintassi del metodo FileExists è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
filespec	Obbligatoria. Nome del file di cui si deve determinare l'esistenza. Se si prevede che il file non esiste nella cartella corrente, sarà necessario specificare un percorso completo (assoluto o relativo).


Metodo FolderExists

Descrizione

Restituisce True se la cartella specificata esiste, False in caso contrario.

Sintassi

oggetto.FolderExists(cartellaspec)

La sintassi del metodo FolderExists è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
cartellaspec	Obbligatoria. Nome della cartella di cui si deve determinare l'esistenza. Se si prevede che la cartella non esiste nella cartella corrente, sarà necessario specificare un percorso completo (assoluto o relativo).


Metodo GetAbsolutePathName

Descrizione

Restituisce un percorso completo e non ambiguo da un percorso specificato.

Sintassi

oggetto.GetAbsolutePathName(percorsospec)

La sintassi del metodo GetAbsolutePathName è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
percorsospec	Obbligatoria. Nome di percorso che verrà modificato in percorso completo e non ambiguo.
Osservazioni

Un percorso è completo e non ambiguo se fornisce un riferimento completo dalla cartella principale dell'unità specificata. Un percorso completo può terminare soltanto con un carattere separatore di percorso (\) se specifica la cartella principale di un'unità connessa.

La seguente tabella descrive il funzionamento del metodo GetAbsolutePathName se la directory corrente è c:\mieidocumenti\relazioni.

percorsospec	Percorso restituito
"c:"	"c:\mieidocumenti\relazioni"
"c:.."	"c:\mieidocumenti"
"c:\\\"	"c:\"
"c:*.*\maggio97"	"c:\mieidocumenti\relazioni\*.*\maggio97"
"area1"	"c:\mieidocumenti\relazioni\area1"
"c:\..\..\mieidocumenti"	"c:\mieidocumenti"


Metodo GetBaseName

Descrizione

Restituisce una stringa contenente il nome di base dell'ultimo componente di un percorso, senza l'estensione di file.

Sintassi

oggetto.GetBaseName(percorso)

La sintassi del metodo GetBaseName è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
percorso	Obbligatoria. Percorso del componente di cui si desidera restituire il nome di base.
Osservazioni

Se nessun componente corrisponde all'argomento percorso, il metodo GetBaseName restituirà una stringa di lunghezza zero ("").

Nota   Il metodo GetBaseName esegue operazioni solo sulla stringa percorso specificata. Non cerca di risolvere il percorso, né di verificare l'esistenza del percorso specificato.


Metodo GetDrive

Descrizione

Restituisce un oggetto Drive corrispondente all'unità di un percorso specificato.

Sintassi

oggetto.GetDrive unitàspec

La sintassi del metodo GetDrive è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
unitàspec	Obbligatoria. L'argomento unitàspec può essere una lettera di unità (c), una lettera di unità seguita dai due punti (c:), una lettera di unità seguita dai due punti e da un separatore di percorso (c:\) oppure un nome di condivisione (\\computer2\condivisione1).
Osservazioni

Per i nomi di condivisione, viene verificata l'esistenza della condivisione.

Se unitàspec non corrisponde a uno dei formati accettati o non esiste, verrà generato un errore.

Per richiamare il metodo GetDrive per una stringa di percorso normale, utilizzare la sequenza riportata di seguito per ottenere una stringa appropriata da utilizzare come unitàspec:

DriveSpec = GetDriveName(GetAbsolutePathName(Path))


Metodo GetDriveName

Descrizione

Restituisce una stringa contenente il nome dell'unità di un percorso specificato.

Sintassi

oggetto.GetDriveName(percorso)

La sintassi del metodo GetDriveName è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
percorso	Obbligatoria. Percorso del componente di cui si desidera restituire il nome di unità.
Osservazioni

Il metodo GetDriveName restituisce una stringa di lunghezza zero ("") se non è possibile determinare l'unità.

Nota   Il metodo GetDriveName esegue operazioni solo sulla stringa percorso specificata. Non cerca di risolvere il percorso, né di verificare l'esistenza del percorso specificato.


Metodo GetExtensionName

Descrizione

Restituisce una stringa contenente il nome dell'estensione dell'ultimo componente di un percorso.

Sintassi

oggetto.GetExtensionName(percorso)

La sintassi del metodo GetExtensionName è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
percorso	Obbligatoria. Percorso del componente di cui si desidera restituire il nome dell'estensione.
Osservazioni

Nelle unità di rete, la directory principale (\) viene considerata un componente.

Il metodo GetExtensionName restituisce una stringa di lunghezza zero ("") se all'argomento percorso non corrisponde alcun componente.


Metodo GetFile

Descrizione

Restituisce un oggetto File corrispondente al file di un percorso specificato.

Sintassi

oggetto.GetFile(filespec)

La sintassi del metodo GetFile è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
filespec	Obbligatoria. L'argomento filespec corrisponde al percorso (assoluto o relativo) di un file specifico.
Osservazioni

Se il file specificato non esiste, verrà generato un errore.


Metodo GetFileName

Descrizione

Restituisce l'ultimo componente di un percorso specificato che non fa parte dell'unità specificata.

Sintassi

oggetto.GetFileName(percorsospec)

La sintassi del metodo GetFileName è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
percorsospec	Obbligatoria. Percorso (assoluto o relativo) di un file specifico.
Osservazioni

Il metodo GetFileName restituisce una stringa di lunghezza zero ("") se percorsospec non finisce con il componente specificato.

Nota   Il metodo GetFileName esegue operazioni solo sulla stringa di percorso specificata. Non cerca di risolvere il percorso, né di verificare l'esistenza del percorso specificato.


Metodo GetFolder

Descrizione

Restituisce un oggetto Folder corrispondente a una cartella nel percorso specificato.

Sintassi

oggetto.GetFolder(cartellaspec)

La sintassi del metodo GetFolder è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
cartellaspec	Obbligatoria. L'argomento cartellaspec corrisponde al percorso (assoluto o relativo) di una cartella specifica.
Osservazioni

Se la cartella specificata non esiste, verrà generato un errore.


Metodo GetParentFolderName

Descrizione

Restituisce una stringa contenente il nome della cartella principale dell'ultimo componente di un percorso specificato.

Sintassi

oggetto.GetParentFolderName(percorso)

La sintassi del metodo GetParentFolderName è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
percorso	Obbligatoria. Percorso del componente di cui si desidera venga restituito il nome della cartella principale.
Osservazioni

Il metodo GetParentFolderName restituisce una stringa di lunghezza zero ("") se all'argomento percorso non corrisponde alcuna cartella principale.

Nota   Il metodo GetParentFolderName esegue operazioni solo sulla stringa percorso specificata. Non cerca di risolvere il percorso, né di verificare l'esistenza del percorso specificato.


Metodo GetSpecialFolder

Descrizione

Restituisce la cartella speciale specificata.

Sintassi

oggetto.GetSpecialFolder(cartellaspec)

La sintassi del metodo GetSpecialFolder è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
cartellaspec	Obbligatoria. Nome della cartella speciale da restituire, che può corrispondere a una delle costanti indicate nella sezione "Impostazioni".
Impostazioni

Le possibili impostazioni di cartellaspec sono:

Costante	Valore	Descrizione
WindowsFolder	0	Cartella Windows che contiene i file installati dal sistema operativo Windows.
SystemFolder	1	Cartella System che contiene le librerie, i tipi di carattere e i driver di periferica.
TemporaryFolder	2	Cartella Temp che viene utilizzata per memorizzare i file temporanei. Il percorso si trova nella variabile di ambiente TMP.


Metodo GetTempName

Descrizione

Restituisce un nome di cartella o di file temporaneo generato in modo casuale, che è possibile utilizzare per eseguire operazioni che richiedono una cartella o un file temporaneo.

Sintassi

oggetto.GetTempName

L'argomento oggetto facoltativo corrisponde sempre al nome di un oggetto FileSystemObject.

Osservazioni

Il metodo GetTempName non crea un file, ma fornisce soltanto un nome di file temporaneo che è possibile utilizzare con CreateTextFile per creare un file.


Metodo Items

Descrizione

Restituisce una matrice contenente tutte le voci incluse nell'oggetto Dictionary.

Sintassi

oggetto.Items

L'argomento oggetto è sempre il nome di un oggetto Dictionary.

Osservazioni

In questo esempio viene illustrato l'utilizzo del metodo Items:

Dim a, d, i             'Crea delle variabili

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Atene"     'Aggiunge alcune chiavi e voci

d.Add "b", "Belgrado"

d.Add "c", "Il Cairo"

a = d.Items             'Legge le voci

For i = 0 To d.Count -1 'Esegue un'iterazione nella matrice

    Print a(i)          'Stampa la voce

Next

...


Metodo Keys

Descrizione

Restituisce una matrice contenente tutte le chiavi incluse in un oggetto Dictionary.

Sintassi

oggetto.Keys

L'argomento oggetto è sempre il nome di un oggetto Dictionary.

Osservazioni

In questo esempio viene illustrato l'utilizzo del metodo Keys:

Dim a, d, i             'Crea delle variabili

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Atene"     'Aggiunge alcune chiavi e voci.

d.Add "b", "Belgrado"

d.Add "c", "Il Cairo"

a = d.keys              'Legge le chiavi

For i = 0 To d.Count -1 'Esegue un'iterazione nella matrice

    Print a(i)          'Stampa la chiave

Next

...


Metodo Move

Descrizione

Sposta una cartella o un file specificato da una posizione a un'altra.

Sintassi

oggetto.Move destinazione

La sintassi del metodo Move è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto File o Folder.
destinazione	Obbligatoria. Destinazione in cui si desidera spostare il file o la cartella. Non è consentito l'utilizzo di caratteri jolly.
Osservazioni

Il risultato del metodo Move su un oggetto File o Folder corrisponde alle operazioni eseguite utilizzando FileSystemObject.MoveFile o FileSystemObject.MoveFolder. Si noti tuttavia che i metodi alternativi consentono di spostare più file o cartelle contemporaneamente.


Metodo MoveFile

Descrizione

Sposta uno o più file da una posizione a un'altra.

Sintassi

oggetto.MoveFile origine, destinazione

La sintassi del metodo MoveFile è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
origine	Obbligatoria. Percorso di uno o più file da spostare. La stringa dell'argomento origine può contenere caratteri jolly soltanto nell'ultimo componente del percorso.
destinazione	Obbligatoria. Percorso in cui si desidera spostare uno o più file. L'argomento destinazione non può contenere caratteri jolly.
Osservazioni

Se origine contiene caratteri jolly o se destinazione termina con un separatore di percorso (\), destinazione specificherà una cartella esistente in cui spostare i file corrispondenti. In caso contrario, destinazione corrisponderà al nome di un file di destinazione da creare. In entrambi i casi, quando si sposta un singolo file possono essere eseguite tre operazioni:

•	Se destinazione non esiste, il file verrà spostato (è il caso più frequente).

•	Se destinazione corrisponde a un file esistente, verrà generato un errore.

•	Se destinazione corrisponde a una directory, verrà generato un errore.

Verrà inoltre generato un errore se il carattere jolly utilizzato per origine non consente di trovare corrispondenze con file esistenti. Il metodo MoveFile si interrompe quando viene generato il primo errore. Non verrà annullata alcuna modifica apportata prima del verificarsi dell'errore.

Importante   Questo metodo consente di spostare file tra volumi soltanto se l'operazione è supportata dal sistema operativo.


Metodo MoveFolder

Descrizione

Sposta una o più cartelle da una posizione a un'altra.

Sintassi

oggetto.MoveFolder origine, destinazione

La sintassi del metodo MoveFolder è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
origine	Obbligatoria. Percorso di una o più cartelle da spostare. La stringa dell'argomento origine può contenere caratteri jolly soltanto nell'ultimo componente del percorso.
destinazione	Obbligatoria. Percorso in cui si desidera spostare una o più cartelle. L'argomento destinazione non può contenere caratteri jolly.
Osservazioni

Se origine contiene caratteri jolly o se destinazione termina con un separatore di percorso (\), destinazione specificherà una cartella esistente in cui spostare i file corrispondenti. In caso contrario, destinazione corrisponderà al nome di una cartella di destinazione da creare. In entrambi i casi, quando si sposta una singola cartella possono essere eseguite tre operazioni:

•	Se destinazione non esiste, la cartella verrà spostata (è il caso più frequente).

•	Se destinazione corrisponde a un file esistente, verrà generato un errore.

•	Se destinazione corrisponde a una directory, verrà generato un errore.

Verrà inoltre generato un errore se il carattere jolly utilizzato per origine non consente di trovare corrispondenze con cartelle esistenti. Il metodo MoveFolder si interrompe quando viene generato il primo errore. Non verrà annullata alcuna modifica apportata prima del verificarsi dell'errore.

Importante   Questo metodo consente di spostare cartelle tra volumi soltanto se l'operazione è supportata dal sistema operativo.


Metodo OpenAsTextStream

Descrizione

Apre un file specificato e restituisce un oggetto TextStream che è possibile utilizzare per leggere il file oppure per sovrascrivere il file o inserire informazioni alla fine del file.

Sintassi

oggetto.OpenAsTextStream([modoIO, [formato]])

La sintassi del metodo OpenAsTextStream è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto File.
modoIO	Facoltativa. Indica la modalità di input/output e può corrispondere a una delle seguenti tre costanti: ForReading, ForWriting o ForAppending.
formato	Facoltativa. Uno dei tre valori Tristate utilizzati per indicare il formato del file aperto. Se viene omesso, il file verrà aperto in formato ASCII.
Impostazioni

Le possibili impostazioni di modoIO sono:

Costante	Valore	Descrizione
ForReading	1	Apre un file in sola lettura. Non è possibile scrivere nel file.
ForWriting	2	Apre un file in scrittura. Se esiste un file con lo stesso nome, il suo contenuto verrà sovrascritto.
ForAppending	8	Apre un file e scrive alla fine del file.
Le possibili impostazioni di formato sono:

Costante	Valore	Descrizione
TristateUseDefault	–2	Apre il file utilizzando l'impostazione predefinita di sistema.
TristateTrue	–1	Apre il file in formato Unicode.
TristateFalse	0	Apre il file in formato ASCII.
Osservazioni

Il metodo OpenAsTextStream consente di ottenere gli stessi risultati del metodo OpenTextFile dell'oggetto FileSystemObject. Il metodo OpenAsTextStream può inoltre essere utilizzato per scrivere in un file.

In questo esempio viene illustrato l'utilizzo del metodo OpenAsTextStream:

Sub TextStreamTest

    Const ForReading = 1, ForWriting = 2, ForAppending = 3

    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0

    Dim fs, f, ts, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    fs.CreateTextFile "test1.txt"            'Crea un file

    Set f = fs.GetFile("test1.txt")

    Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)

    ts.Write "Salve"

    ts.Close

    Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)

    s = ts.ReadLine

    MsgBox s

    ts.Close

End Sub


Metodo OpenTextFile

Descrizione

Apre un file specificato e restituisce un oggetto TextStream che è possibile utilizzare per leggere il file o inserire informazioni alla fine del file.

Sintassi

oggetto.OpenTextFile(nomefile[, modoIO[, crea[, formato]]])

La sintassi del metodo OpenTextFile è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto FileSystemObject.
nomefile	Obbligatoria. Espressione stringa che identifica il file da aprire.
modoIO	Facoltativa. Indica la modalità di input/output e può corrispondere a una delle seguenti due costanti: ForReading o ForAppending.
crea	Facoltativa. Valore booleano che indica se è possibile creare un nuovo file se il file specificato in nomefile non esiste. Se viene creato un nuovo file, il valore sarà True, se non viene creato, sarà False. Il valore predefinito è False.
formato	Facoltativa. Uno dei tre valori Tristate utilizzati per indicare il formato del file aperto. Se viene omesso, il file verrà aperto in formato ASCII.
Impostazioni

Le possibili impostazioni di modoIO sono:

Costante	Valore	Descrizione
ForReading	1	Apre un file in sola lettura. Non è possibile scrivere nel file.
ForAppending	8	Apre un file e scrive alla fine del file.
Le possibili impostazioni di formato sono:

Costante	Valore	Descrizione
TristateUseDefault	–2	Apre il file utilizzando l'impostazione predefinita di sistema.
TristateTrue	–1	Apre il file in formato Unicode.
TristateFalse	0	Apre il file in formato ASCII.
Osservazioni

Nel seguente codice viene utilizzato il metodo OpenTextFile per aprire un file e aggiungere testo alla fine del file:

Sub OpenTextFileTest

    Const ForReading = 1, ForWriting = 2, ForAppending = 3

    Dim fs, f

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.OpenTextFile("c:\test.txt", ForAppending,TristateFalse)

    f.Write "Salve"

    f.Close

End Sub


Metodo Read

Descrizione

Legge il numero di caratteri specificato in un file TextStream e restituisce la stringa risultante.

Sintassi

oggetto.Read(caratteri)

La sintassi del metodo Read è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto TextStream.
caratteri	Obbligatoria. Numero di caratteri che si desidera leggere nel file.


Metodo ReadAll

Descrizione

Legge un intero file TextStream e restituisce la stringa risultante.

Sintassi

oggetto.ReadAll

L'argomento oggetto è sempre il nome di un oggetto TextStream.

Osservazioni

Se il metodo ReadAll viene applicato a file di grandi dimensioni, verrà utilizzata una notevole quantità di risorse di memoria. Per recuperare il contenuto di un file è pertanto consigliabile utilizzare altre tecniche, ad esempio la lettura del file riga per riga.


Metodo ReadLine

Descrizione

Legge un'intera riga, escluso il carattere di nuova riga, di un file TextStream e restituisce la stringa risultante.

Sintassi

oggetto.ReadLine

L'argomento oggetto è sempre il nome di un oggetto TextStream.


Metodo Remove

Descrizione

Rimuove una coppia chiave/voce da un oggetto Dictionary.

Sintassi

oggetto.Remove(chiave)

La sintassi del metodo Remove è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto Dictionary.
chiave	Obbligatoria. Chiave associata alla coppia chiave/voce che si desidera rimuovere dall'oggetto Dictionary.
Osservazioni

Se la coppia chiave/voce specificata non esiste, verrà generato un errore.

In questo esempio viene illustrato l'utilizzo del metodo Remove:

Dim a, d, i             'Crea delle variabili

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Atene"     'Aggiunge chiavi e voci

d.Add "b", "Belgrado"

d.Add "c", "Il Cairo"

...

a = d.Remove()          'Rimuove la seconda coppia


Metodo RemoveAll

Descrizione

Rimuove tutte le coppie chiave/voce da un oggetto Dictionary.

Sintassi

oggetto.RemoveAll

L'argomento oggetto è sempre il nome di un oggetto Dictionary.

Osservazioni

In questo esempio viene illustrato l'utilizzo del metodo RemoveAll:

Dim a, d, i             'Crea delle variabili

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Atene"     'Aggiunge chiavi e voci

d.Add "b", "Belgrado"

d.Add "c", "Il Cairo"

...

a = d.RemoveAll         'Cancella il dizionario


Metodo Skip

Descrizione

Ignora il numero specificato di caratteri durante la lettura di un file TextStream.

Sintassi

oggetto.Skip(caratteri)

La sintassi del metodo Skip è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto TextStream.
caratteri	Obbligatoria. Numero di caratteri da ignorare durante la lettura di un file.
Osservazioni

I caratteri ignorati vengono eliminati.


Metodo SkipLine

Descrizione

Ignora la riga successiva durante la lettura di un file TextStream.

Sintassi

oggetto.SkipLine

L'argomento oggetto è sempre il nome di un oggetto TextStream.

Osservazioni

Quando una riga viene ignorata, vengono letti ed eliminati tutti i caratteri di una riga, escluso il carattere di nuova riga successivo.

Se il file non è aperto per la lettura, verrà generato un errore.


Metodo Write

Descrizione

Scrive la stringa specificata in un file TextStream.

Sintassi

oggetto.Write(stringa)

La sintassi del metodo Write è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto TextStream.
stringa	Obbligatoria. Testo che si desidera scrivere nel file.
Osservazioni

Le stringhe specificate vengono scritte nel file senza spazi o altri caratteri di separazione. Per scrivere un carattere di nuova riga o una stringa che termina con un carattere di nuova riga, utilizzare il metodo WriteLine.


Metodo WriteBlankLines

Descrizione

Scrive il numero di caratteri di nuova riga specificato in un file TextStream.

Sintassi

oggetto.WriteBlankLines(righe)

La sintassi del metodo WriteBlankLines è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto TextStream.
righe	Obbligatoria. Numero di caratteri di nuova riga che si desidera scrivere nel file.


Metodo WriteLine

Descrizione

Scrive la stringa specificata e il carattere di nuova riga in un file TextStream.

Sintassi

oggetto.WriteLine([stringa])

La sintassi del metodo WriteLine è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto TextStream.
stringa	Facoltativa. Testo che si desidera scrivere nel file. Se omesso, viene scritto un carattere di nuova riga.


Oggetto Dictionary

Descrizione

Oggetto in cui sono memorizzate le coppie chiave/voce.

Sintassi

Scripting.Dictionary

Osservazioni

L'oggetto Dictionary è l'equivalente di una matrice associativa PERL. Le voci, che possono essere dati di qualsiasi tipo, vengono memorizzate nella matrice. A ciascuna voce è associata una chiave univoca che consente di recuperare una voce specifica. Tale voce è in genere un numero intero o una stringa, ma può essere qualsiasi tipo di dati, ad eccezione di una matrice.

Il codice seguente illustra come creare un oggetto Dictionary:

Dim d                   'Crea una variabile

Set d = CreateObject(Scripting.Dictionary)

d.Add "a", "Atene"     'Aggiunge alcune chiavi e voci

d.Add "b", "Belgrado"

d.Add "c", "Il Cairo"

...


Oggetto Drive

Descrizione

Consente di accedere alle proprietà di un determinato disco o di una determinata un'unità condivisa di rete.

Osservazioni

Nel seguente codice viene utilizzato l'oggetto Drive per accedere alle proprietà dell'unità:

Sub ShowFreeSpace(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Unità " & UCase(drvPath) & " - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "Spazio disponibile: " & FormatNumber(d.FreeSpace/1024, 0)

    s = s & " KB"

    MsgBox s

End Sub


Insieme Drives

Descrizione

Insieme in sola lettura di tutte le unità disponibili.

Osservazioni

Per visualizzare nell'insieme Drives le unità con supporto rimovibile non è necessario che il supporto sia inserito.

Nel seguente codice viene spiegato come visualizzare un insieme Drives ed eseguire un ciclo nell'insieme utilizzando l'istruzione For Each...Next:

Sub ShowDriveList

    Dim fs, d, dc, s, n

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set dc = fs.Drives

    For Each d in dc

        s = s & d.DriveLetter & " - "

        If d.DriveType = Remote Then

            n = d.ShareName

        Else

            n = d.VolumeName

        End If

        s = s & n & vbCrLf

    Next

    MsgBox s

End Sub


Oggetto File

Descrizione

Consente di accedere a tutte le proprietà di un file.

Osservazioni

Nel seguente codice viene spiegato come visualizzare un oggetto File insieme a una delle sue proprietà.

Sub ShowFileInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = f.DateCreated

    MsgBox s

End Sub


Insieme Files

Descrizione

Insieme di tutti gli oggetti File di una cartella.

Osservazioni

Nel seguente codice viene spiegato come visualizzare un insieme Folders ed eseguire un ciclo nell'insieme utilizzando l'istruzione For Each...Next:

Sub ShowFolderList(folderspec)

    Dim fs, f, f1, fc, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set fc = f.Files

    For Each f1 in fc

        s = s & f1.name

        s = s & vbCrLf

    Next

    MsgBox s

End Sub


Oggetto FileSystemObject

Descrizione

Consente di accedere al file system.

Sintassi

Scripting.FileSystemObject

Osservazioni

Il seguente codice descrive l'utilizzo dell'oggetto FileSystemObject per restituire un oggetto TextStream che è possibile leggere o sul quale è possibile scrivere:

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.CreateTextFile("c:\test.txt", True)

a.WriteLine("Questa è una prova.")

a.Close

Nel codice mostrato in precedenza, la funzione CreateObject restituisce FileSystemObject (fs). Il metodo CreateTextFile crea quindi il file come un oggetto TextStream (a) e il metodo WriteLine scrive una riga di testo nel file di testo creato. Il metodo Close scarica il buffer e chiude il file.


Oggetto Folder

Descrizione

Consente di accedere a tutte le proprietà di una cartella.

Osservazioni

Nel seguente codice viene spiegato come visualizzare un oggetto Folder insieme a una delle sue proprietà:

Sub ShowFolderInfo(folderspec)

    Dim fs, f, s,

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    s = f.DateCreated

    MsgBox s

End Sub


Insieme Folders

Descrizione

Insieme di tutti gli oggetti Folder contenuti in un oggetto Folder.

Osservazioni

Nel seguente codice viene spiegato come visualizzare un insieme Folders ed eseguire un ciclo nell'insieme utilizzando l'istruzione For Each...Next:

Sub ShowFolderList(folderspec)

    Dim fs, f, f1, fc, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set fc = f.SubFolders

    For Each f1 in fc

        s = s & f1.name

        s = s &  vbCrLf

    Next

    MsgBox s

End Sub


Oggetto TextStream

Descrizione

Agevola l'accesso sequenziale ai file.

Sintassi

TextStream.{proprietà | metodo}

Gli argomenti proprietà e metodo corrispondono a una delle proprietà e a uno dei metodi associati all'oggetto TextStream. L'oggetto TextStream viene in effetti sostituito da un segnaposto di variabile che rappresenta l'oggetto TextStream restituito dall'oggetto FileSystemObject.

Osservazioni

In questo esempio a è l'oggetto TextStream restituito dal metodo CreateTextFile eseguito sull'oggetto FileSystemObject:

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.CreateTextFile("c:\test.txt", True)

a.WriteLine("Questa è una prova.")

a.Close

WriteLine e Close sono due metodi dell'oggetto TextStream.


Operatore =

Descrizione

Viene utilizzato per assegnare un valore a una variabile o proprietà.

Sintassi

variabile = valore

La sintassi dell'operatore = è composta dalle seguenti parti:

Parte	Descrizione
variabile	Qualsiasi variabile o proprietà in scrittura.
valore	Qualsiasi letterale numerico o stringa, costante o espressione.
Osservazioni

Il nome a sinistra del segno uguale può essere una variabile scalare o l'elemento di una matrice. Le proprietà a sinistra del segno uguale possono essere solo proprietà che in fase di esecuzione sono in scrittura.


Proprietà AtEndOfLine

Descrizione

Proprietà di sola lettura che restituisce True se il puntatore del file si trova alla fine di un file TextStream, False in caso contrario.

Sintassi

object.AtEndOfLine

L'argomento oggetto è sempre il nome di un oggetto TextStream.

Osservazioni

La proprietà AtEndOfLine viene applicata solo ai file TextStream che vengono aperti per la lettura; con altri file, viene generato un errore.

Il codice seguente illustra l'utilizzo della proprietà AtEndOfLine:

Dim fs, a, retstring

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.OpenTextFile("c:\test.txt", ForReading, False)

Do While a.AtEndOfLine <> True

    retstring = a.Read(1)

    ...

Loop

a.Close


Proprietà AtEndOfStream

Descrizione

Proprietà di sola lettura che restituisce True se il puntatore del file si trova alla fine di un file TextStream, False in caso contrario.

Sintassi

oggetto.AtEndOfStream

L'argomento oggetto è sempre il nome di un oggetto TextStream.

Osservazioni

La proprietà AtEndOfStream viene applicata solo ai file TextStream aperti per la lettura; con altri file, viene generato un errore.

In questo esempio viene illustrato l'utilizzo della proprietà AtEndOfStream:

Dim fs, a, retstring

Set fs = CreateObject("Scripting.FileSystemObject")

Set a = fs.OpenTextFile("c:\test.txt", ForReading, False)

Do While a.AtEndOfStream <> True

    retstring = a.ReadLine

    ...

Loop

a.Close


Proprietà Attributes

Descrizione

Imposta o restituisce gli attributi di file o cartelle, che possono essere in lettura e scrittura o in sola lettura in base all'attributo.

Sintassi

oggetto.Attributes [= nuoviattributi]

La sintassi della proprietà Attributes è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto File o Folder.
nuoviattributi	Facoltativa. Se specificato, nuoviattributi corrisponde al nuovo valore degli attributi dell'oggetto specificato.
Impostazioni

L'argomento nuoviattributi può assumere uno dei seguenti valori o una combinazione logica dei seguenti valori:

Costante	Valore	Descrizione
Normal	0	File normale. Non viene impostato alcun attributo.
ReadOnly	1	File di sola lettura. L'attributo è di lettura/scrittura.
Hidden	2	File nascosto. L'attributo è di lettura/scrittura.
System	4	File di sistema. L'attributo è di lettura/scrittura.
Volume	8	Etichetta del volume dell'unità disco. L'attributo è di sola lettura.
Directory	16	Cartella o directory. L'attributo è di sola lettura.
Archive	32	Il file è stato modificato dall'ultimo backup. L'attributo è di lettura/scrittura.
Alias	64	Collegamento o scelta rapida. L'attributo è di sola lettura.
Compressed	128	File compresso. L'attributo è di sola lettura.
Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà Attributes con un file:

Sub SetClearArchiveBit(filespec)

    Dim fs, f, r

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(fs.GetFileName(filespec))

    If f.attributes and 32 Then

        r = MsgBox("Il bit di archivio è stato impostato, Cancellarlo?", vbYesNo, "Imposta/cancella bit di archivio")

        If r = vbYes Then

            f.attributes = f.attributes - 32

            MsgBox "Archivio cancellato."

        Else

            MsgBox "L'archivio rimane impostato."

        End If

    Else

        r = MsgBox("Il bit di archivio non è impostato. Impostarlo?", vbYesNo, "Imposta/cancella bit di archivio")

        If r = vbYes Then

            f.attributes = f.attributes + 32

            MsgBox "Bit di archivio impostato."

        Else

            MsgBox "Il bit di archivio rimane cancellato."

        End If

    End If

End Sub


Proprietà AvailableSpace

Descrizione

Restituisce la quantità di spazio disponibile sull'unità o sull'unità condivisa di rete specificata.

Sintassi

oggetto.AvailableSpace

L'argomento oggetto corrisponde sempre a un oggetto Drive.

Osservazioni

Il valore restituito dalla proprietà AvailableSpace corrisponde al valore restituito dalla proprietà FreeSpace. Si possono verificare differenze tra le due proprietà in sistemi che supportano i limiti.

Nel seguente codice viene spiegato come utilizzare la proprietà AvailableSpace:

Sub ShowAvailableSpace(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Unità " & UCase(drvPath) & " - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "Spazio disponibile: " & FormatNumber(d.AvailableSpace/1024, 0)

    s = s & " KB"

    MsgBox s

End Sub


Proprietà Column

Descrizione

Proprietà di sola lettura che restituisce il numero di colonna della posizione del carattere corrente in un file TextStream.

Sintassi

oggetto.Column

L'argomento oggetto è sempre il nome di un oggetto TextStream.

Osservazioni

Dopo la scrittura di un carattere di nuova riga, ma prima della scrittura di altri caratteri, la proprietà Column è uguale a 1.


Proprietà CompareMode

Descrizione

Imposta e restituisce la modalità di confronto per le chiavi di confronto di stringhe incluse in un oggetto Dictionary.

Sintassi

oggetto.CompareMode[ = confronto]

La sintassi della proprietà CompareMode è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. Nome di un oggetto Dictionary.
confronto	Facoltativa. Se specificato, l'argomento confronto è un valore che rappresenta la modalità di confronto utilizzata da funzioni quali StrComp.
Impostazioni

Le possibili impostazioni dell'argomento confronto sono:

Costante	Valore	Descrizione
vbUseCompareOption	–1	Esegue un confronto utilizzando l'impostazione dell'istruzione Option Compare.
vbBinaryCompare	0	Esegue un confronto binario.
vbTextCompare	1	Esegue un confronto di testo.
vbDatabaseCompare	2	Solo per Microsoft Access. Esegue un confronto in base alle informazioni del database.
Osservazioni

Se si modifica la modalità di confronto di un oggetto Dictionary che include già dati, verrà generato un errore.

I valori utilizzati per la proprietà CompareMode sono gli stessi dell'argomento confronto nella funzione StrComp. È possibile utilizzare valori maggiori di 2 per fare riferimento a confronti eseguiti con identificativi di impostazioni internazionali specifici (LCID, Locale ID).


Proprietà Count

Descrizione

Restituisce il numero di oggetti in un insieme o in un oggetto Dictionary. Sola lettura.

Sintassi

oggetto.Count

L'argomento oggetto corrisponde sempre al nome di un oggetto dell'elenco Si applica a.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà Count:

Dim a, d, i             'Crea alcune variabili

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Atene"     'Aggiunge chiavi e oggetti.

d.Add "b", "Belgrado"

d.Add "c", "Il Cairo"

a = d.Keys              'Visualizza le chiavi

For i = 0 To d.Count -1 'Esegue un ciclo nella matrice

    Print a(i)          'Stampa la chiave

Next

...


DateCreated Property
Proprietà DateCreated

Descrizione

Restituisce la data e l'ora di creazione del file o della cartella specificata. Sola lettura.

Sintassi

oggetto.DateCreated

L'argomento oggetto corrisponde sempre a un oggetto File o Folder.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà DateCreated con un file:

Sub ShowFileInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = "Creazione: " & f.DateCreated

    MsgBox s

End Sub


Proprietà DateLastAccessed

Descrizione

Restituisce la data e l'ora di accesso al file o alla cartella specificata. Sola lettura.

Sintassi

oggetto.DateLastAccessed

L'argomento oggetto corrisponde sempre a un oggetto File o Folder.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà DateLastAccessed con un file:

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(filespec) & vbCrLf

    s = s & "Creazione: " & f.DateCreated & vbCrLf

    s = s & "Ultimo accesso: " & f.DateLastAccessed & vbCrLf

    s = s & "Ultima modifica: " & f.DateLastModified

    MsgBox s, 0, "Informazioni sull'accesso al file"

End Sub

Importante   Il funzionamento di questo metodo dipende dal sistema operativo utilizzato. Se il sistema operativo non consente di fornire le informazioni relative alla data, non verrà restituito alcun dato.


Proprietà DateLastModified

Descrizione

Restituisce la data e l'ora dell'ultima modifica apportata al file o alla cartella specificata. Sola lettura.

Sintassi

oggetto.DateLastModified

L'argomento oggetto corrisponde sempre a un oggetto File o Folder.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà DateLastModified con un file:

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(filespec) & vbCrLf

    s = s & "Creazione: " & f.DateCreated & vbCrLf

    s = s & "Ultimo accesso: " & f.DateLastAccessed & vbCrLf

    s = s & "Ultima modifica: " & f.DateLastModified

    MsgBox s, 0, "Informazioni sull'accesso al file"

End Sub


Proprietà Drive

Descrizione

Restituisce la lettera dell'unità in cui si trova il file o la cartella specificata. Sola lettura.

Sintassi

oggetto.Drive

L'argomento oggetto corrisponde sempre a un oggetto File o Folder.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà Drive:

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = f.Name & " nell'unità " & UCase(f.Drive) & vbCrLf

    s = s & "Creazione: " & f.DateCreated & vbCrLf

    s = s & "Ultimo accesso: " & f.DateLastAccessed & vbCrLf

    s = s & "Ultima modifica: " & f.DateLastModified

    MsgBox s, 0, "Informazioni sull'accesso al file"

End Sub


Proprietà DriveLetter

Descrizione

Restituisce la lettera di un'unità locale fisica o di un'unità condivisa di rete. Sola lettura.

Sintassi

oggetto.DriveLetter

L'argomento oggetto corrisponde sempre a un oggetto Drive.

Osservazioni

La proprietà DriveLetter restituisce una stringa di lunghezza zero ("") se l'unità specificata non è associata a una lettera di unità, ad esempio, un'unità condivisa di rete che non corrisponde a una lettera di unità.

Nel seguente codice viene spiegato come utilizzare la proprietà DriveLetter:

Sub ShowDriveLetter(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Unità " & d.DriveLetter & ": - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "Spazio disponibile: " & FormatNumber(d.FreeSpace/1024, 0)

    s = s & " KB"

    MsgBox s

End Sub


Proprietà Drives

Descrizione

Restituisce un insieme Drives contenente tutti gli oggetti Drive disponibili sul computer locale.

Sintassi

oggetto.Drives

L'argomento oggetto corrisponde sempre a un oggetto FileSystemObject.

Osservazioni

Per visualizzare le unità con supporto rimovibile nell'insieme Drives, non è necessario che il supporto sia inserito.

È possibile eseguire un'iterazione tra gli elementi dell'insieme Drives utilizzando un blocco For Each...Next come descritto nel seguente codice:

Sub ShowDriveList

    Dim fs, d, dc, s, n

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set dc = fs.Drives

    For Each d in dc

        s = s & d.DriveLetter & " - "

        If d.DriveType = 3 Then

            n = d.ShareName

        Else

            n = d.VolumeName

        End If

        s = s & n & vbCrLf

    Next

    MsgBox s

End Sub


Proprietà DriveType

Descrizione

Restituisce un valore che indica il tipo di unità specificata.

Sintassi

oggetto.DriveType

L'argomento oggetto corrisponde sempre a un oggetto Drive.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà DriveType:

Sub ShowDriveType(drvpath)

    Dim fs, d, s, t

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(drvpath)

    Select Case d.DriveType

        Case 0: t = "Sconosciuta"

        Case 1: t = "Rimovibile"

        Case 2: t = "Fissa"

        Case 3: t = "Rete"

        Case 4: t = "CD-ROM"

        Case 5: t = "Disco RAM"

    End Select

    s = "Unità " & d.DriveLetter & ": - " & t

    MsgBox s

End Sub


Proprietà Files

Descrizione

Restituisce un insieme Files composto da tutti gli oggetti File contenuti nella cartella specificata, compresi i file nascosti e di sistema.

Sintassi

oggetto.Files

L'argomento oggetto corrisponde sempre a un oggetto Folder.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà Files:

Sub ShowFileList(folderspec)

    Dim fs, f, f1, fc, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set fc = f.Files

    For Each f1 in fc

        s = s & f1.name

        s = s &  vbCrLf

    Next

    MsgBox s

End Sub


Proprietà FileSystem

Descrizione

Restituisce il tipo di file system utilizzato dall'unità specificata.

Sintassi

oggetto.FileSystem

L'argomento oggetto corrisponde sempre a un oggetto Drive.

Osservazioni

I tipi restituiti disponibili sono FAT, NTFS e CDFS.

Nel seguente codice viene spiegato come utilizzare la proprietà FileSystem:

Sub ShowFileSystemType

    Dim fs,d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive("e:")

    s = d.FileSystem

    MsgBox s

End Sub


Proprietà FreeSpace

Descrizione

Restituisce la quantità di spazio disponibile sull'unità o sull'unità condivisa di rete specificata. Sola lettura.

Sintassi

oggetto.FreeSpace

L'argomento oggetto corrisponde sempre a un oggetto Drive.

Osservazioni

Il valore restituito dalla proprietà FreeSpace corrisponde al valore restituito dalla proprietà AvailableSpace. Si possono verificare differenze tra le due proprietà in sistemi che supportano i limiti.

Nel seguente codice viene spiegato come utilizzare la proprietà FreeSpace:

Sub ShowFreeSpace(drvPath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(drvPath))

    s = "Unità " & UCase(drvPath) & " - "

    s = s & d.VolumeName  & vbCrLf

    s = s & "Spazio disponibile: " & FormatNumber(d.FreeSpace/1024, 0)

    s = s & " KB"

    MsgBox s

End Sub


Proprietà IsReady

Descrizione

Restituisce True se l'unità specificata è pronta; False in caso contrario.

Sintassi

oggetto.IsReady

L'argomento oggetto corrisponde sempre a un oggetto Drive.

Osservazioni

Nel caso di unità con supporto rimovibile e unità CD-ROM, IsReady restituisce True solo quando il supporto appropriato è inserito e pronto per l'accesso.

Nel seguente codice viene spiegato come utilizzare la proprietà IsReady:

Sub ShowDriveInfo(drvpath)

    Dim fs, d, s, t

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(drvpath)

    Select Case d.DriveType

        Case 0: t = "Sconosciuta"

        Case 1: t = "Rimovibile"

        Case 2: t = "Fissa"

        Case 3: t = "Rete"

        Case 4: t = "CD-ROM"

        Case 5: t = "Disco RAM"

    End Select

    s = "Drive " & d.DriveLetter & ": - " & t

    If d.IsReady Then

        s = s & vbCrLf & "Unità pronta."

    Else

        s = s & vbCrLf & "Unità non pronta."

    End If

    MsgBox s

End Sub


Proprietà IsRootFolder

Descrizione

Restituisce True se la cartella specificata è la cartella principale; False in caso contrario.

Sintassi

oggetto.IsRootFolder

L'argomento oggetto corrisponde sempre a un oggetto Folder.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà IsRootFolder:

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

Sub DisplayLevelDepth(pathspec)

    Dim f, n

    Set f = fs.GetFolder(pathspec)

    If f.IsRootFolder Then

        MsgBox "La cartella specificata è la cartella principale."

    Else

        Do Until f.IsRootFolder

            Set f = f.ParentFolder

            n = n + 1

        Loop

        MsgBox "La cartella specificata è nidificata di " & n & " livelli."

    End If

End Sub


Proprietà Item

Descrizione

Imposta o restituisce la voce associata alla chiave specificata inclusa in un oggetto Dictionary. Nel caso di insiemi, restituisce una voce basata sulla chiave specificata. Lettura/scrittura.

Sintassi

oggetto.Item(chiave) [= nuovavoce]

La sintassi della proprietà Item è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un insieme di oggetti o di un oggetto Dictionary.
chiave	Obbligatoria. Chiave associata alla voce che viene recuperata o aggiunta.
nuovavoce	Facoltativa. Utilizzata soltato per l'oggetto Dictionary, non per gli insiemi. Se specificato, l'argomento nuovavoce è il nuovo valore associato alla chiave specificata.
Osservazioni

Se quando si sostituisce una voce la chiave non viene trovata, verrà creata una nuova chiave con il valore di nuovavoce specificato. Se quando si cerca di restituire una voce esistente la chiave non viene trovata, verrà creata una nuova chiave lasciando vuota la corrispondente voce.


Proprietà Key

Descrizione

Imposta una chiave inclusa in un oggetto Dictionary.

Sintassi

oggetto.Key(chiave) = nuovachiave

La sintassi della proprietà Key è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto Dictionary.
chiave	Obbligatoria. Valore chiave da modificare.
nuovachiave	Obbligatoria. Nuovo valore con cui sostituire la chiave specificata.
Osservazioni

Se la chiave da sostituire non viene trovata, si verifica un errore di run-time.


Proprietà Line

Descrizione

Proprietà di sola lettura che restituisce il numero di riga corrente in un file TextStream.

Sintassi

oggetto.Line

L'argomento oggetto corrisponde sempre al nome di un oggetto TextStream.

Osservazioni

Dopo aver aperto un file e prima di eseguire operazioni di scrittura, la proprietà Line è uguale a 1.


Proprietà Name

Descrizione

Imposta o restituisce il nome di un file o di una cartella specificata. Lettura/scrittura.

Sintassi

oggetto.Name [= nuovonome]

La sintassi della proprietà Name è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto File o Folder.
nuovonome	Facoltativa. Se fornita, la parte nuovonome corrisponde al nuovo nome dell'oggetto specificato.
Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà Name:

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = f.Name & " nell'unità " & UCase(f.Drive) & vbCrLf

    s = s & "Creazione: " & f.DateCreated & vbCrLf

    s = s & "Ultimo accesso: " & f.DateLastAccessed & vbCrLf

    s = s & "Ultima modifica: " & f.DateLastModified

    MsgBox s, 0, "Informazioni sull'accesso al file"

End Sub


Proprietà ParentFolder

Descrizione

Restituisce l'oggetto Folder del file o della cartella principale specificata. Sola lettura.

Sintassi

oggetto.ParentFolder

L'argomento oggetto corrisponde sempre a un oggetto File o Folder.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà ParentFolder con un file:

Sub ShowFileAccessInfo(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(f.Name) & " in " & UCase(f.ParentFolder) & vbCrLf

    s = s & "Creazione: " & f.DateCreated & vbCrLf

    s = s & "Ultimo accesso: " & f.DateLastAccessed & vbCrLf

    s = s & "Ultima modifica: " & f.DateLastModified

    MsgBox s, 0, "Informazioni sull'accesso al file"

End Sub


Proprietà Path

Descrizione

Restituisce il percorso del file, della cartella o dell'unità specificati.

Sintassi

oggetto.Path

L'argomento oggetto corrisponde sempre a un oggetto File, Folder o Drive.

Osservazioni

Nel caso di lettere di unità, l'unità principale non viene inclusa. Il percorso dell'unità C è, ad esempio, C: e non C:\.

Nel seguente codice viene spiegato come utilizzare la proprietà Path con un oggetto File:

Sub ShowFileAccessInfo(filespec)

    Dim fs, d, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = UCase(f.Path) & vbCrLf

    s = s & "Creazione: " & f.DateCreated & vbCrLf

    s = s & "Ultimo accesso: " & f.DateLastAccessed & vbCrLf

    s = s & "Ultima modifica: " & f.DateLastModified

    MsgBox s, 0, "Informazioni sull'accesso al file"

End Sub


Proprietà RootFolder

Descrizione

Restituisce un oggetto Folder che rappresenta la cartella principale dell'unità specificata. Sola lettura.

Sintassi

oggetto.RootFolder

L'argomento oggetto corrisponde sempre a un oggetto Drive.

Osservazioni

All the files and folders contained on the drive can be accessed using the returned Folder object.


Proprietà SerialNumber

Descrizione

Restituisce il numero di serie decimale utilizzato per identificare in modo univoco un volume.

Sintassi

oggetto.SerialNumber

L'argomento oggetto corrisponde sempre a un oggetto Drive.

Osservazioni

È possibile utilizzare la proprietà SerialNumber per assicurarsi di avere inserito il disco corretto in un'unità con supporto rimovibile.

Nel seguente codice viene spiegato come utilizzare la proprietà SerialNumber:

Sub ShowDriveInfo(drvpath)

    Dim fs, d, s, t

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    Select Case d.DriveType

        Case 0: t = "Sconosciuta"

        Case 1: t = "Rimovibile"

        Case 2: t = "Fissa"

        Case 3: t = "Rete"

        Case 4: t = "CD-ROM"

        Case 5: t = "Disco RAM"

    End Select

    s = "Unità " & d.DriveLetter & ": - " & t

    s = s & vbCrLf & "NS: " & d.SerialNumber

    MsgBox s

End Sub


Proprietà ShareName

Descrizione

Restituisce il nome di condivisione dell'unità specificata.

Sintassi

oggetto.ShareName

L'argomento oggetto corrisponde sempre a un oggetto Drive.

Osservazioni

Se oggetto non corrisponde a un'unità di rete, la proprietà ShareName restituirà una stringa di lunghezza zero ("").

Nel seguente codice viene spiegato come utilizzare la proprietà ShareName:

Sub ShowDriveInfo(drvpath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    s = "Unità " & d.DriveLetter & ": - " & d.ShareName

    MsgBox s

End Sub


Proprietà ShortName

Descrizione

Restituisce il nome abbreviato utilizzato dai programmi che richiedono la convenzione di denominazione 8.3 precedente.

Sintassi

oggetto.ShortName

L'argomento oggetto corrisponde sempre a un oggetto File o Folder.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà ShortName con un oggetto File:

Sub ShowShortName(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = "Il nome abbreviato di " & "" & UCase(f.Name)

    s = s & "" & vbCrLf

    s = s & "è: " & "" & f.ShortName & ""

    MsgBox s, 0, "Informazioni sul nome abbreviato"

End Sub


Proprietà ShortPath

Descrizione

Restituisce il percorso breve utilizzato dai programmi che richiedono la convenzione di denominazione 8.3 precedente.

Sintassi

oggetto.ShortPath

L'argomento oggetto corrisponde sempre a un oggetto File o Folder.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà ShortName con un oggetto File:

Sub ShowShortPath(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFile(filespec)

    s = "Il percorso breve di " & "" & UCase(f.Name)

    s = s & "" & vbCrLf

    s = s & "è: " & "" & f.ShortPath & ""

    MsgBox s, 0, "Informazioni sul percorso breve"

End Sub


Proprietà Size

Descrizione

Nel caso di file, resituisce la dimensione in byte del file specificato. Nel caso di cartelle, restituisce la dimensione in byte di tutti i file e di tutte le sottocartelle contenute nella cartella.

Sintassi

oggetto.Size

L'argomento oggetto corrisponde sempre a un oggetto File o Folder.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà Size con un oggetto Folder:

Sub ShowFolderSize(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(filespec)

    s = UCase(f.Name) & " utilizza " & f.size & " byte."

    MsgBox s, 0, "Informazioni sulle dimensioni della cartella"

End Sub


Proprietà SubFolders

Descrizione

Restituisce un insieme Folders composto da tutte le cartelle contenute in una cartella specificata, comprese quelle contenenti file nascosti e di sistema.

Sintassi

oggetto.SubFolders

L'argomento oggetto corrisponde sempre a un oggetto Folder.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà SubFolders:

Sub ShowFolderList(folderspec)

    Dim fs, f, f1, s, sf

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(folderspec)

    Set sf = f.SubFolders

    For Each f1 in sf

        s = s & f1.name

        s = s &  vbCrLf

    Next

    MsgBox s

End Sub


Proprietà TotalSize

Descrizione

Restituisce lo spazio totale in byte di un'unità o di una risorsa condivisa.

Sintassi

oggetto.TotalSize

L'argomento oggetto corrisponde sempre a un oggetto Drive.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà TotalSize:

Sub ShowSpaceInfo(drvpath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    s = "Unità " & d.DriveLetter & ":"

    s = s & vbCrLf

    s = s & "Dimensione totale: " & FormatNumber(d.TotalSize/1024, 0) & " KB"

    s = s & vbCrLf

    s = s & "Spazio disponibile: " & FormatNumber(d.AvailableSpace/1024, 0) & " KB"

    MsgBox s

End Sub


Proprietà Type

Descrizione

Restituisce le informazioni sul tipo di file o di cartella. Nel caso di file con estensione TXT, ad esempio, viene restituito "Documento di testo".

Sintassi

oggetto.Type

L'argomento oggetto corrisponde sempre a un oggetto File o Folder.

Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà Type per restituire il tipo di cartella. In questo esempio, provare a fornire alla routine il percorso del Cestino o di un'altra cartella univoca.

Sub ShowFileSize(filespec)

    Dim fs, f, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set f = fs.GetFolder(filespec)

    s = UCase(f.Name) & " è di tipo " & f.Type

    MsgBox s, 0, "Informazioni sulle dimensioni del file"

End Sub


Proprietà VolumeName

Descrizione

Imposta o restituisce il volume dell'unità specificata. Lettura/scrittura.

Sintassi

oggetto.VolumeName [= nuovonome]

La sintassi della proprietà VolumeName è composta dalle seguenti parti:

Parte	Descrizione
oggetto	Obbligatoria. È sempre il nome di un oggetto Drive.
nuovonome	Facoltativa. Se fornita, la parte nuovonome corrisponde al nuovo nome dell'oggetto specificato.
Osservazioni

Nel seguente codice viene spiegato come utilizzare la proprietà VolumeName:

Sub ShowVolumeInfo(drvpath)

    Dim fs, d, s

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

    s = "Unità " & d.DriveLetter & ": - " & d.VolumeName

    MsgBox s

End Sub


Selezione non univoca

Non è stata selezionata alcuna parola chiave oppure sono state richieste le informazioni dell'Aiuto per un componente dell'ambiente di sviluppo integrato (IDE). Nel primo caso, provare a selezionare di nuovo la parola chiave. Nel secondo caso, fare clic su uno dei seguenti argomenti:

Finestra del codice o del modulo

Finestra o riquadro Immediata

Finestra o riquadro Variabili locali

Visualizzatore oggetti

Finestra o riquadro Espressioni di controllo