Effetto rollover su una cella



  • Effetto rollover su una cella
    di Vecchio Frac data: 01/02/2013 18:44:41

    Un trucco affascinante, in Excel.
    Naturalmente non è mio :) ma lo trovo così intrigante che ho deciso di riportarlo qui e condividerlo.
    Si tratta di intercettare l'effetto "roll over" su una cella (funzione che per esempio HTML mette a disposizione).
    Basta passare il mouse su una cella bersaglio e si scatena l'evento "mouse over".
    Si badi bene: nessun evento SelectionChange, nessun evento Change; il semplice passaggio del mouse sulla cella desiderata e voilà, il trucco appare.
    Tutto è nato da una ricerca su come modificare il contenuto di una cella da parte di una UDF... impossibile da realizzarsi normalmente ma ecco che (magari volutamente) i programmatori di Excel ci regalano questa possibilità.
    Basta sfruttare un semplice collegamento ipertestuale, passando come argomento non un indirizzo web ma una funzione UDF. Pare che il semplice passaggio del mouse sopra una cella contenente un hyperlink, costringa Excel a (pre)valutarne il contenuto e quindi a eseguire immediatamente la funzione associata.
    Le possibilità per sfruttare questo trick sono tante: per visualizzare informazioni rapide per l'utente, come i (e meglio di) commenti; per eseguire una funzione quando un utente posiziona il mouse su una zona specifica, come e meglio del click nella cella; per effettuare simpatici effetti grafici, ad esempio un refresh dinamico di un grafico in base a valori di serie diverse.
    L'Hyperlink come funzione di Excel funziona così:
    =COLLEGAM.IPERTESTUALE(posizione_collegamento, [nome_collegamento])

    posizione_collegamento - è l'indirizzo di destinazione del collegamento ipertestuale. Questo può essere una pagina web (ad esempio "www.google.com") o un file sul computer.
    nome_collegamento - parametro facoltativo che fornisce una didascalia per il collegamento ipertestuale. Se si lascia vuoto il campo, verrà visualizzato l'indirizzo del parametro precedente.

    Facciamo un esempio pratico! è necessario creare una funzione definita dall'utente (UDF), dichiarata Public in un Modulo, che verrà eseguita quando l'evento rollover viene scatenato.

    Public Function roll_over()
    Sheets("Foglio1").Range("A2").Value = "Roll over!"
    End Function

    Quando la funzione verrà eseguita verrà inserito un valore in A2. Strano no? Di solito le UDF non hanno il permesso di modificare i valori in altre celle. Tuttavia, questa limitazione sparisce quando la funzione viene chiamata da un collegamento ipertestuale!
    Ora modifichiamo la cella A1 del Foglio1 e introduciamo questa formula:
    =COLLEGAM.IPERTESTUALE(roll_over(), "Clicca qui")

    Dopo aver premuto Invio, otteniamo un errore: #VALORE! che è in realtà piuttosto deludente, ma possiamo ignorarlo. Ora semplicemente passiamo il mouse sopra la cella A1 e... magia! nella cella A2 compare la scritta "Roll over!".
    Risolviamo il problema del valore di errore #VALORE! Basta riscrivere la funzione nella cella come segue: =RIPETI("Up";VAL.ERRORE(COLLEG.IPERTESTUALE(roll_over();"")))

    Sviluppi interessanti:
    - funzioni differenziate associate a distinti collegamenti ipertestuali per ottenere effetti diversi passando su celle diverse;
    - combinazione con formattazione condizionale che cambia colore a certe celle passando sopra altre celle;
    - funzioni parametrizzate per evitare di scrivere funzioni diverse!

    Interessante no? Dicevo all'inizio che non è farina del mio sacco...
    Ecco tutti i link di riferimento:
    chandoo.org/wp/2011/07/20/interactive-dashboard-using-hyperlinks/

    optionexplicitvba.blogspot.hu/2011/04/rollover-b8-ov1.html





  • di HarryBosch data: 02/02/2013 00:31:51

    Ma questo rollover è veramente carino!!
    Si possono creare degli effetti veramente molto belli... devo subito inserirlo nelle mie applicazioni d'ufficio.

    Ottimo spunto, non avevo nemmeno mai pensato che con Excel si potesse intercettare un evento al solo passaggio del mouse. Non si finisce mai di imparare!



  • di Textomb data: 09/02/2013 10:26:19

    ho avuto modo di utilizzare l'effetto rollover descritto da Vecchio Frac.
    al semplice passaggio del mouse la tabella viene ordinata in base alla colonna in cui si trova il mouse. E poi evidenzia in grassetto i primi tre valori.
    Per me era impensabile fare una cosa del genere...



  • di Vecchio Frac data: 09/02/2013 13:40:56

    Ciao Alberto, bentrovato! parli dell'esempio trovato nei link? o hai provato a fare una cosa tua?
    In ogni caso sì, nemmeno io mi ero mai imbattuto in una cosa così, ed è davvero affascinante.





  • di Textomb data: 09/02/2013 17:07:58

    ho provato a fare una cosa mia.
    mi serviva attuare un ordinamento veloce di una tabella. Questo sistema mi è sembrato l'ideale.
    basta avvicinarmi con il mouse ed ecco l'ordinamento fatto.
    bellissimo.



  • di Vecchio Frac data: 09/02/2013 20:10:45

    Sono contento che abbia trovato interessante l'argomento e l'abbia addirittura provato ^_^
    Devo però scusarmi per un errore di digitazione che ho commesso nel post iniziale (e che nessuno ha rilevato):
    la funzione si chiama =COLLEG.IPERTESTUALE (la traduzione da =HYPERLINK è orribile, come molte altre funzioni Excel tradotte in modo ridicolo in Excel italiano, ed ecco perchè preferisco sempre lavorare con codice VBA, che almeno non ci sono problemi di localizzazione/traduzione).