Avvio macro

Storico discussioni

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"..."

Cognolato Studio © 2005