Guide e Tutorials:indexed | ||||||||||||||||||||||||
Lavorare con
gli oggetti Excel (quinta parte) Come già visto nelle lezioni precedenti, i requisiti fondamentali per poter interagire con gli oggetti di Excel sono due: avere installato una copia di Microsoft Excel ed aver precedentemente caricato la libreria oggetti di Excel disponibile nella finestra di dialogo Riferimenti. Per una maggiore comprensione, la finestra si apre cliccando sulla voce Progetto del menu principale e selezionando dal menu Progetto che si aprirà, la voce Riferimenti che è quella accompagnata dall'icona dei libri. Basterà poi selezionare la voce Microsoft Excel Object Library per poter utilizzare tutti gli oggetti di cui la libreria in questione si compone. In questo quinto articolo si andrà ad analizzare la proprietà RangeSelection come area selezionata dall'utente. Come si vedrà in seguito esiste una differenza sostanziale tra la gestione di un Range, controllato dallo sviluppatore e di un RangeSelection le cui dimensioni e posizione sono invece affidate alle scelte dell'utente. Prima di iniziare con tale argomento, essendo stati già chiariti i fondamenti del concetto di cella e di Range è possibile semplificare ulteriormente le cose utilizzando il metodo utilizzato da Excel per l'individuazione delle celle. Si può infatti indicare una cella indicandone le coordinate in base all'intestazione di riga e di colonna. Così la cella che finora chiamavamo (3,3) per indicare la cella nella terza riga e nella terza colonna può essere indicata come "C3". C infatti corrisponde all'intestazione della terza colonna e 3 all'intestazione della terza riga. Proprio come si vede dall'immagine che segue: Quindi, riportando quanto appena visto al concetto di Range è possibile semplificarne la definizione indicando anche qui per ogni cella l'intestazione di riga e di colonna. Ad esempio se volessimo selezionare l'area (1,1) - (4,3) invece della scrittura finora utilizzata ossia:
potremmo utilizzare come indicatori di cella rispettivamente "A1" e "D3" nel modo che segue:
rendendo così molto più agevole la scrittura e la comprensione del codice. Terminata questa parentesi vediamo adesso come recuperare le informazioni relative ad un'area di selezione, introducendo in questo modo il concetto di RangeSelection. Se volessimo infatti visualizzare in una finestra di messaggio la formula che indica il Range selezionato, dovremo fare riferimento alla proprietà ActiveWindow dell'oggetto Application. ActiveWindow ha la funzione di spostare l'attenzione sulla finestra attiva dell'applicazione Excel, nel caso ne siano state aperte più di una. Nel caso in cui nessuna finestra dell'applicazione sia aperta, la proprietà ritornerà il valore Nothing. Un sistema per evitare errori di questo tipo consiste nel verificare immediatamente che almeno una finestra sia aperta. Ecco come fare:
Insieme a tale proprietà dovremo fare uso anche della RangeSelection che restituisce un oggetto Range rappresentante le celle selezionate nel foglio di lavoro nella finestra specificata (nel nostro caso la finestra attiva). Una volta compreso il significato di tali proprietà aggiungiamo che per raggiungere il risultato prefissato, si dovrà utilizzare anche la proprietà Address della quale per adesso non faremo un'analisi dettagliata in quanto non ancora necessaria. Unendo le tre proprietà possiamo quindi recuperare la formula che individua il Range attraverso il codice qui sotto:
Un esempio di formula visualizzato dalla finestra di messaggio potrebbe essere il seguente: In questo caso è stato impostato prima un Range di celle "A1","D3" come mostrato dal codice riportato sotto:
Naturalmente nel caso in cui non sia stato selezionato espressamente un Range, il risultato mostrato dalla finestra di messaggio corrisponde alla formula di selezione di una sola cella, o la "A1" per impostazione predefinita (formula $A$1), oppure quella selezionata dall'utente. Le proprietà appena viste ed il codice analizzato sopra hanno uno scopo ben specifico. Indicando un Range da codice si suppone che chi sviluppa l'applicazione conosca quali celle andrà a selezionare l'utente, cosa pressochè impossibile. Attraverso la proprietà RangeSelection che per semplificarne il concetto si può considerare come un vero e proprio oggetto indipendente ossia l'oggetto "area selezionata dall'utente" a differenza di Range che può essere considerato più come l'oggetto "area selezionata dallo sviluppatore", si può appunto lavorare con le celle via via selezionate dall'utente dell'applicazione. Così risulta semplice applicare i concetti visti negli articoli precedenti a tale area di selezione: prendiamo il caso del metodo Taglia. Ecco come si adatta a RangeSelection:
Lo stesso vale per il metodo Copy:
e per Incolla Speciale, di cui per comodità si riporta sotto la sintassi completa:
Se però dal punto di vista della sintassi i tre metodi appena visti a Range e RangeSelection non sono granchè dissimili, per l'organizzazione del codice le cose sono molto diverse. Negli esempi fatti negli articoli precedenti (e negli esercizi finora proposti) non ha senso sostituire semplicemente il codice relativo a RangeSelection al codice relativo a Range perchè in questo modo non si lascerebbe all'utente la possibilità di eseguire la selezione. Il metodo migliore per ovviare al problema è quello far eseguire all'utente la selezione ed applicare poi i metodi Taglia, Copia ed Incolla Speciale nel momento desiderato dall'utente. Tutto ciò può essere realizzato con l'inserimento nel progetto di un semplice pulsante. E questo è proprio il testo dell'esercizio proposto al termine dell'articolo.
|