Macro lampeggio celle

  • Avvio macro di Monica


    desidero innanzitutto esprimere i miei complimenti per il sito che mi è stato segnalato dal mio prof di matematica.
    ho trovato molto interessante , in particolare, la risposta di apoben64 data a carlo nel post “ancora sul lampeggio cella”.
    ho cercato di trasferire quei suggerimenti ad un mio particolare problema che cerco di esporre in sintesi.
    nelle celle a1 e d1 del foglio1 ho le formule:

    · in a1: =d1
    · in d1: =se(f1=1;”nome”;” “)
    · f1 è una cella libera che può contenere un valore vuoto oppure un numero

    ora, nel modulo associato al foglio1 dell’editor ho digitato il seguente codice:

    private sub worksheet_selectionchange(byval target as range)
    if range("a1").value <> "" then
    call lampeggio
    end if
    end sub

    mentre nel modulo 1 del progetto ho scritto la procedura riportata nello spazio qui sotto.

    con questa procedura, se digito 1 in f1 e poi seleziono una cella qualsiasi del foglio1 ottengo il lampeggiamento (4 volte) in a1 della stringa “nome” . se nulla digito in f1 anche dopo aver selezionato un’altra cella non accade nulla. ciò è esattamente ciò che voglio. senonchè ho voluto provare ad ottenere questi stessi risultati in modo ancora più automatico (senza, cioè, selezionare un’altra cella) ponendo un worksheet_change al posto di worksheet_selectionchange. risultato: a1 lampeggia in continuazione anzichè solo 4 volte come prima. qualcuno può aiutarmi a risolvere questo problema? grazie a tutti!

     
    Sub lampeggio()
    a = Range("a1").Value
    Dim i As Integer
    For i = 1 To 4
    Cells(1, 1) = a
    Call Flash_Sequence
    Next i
    End Sub
    Private Sub Flash_Sequence()
    a = Range("a1").Value
    Dim n As Byte, Start As Variant
    For n = 1 To 10
    Start = Timer
    Do While Timer < Start + 1 / 15
    Loop
    If n Mod 5 = 0 Then Cells(1, 1) = ""
    Next n
    Range("A1").Formula = "=D1"
    End Sub

    di Apoben64
    Ciao monica e benvenuta nel forum , prova anche a visionare il post "avvio macro -evento change", lì c'è un codice , modificabile e risponde al tuo quesito.
    un saluto luca

    di Big ronnie
    Ciao monica, credo che la spiegazione sia questa:
    con l'evento selectionchange, ogni volta che tu selezioni una cella nuova,excel controlla il contenuto di "f1" e trovando il num.1 chiama la macro flash_sequence che termina dopo 4 lampeggi.ora se tu non fai + niente non succede nulla xchè non si genera + nessun evento,al contrario ogni lampeggio della cella "a1" nell' evento worksheets_change è un cambiamento x excel e quindi viene chiamata di continuo la macro flash_sequence generando un ciclo infinito.spero di essere stato chiaro.ciao alla prossima

    Avvio macro di Monica
    Per apoben64-- nel mio caso la stringa "nome" è un messaggio (che può variare a seconda delle circostanze dipendenti dal numero in d1). lo vorrei lampeggiante per richiamare l'attenzione dell'utente quando questi eventi si verificano. ho letto il post che mi hai indicato nel quale però (mi sembra di capire) la stringa è costante. non saprei proprio come adattarlo alla mia situazione anche perchè, nonostante stia studiando il "corso base vba" del sito, ho l'impressione che quel codice sia al di là della mia portata. ti ringrazio comunque.
    per big ronnie-- ho capito perfettamente perchè si genera il ciclo. grazie per l'aiuto!

    di Apoben64
    Ciao monica, in effetti l'esempio prevede l'uso di due costanti, ma il codice può essere modificato e adattato ad ogni situazione in cui in "d1" ci sia un valore costante, un risultato di una formula come = se ecc. ;cioè interagire con l'evento change del foglio.
    da parte tua non dovrai far altro che eliminare la dichiarazione delle due costanti e sfruttare il codice utilizzando la funzione if then. ovviamente devi solo modificare i riferimenti di cella (range) e immettere le tue condizioni per il msgbox.

     
     ..... 
    if rng.value =  " 1° tua condizione" then Msgbox "....."
    if rng.value = "2° tua condizione "  then msgbox"..."