L'istruzione WITH.        (02/06/03)

Nella compilazione di codice VB sappiamo che possiamo usare "oggetti" per impartire istruzioni su come gestirli. Sono "oggetti" le celle del foglio di lavoro, gli stessi fogli di lavoro, i commandbutton, le userform, le caselle di testo, le label (etichette), Excel stesso visto come "Application", ecc. ecc.

Gli "oggetti" possiedono delle "proprietà" che è possibile modificare nelle "impostazioni" relative ad ogni "proprietà". All'oggetto "Range" per esempio, è possibile assegnare un colore di fondo (oggetto : Interior e proprietà : ColorIndex), è possibile impostare un carattere specifico (oggetto : Font è proprietà : Name), è possibile impostare il carattere grassetto (oggetto : Font e proprietà : Bold), è possibile impostare i bordi (oggetto : Border), ecc. ecc. (attenzione: alcuni dei nomi citati possono essere sia "oggetti" che "proprietà", ma non è in questo articolo che dobbiamo valutare le differenze). Facciamo un esempio impostando delle istruzioni in codice su una cella, la A1:

Range("A1").Interior.ColorIndex = 6   'imposta in giallo il colore di fondo della cella

Range("A1").Font.Name = "Courier"  'imposta il carattere come Courier

Range("A1").Font.Bold = True   'imposta il grassetto al carattere

Range("A1").Font.Size= 12    'imposta la dimensione del carattere

ecc.ecc.

Come si vede, ripetiamo ad ogni riga su quale "oggetto" (Range("A1")) applicare le relative impostazioni. Esiste un modo per riferirsi una sola volta "all'oggetto" , risparmiando codice scritto e velocizzando l'esecuzione stessa delle istruzioni, usando l'istruzione WITH (con).

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à. La sintassi dell'istruzione è:

With "oggetto"   'inizio istruzione

.istruzione  (IMPORTANTE: ogni riga di istruzione deve iniziare con il punto ( . ), è il punto che indica al codice che l'istruzione è' relativa all'oggetto identificato con With)

End With    'fine istruzione; necessario scriverla


per cui il nostro esempio sopra diventerà:

With Range("A1")
.Interior.ColorIndex = 6  
.Font.Name = "Courier"
.Font.Bold = True
.Font.Size= 12
End With

Se ci dimentichiamo il punto ad inizio di ogni istruzione relativa al Range, il debugger si scatena e ci segnala subito l'errore: "Necessario oggetto" in quanto senza il punto il codice non sa a chi assegnare l'istruzione.
Nell'esempio sopra, vediamo che è possibile "mescolare" istruzioni (colore cella e impostazioni sul carattere) in quanto ci riferiamo all'oggetto Range, usando come istruzioni altri "oggetti" facenti parte dell'oggetto Range, (Interior, Font) ai quali assegniamo delle proprietà (ColorIndex, Name, Bold, Size).

Diverso sarebbe se al posto di usare istruzioni con "oggetti" e loro proprietà, avessimo voluto usare direttamente le sole proprietà. In questo caso avremmo avuto bisogno di definire su quale oggetto usare le proprietà, e visto che Name, Bold e Size NON sono proprietà dell oggetto Range ma dell'oggetto Font, dovremo modificare così la nostra istruzione:

With Range("A1").Font
.Name = "Courier"
.Bold = True
.Size = 12
End With

In questo caso le proprietà Name, Bold e Size usate da sole (col punto) vengono accettate perchè riferite all'oggetto Font dichiarato con With.

E l'oggetto Interior con la sua proprietà ColorIndex ? In questo caso non può essere usato perchè non rappresenta nè un oggetto nè una proprietà dell'oggetto Font, andrà impostata un'altra istruzione.

 

Buon lavoro.


prelevato sul sito http://ennius.interfree.it