Crearsi uno SlideShow con un controllo Image (ActiveX). - dal 04/09/04 pagina vista: volte Un esercizio semplice che potrà interessare per diletto o per lavoro. Sappiamo che è possibile inserire nei fogli di lavoro delle immagini, sia come sfondo dei fogli di lavoro (dal menù Formato/Foglio/Sfondo...) sia come "Forma" (dal menù Inserisci/Immagine scegliendo poi la provenienza: clipart, file, scanner, ecc). E' possibile inserire immagini usando un "controllo ActiveX" (preso quindi da "Strumenti di controllo" ex "Casella degli strumenti") : il controllo "Immagine" (in inglese Image), che essendo stato creato per questo scopo, non solo possiede delle "proprietà" su cui intervenire per regolazioni, ma è possibile intervenire via codice vba sul controllo stesso, e quindi risulta "programmabile". Questo "controllo" lo abbiamo già visto nell'articolo "ComboBox, Listbox e Image" sull'altro sito, a cui rimando per leggersi le caratteristiche delle "proprietà" del "Controllo Image". In quell'articolo il controllo Image veniva usato su una UserForm, mentre qui lo useremo direttamente sul foglio di lavoro. Possiamo decidere diversi modi per associare questo controllo alle immagini, qui lo useremo come contenitore di immagini correlate a nomi di un elenco (nomi di piante, di persone, di articoli di magazzino, di città, di disegni tecnici, di logo, ecc. ecc.), e sceglieremo tre modi diversi per cambiare le immagini. Condizione comune a tutti e tre i modi sarà quella di chiamare le immagini usando una numerazione progressiva: 1.jpg, 2.jpg, 3.jpg, ecc.; potremmo tranquillamente usare anche dei nomi classici, tipo marina.jpg, roma.jpg, sandra.jpg, ecc., ma usando numeri al posto di nomi facilita l'identificazione delle immagini soprattutto quando useremo i cicli.
Ma vediamo l'esempio di una possibile situazione: una tabella con nomi di piante, che formano l'input per la casella combinata (da B3 in poi), e la cella B1 come cella collegata: vediamo anche nella casella combinata la voce "ANGELICA", che è la sesta nell'elenco, selezionata e in B1 vediamo appunto il numero 6, a destra il controllo Image con la foto della pianta selezionata: Selezionando un altro nome cambieremo anche l'immagine, e questa la semplice istruzione inserita in un modulo standard:
Cosa dice l'istruzione: con la variabile "x" prendiamo il numero che è in B1, la seconda riga imposta l'istruzione necessaria a caricare l'immagine corrispondente. La sintassi deve essere uguale: identifichiamo il controllo Image1 sul foglio attivo, e impostiamo la sua proprietà "Picture" dicendogli con l'istruzione LoadPicture il percorso dove risiede l'immagine da caricare. Ognuno chiaramente scriverà il percorso dove saranno le immagini da caricare, sul proprio computer. Un'altra routine, sempre attivabile manualmente, è la seguente dove sfrutteremo la colonna A, dove abbiamo scritto un numero progressivo a lato di ogni nome di pianta, con l'evento Worksheet_SelectionChange del foglio di lavoro. Infatti o selezionando manualmente un numero o spostandoci con freccia su, freccia giù, attiviamo un cambio di selezione e le istruzioni all'evento associate. Inseriamo anche un controllo sfruttando Intersect in modo che la routine si attivi solo nel Range (colonna A) voluto:
STAMPA.Questa routine è valida anche per ottenere stampe del foglio o comunque di ogni immagine che scorre, inserendo prima dell'istruzione Next, l'istruzione: Activesheet.PrintOut Copies:=1, Collate:=True (oppure Selection al posto di ActiveSheet ,se avrete selezionato un area da mandare in stampa), in questo caso PauseTime sarà sufficiente impostarlo a 1 secondo. Infatti la velocità di scorrimento di un ciclo è maggiore della capacità di aggiornamento del controllo Image, e se non si interpone una pausa tra un ciclo e il successivo, si stamperebbe solo la prima immagine caricata. Un altro modo di usare cicli per ottenere uno SlideShow sarà quello di usare un ciclo For..Next, indicando come numero iniziale e numero finale i numeri che rappresentano i due limiti estremi dei nomi delle immagini, senza necessità di scorrere le celle come nel precedente ciclo For Each..Next, esempio:
Nota: per evitare errori se l'immagine da caricare non esiste o non è esatto il nome-numero, consiglio di usare la gestione degli errori. Un suggerimento per usare per il nome delle immagini non solo un numero, che può essere poco descrittivo o a noi poco riconoscibile, ma anche un nome più necessariamente un numero, sul tipo di Amalfi1.jpg, Amalfi2.jpg, ecc.ecc., può essere letta questa istruzione sotto, dove concateniamo un nome alla variabile assegnata al ciclo:
Se invece avremo scelto il ciclo For Next, dove è N la variabile che porta il numero, l'esempio sarebbe:
Ma esistono ancora altre possibilità, una potrebbe essere quella di destinare una cella come contenitore di un nome, che quindi diventerebbe modificabile, ed assegnare la cella alla variabile y, per esempio in A1 scriviamo Amalfi:
o ancora, supponendo che le immagini l'avessimo chiamate col SOLO nome della pianta (vedi prima immagine sopra), potremmo usare il ciclo For Each Next scorrendo le celle della colonna B, in questo caso la variabile x porterebbe già il nome della foto, così:
Insomma, ce n'è per tutti i gusti, fate le vostre prove, ci sono altre possibilità, scopritele, e buon divertimento. Buon lavoro. prelevato sul sito www.ennius.altervista.org |