Il blog di Gianni Giaccaglini

Blog su VBA e VSTO
Gianni Giaccaglini

My Links

News

NB - V. anche gli ARTICOLI (in fondo a questa barra)
Solo quesiti validi a: giannigiac@tin.it
Il mio Best seller su VBA
(v. www.hoepli.it)


Il mio ultimo libro su Open XML
(v. www.FAG.it):



La mia nipotina ELISA

Foto con dedica a ME di
Bill Gates giovanissimo
nei mitici anni 80!

Categorie Post

Categorie Articoli

Archivio

Immagini

Blog Stats

Il mare magnum degli oggetti nei vari mondi VBA (consiglio generale ai neofiti)

Un visitatore mi ha posto una semplice, angosciante domanda: ESISTE DA QUALCHE PARTE UN ELENCO DEI TERMINI VBA?

Nella sua estrema semplicità essa è MOLTO più interessante di quanto non appare a prima vista. La risposta, per quanto ne so, è negativa, per un motivo molto semplice. Infatti la programmazione orientata agli oggetti corrisponde allo stato dell'arte, ha numerosi vantaggi ecc. ecc., ma ha un terribile difetto: è VERBOSA in modo pazzesco. E, nel caso di ambienti VBA come quello di Excel e degli altri membri dell'allegra banda Office, le cose sono ancora peggiori rispetto al Visual Basic standard, 6.0 o .NET, in quanto sovrabbondano gli oggetti specifici, ciascuno dotato di una caterva di proprietà e metodi, con eventuali argomenti di questo e di quello. Con Excel inoltre c'è il problema che la sintassi delle innumerevoli funzioni del foglio di lavoro (come =SOMMA, =CASUALE ecc.) debbono essere inserite secondo la sintassi inglese (ossia =SUM, =RAND ecc.). Nel mio testo EXCEL E OFFICE VBA (ed. Hoepli, Milano) ho messo in appendice tali corrispondenze.

A mio parere personale, poi certamente non giova troppo la disuniformità sintattica (e non solo) che esiste tra un membro e l'altro. Un solo esempio è dato dall'oggetto Table (tabella) di Word. Palesemente si tratta di un parente molto stretto dell'oggetto Range di Excel (mentre - altro pasticcio - il termine Range ha significato ben diverso in Excel e Word) e infatti entrambi condividono l'essere suddivisi in oggetti Row (riga) e Column (colonna) inclusi negli insiemi Rows e Columns. Ma l'analogia si ferma qui e si scopre che Cells e Cell hanno sintassi e significato diversi nei due mondi, tanto che nel secondo (Word VBA) Cell serve pure a individuare, tramite indici, una colonna, cosa che in Excel VBA si fa, più rigorosamente, mediante Cells(indRiga, IndColonna), che invece non funziona in Word ove si deve usare Cell! Un vero rompicapo, al punto che anch'io che modestamente sono un discreto esperto di VBA, debbo fare mente locale ogni volta che torno a occuparmi del VBA di Word.

Di qui la materiale impossibilità di stilare elenchi come quelli che i neofiti bramerebbero.

MA NON OCCORRE SCORAGGIARSI (non del tutto, almeno). La Guida in linea e l'intellisense aiutano davvero molto. Idem il tasto F2 che conduce agli oggetti del variegatissimo mondo VBA in cui ci si trova. Vi sono anche trucchi per un apprendimento graduale. Tornando alle funzioni inglesi di Excel ci si può aiutare col Registratore:

1. accenderlo con Strumenti > Macro > Registra nuova macro...

2. digitare in una cella qualsiasi la funzione desiderata, putacaso =SOMMA(A1:A10);

3. stoppare il Registratore e vedere non di nascosto l'effetto che fa.

Si scoprirà nella fattispecie qualcosa come... beh scopritelo da soli e, se siete interessati, fai subito un paio di salti nella Guida per studiare e capire le specifiche proprietà dell'oggetto Range, ossia FormulaR1C1, Formula e Value, approfondendo le (sottili) differenze.

posted on venerdì 13 gennaio 2006 17.15