L'oggetto
Area e l'insieme Areas |
Fa
parte dell'oggetto Range, ossia di un gruppo di celle prese
secondo una logica qualsiasi, anche l'oggetto Area. Per questo
motivo quando ci si riferisce a tale oggetto e lo si richiama,
verrà restituito sempre un Range.
La definizione di Area non è particolarmente intuitiva
se non se ne illustra la funzione mediante un esempio: s'immagini
quindi di avere un foglio di calcolo, anche senza alcun valore
inserito nelle celle.
Selezionando un gruppo di celle si otterrà un Range,
come già visto in precedenza. Nulla vieta però
di considerare non soltanto una serie di celle contigue, ma
più gruppi separati selezionabili contemporaneamente
mantenendo premuto il tasto Ctrl nel momento della selezione.
L'unione di questi due gruppi forma un solo oggetto Range,
ma ognuno di essi si può individuare come singolo oggetto
Area.
La figura sottostante mostra l'esempio di due Areas che costituiscono
un oggetto Range:
A
questo punto, per verificare l'effettiva presenza di due aree,
si può prevedere nel progetto una finestra di messaggio
che alla pressione di un pulsante mostri il numero di oggetti
Area presenti sul foglio di calcolo:
Private
Sub
Command1_Click()
MsgBox appExcel.Selection.Areas.Count
End Sub |
Notare
che Areas è stato legato all'oggetto Selection e non
esplicitamente a Range. Questo per il semplice motivo che
anche Selection costituisce un Range essendo il gruppo di
celle (contigue o separate) selezionato dall'utente.
Inoltre si sarà notato che anche in questo caso il
conto delle Aree presenti in un Range di selezione viene effettuata
attraverso la proprietà Count.
Essendo ogni Area indipendente, se la si considera al di fuori
dell'oggetto Range a cui appartiene, è possibile individuarla
in modo univoco attraverso un indice, assegnatole in modo
automatico al momento della creazione.
Riprendendo quindi la figura vista sopra, il gruppo di celle
A1-B4 sarà individuato dall'indice 1 mentre il gruppo
E1-E6 dall'indice 2, secondo una numerazione crescente che
parte dal valore 1.
La possibilità di individuare ciascuna Area come oggetto
a sé stante rappresenta un enorme vantaggio in quanto
consente di considerare ogni Area come un singolo oggetto
Range.
Se ne possono applicare pertanto i metodi e le proprietà
legate a tale oggetto.
Ad esempio, si consideri una selezione formata da tre aree
non contigue tra loro come in figura:
Di
ognuna di queste aree si vuole determinare il numero di celle
di cui si compone, alla pressione di un pulsante CommandButton.
Per sviluppare questo progetto sarà necessario innanzitutto
eseguire l'operazione per tutti gli oggetti Area presenti
sul foglio di calcolo. A tale scopo si utilizzerà allora
la proprietà Count citata poc'anzi:
Private
Sub Command1_Click()
For i = 1 To
appExcel.Selection.Areas.Count
'
'
'
Next i
End Sub |
Il
principio col quale scrivere la linea di codice che manca
al blocco qui sopra è molto semplice: si sfrutterà
la proprietà Count di Cells che fa riferimento al numero
di celle presenti in un Range. E siccome un'Area costituisce
proprio un Range, non si verificheranno problemi di proprietà
non supportate dall'oggetto.
La linea da inserire al posto dei commenti è la seguente:
MsgBox
appExcel.Selection.Areas.Item(i).Cells.Count |
In
modo analogo, aumentando il numero delle operazioni da eseguire
sulla selezione, è possibile determinare per ciascuna
area il valore di ciascuna cella.
In questo caso però, oltre al ciclo che va a coprire
tutte le aree esistenti, deve esserne previsto un secondo
che vada a coprire tutte le celle all'interno di ogni Area.
Il codice mostrato di seguito esegue tale operazione:
For
i = 1 To appExcel.Selection.Areas.Count
For ii = 1 To
appExcel.Selection.Areas.Item(i).Cells.Count
MsgBox appExcel.Selection.Areas.Item(i).Cells(ii).Value
Next ii
Next i |
|