Casella degli Strumenti (ActiveX): come usarli sul foglio di lavoro.

Una caratteristica di molti linguaggi di programmazione, e il VBA è uno di questi, è la "programmazione ad oggetti". Per oggetti si intendono quelli strumenti che facilitano o migliorano la gestione del foglio di lavoro e dei dati in esso contenuti, attraverso l'inserimento dell'oggetto stesso sul foglio di lavoro: sono oggetti : commandbutton, casella combinata, casella di testo, option button, una form,ecc. Ogni oggetto possiede delle  proprietà,  dei  metodi,  e degli  eventi . Le proprietà sono le caratteristiche che l'oggetto possiede e che possono essere modificate nelle impostazioni.  Ogni oggetto ha le sue proprie proprietà, non necessariamente comuni ad altri oggetti. Per usare gli oggetti,una volta inseriti in un foglio, dovremo lavorare in "modalità progettazione" (si attiva automaticamente quando inseriamo l'oggetto, o si richiama cliccando sull'icona "squadra" nella casella degli strumenti); in questa modalità, con un doppio click sull'oggetto, entreremo nell'editor di visual basic che ci mostrerà nella finestra inferiore a sinistra, le proprietà dell'oggetto stesso. Sulla pagina destra troveremo invece la zona dove inserire eventuali istruzioni da far eseguire scegliendo un evento dell'oggetto stesso. Per esempio, usando un commandbotton, potremo sfruttare l'evento click, selezionandolo dalla finestrina in alto a destra, e ciò che vedremo sarà così:

Private Sub CommandButton1_Click()
qui inseriremo l'istruzione (macro)
End Sub

continuando: l'oggetto "CommandButton" o "pulsante di comando",  ha la  proprietà  "Caption" impostata a  "CommanButton1" (la proprietà Caption è la scritta che vediamo sul pulsante) Possiamo modificare l'impostazione, scrivendo nel relativo campo delle proprietà,  le parole che ci ricordano cosa avviene premendo il pulsante, per esempio "Aggiungi Dati". Ora, quando vedremo il pulsante, ci troveremo scritto "Aggiungi Dati". Il  metodo è l'azione che l'oggetto "può" compiere e l' evento è l'azione che attiva il metodo.

Vi consiglio di consultare la guida in linea, attivabile anche con F1, per familiarizzarsi con questi concetti.

Vediamo, passo passo, come lavorare con questi strumenti: dal Menù Visualizza/Barre degli strumenti, selezionare la voce "Strumenti di Controllo" (o "Casella degli Strumenti" per le versioni più vecchie di Excel). vedi immagine sotto.

Apparirà una piccola finestra come quella nelle foto sotto: è la finestra degli strumenti: passando il mouse sulle icone, appare la descrizione dell'oggetto. Nella foto sotto, a destra, è evidenziata l'icona della "Modalità Progettazione". questa modalità dovrà essere selezionata ogni qualvolta vorremo intervenire sulle proprietà dell'oggetto che avremo inserito sul foglio di lavoro. (la "Modalità Progettazione si attiva in automatico allorchè, selezionando un oggetto, lo "incolleremo" sul foglio di lavoro).

Vediamo ora un esempio di come inserire e dialogare con un oggetto: la casella combinata. Nella  "Finestra degli oggetti", clicchiamo sull'icona "Casella Combinata", spostiamoci  col mouse sul foglio di lavoro e in corrispondenza della zona che avremo scelto per ospitare l'oggetto, clicchiamo col sinistro del mouse e trasciniamo: apparirà l'oggetto che potremo dimensionare a piacere agendo sui punti di selezione (i circoletti). In questa fase saremo già in "Modalità progettazione". Foto sotto: la casella combinata

Ora dovremo passare alla visualizzazione delle proprietà dell'oggetto per inserire le istruzioni che faranno al caso nostro: il reperimento di una colonna di dati e la casella di destinazione dove vorremo che il dato prescelto nella casella stessa, appaia. Doppio click sull'oggetto casella combinata, e si aprirà l'editor di visual basic. Vedi foto sotto a sinistra. Nella zona inferiore sinistra di questa foto vediamo la finestra delle proprietà relative al "ComboBox1", nome inglese della "casella combinata". Il N° 1 viene aggiunto dal codice per identificare che questa è la casella combinata prima inserita, e, poichè ne potremo inserire altre, ad ognuna verrà assegnato un numero di identificazione progressivo.Nella foto sotto a destra vediamo invece le proprietà che invece ci interessano da vicino: "LinkedCell" e "ListFillRange".  La prima identifica la cella che vorremo indicare per riportare i dati che selezioneremo sul foglio di lavoro nella casella combinata, la seconda indica la zona dove la casella combinata andrà a trovare i dati che la stessa ci mostrerà sul foglio di lavoro. Nell'esempio che trattiamo, la lista dei nomi da cercare si troverà nella colonna A, dalla riga 1 alla 8. Per il momento trascuriamo di illustrare le altre proprietà che saranno consultabili attraverso la guida in linea.

Ritorniamo sul foglio di lavoro, clicchiamo sull'icona della "squadra" che identifica la "Modalità progettazione" per uscire da questa modalità, e ciò che vedremo sarà quello illustrato nella foto sotto:

Nella casella combinata ora appare un elenco di nomi (quello che avevamo collegato con "ListFillRange") , con un click su un nome, vedremo la cella C1 (quella collegata con "LinkedCell") riempirsi del nome selezionato. Soprassiedo per il momento a ciò che avremmo potuto fare sfruttando i metodi  e gli  eventi .

Un ultimo accorgimento: poichè la finestra degli strumenti resterebbe "a spasso" per il foglio di lavoro, si può chiuderla usando la famosa "X",  ma meglio se si inserisce, così l'avremo sempre a portata di mano, in alto, sotto i menù, cercando uno spazio tra le finestra già inserite. E' sufficiente trascinare la finestra dgli strumenti con il mouse, e rilasciare quando gli avremo trovato la giusta collocazione. Vedi foto sotto:

L'utilizzo degli "Oggetti ActiveX" in ambiente vba posti su UserForm differisce per il modo di impiego e nell'uso di alcune proprietà diverse dall'ambiente "foglio di lavoro": per esempio per assegnare un intervallo di origine ad una ListBox o ComboBox NON si usa la proprietà ListFillRange ma la proprietà RowSource, e comunque per i due Oggetti, che in ambiente vba sono chiamati anche "Controlli ActiveX", NON sono disponibili nè la proprietà ListFillRange nè la proprietà LinkedCell (se usati su UserForm).