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