macro quando una cella cambia
Hai un problema con Excel? 
macro quando una cella cambia
di salvo158 (utente non iscritto) data: 13/12/2013 16:22:41
Ciao a tutti; non sono esperto di macro e vba. Ho realizzato una macro che ho collegato ad un pulsante. Cliccando si avvia e funziona.
Vorrei che la macro partisse automaticamente quando il valore della cella BO21 sarebbe >= a quello attuale. Il valore della cella BO21 è dato da una formula che calcola il massimo valore di un intervallo di valori che vengono da altri fogli.
di gaetanopr (utente non iscritto) data: 13/12/2013 16:50:06
Puoi sfruttare l'evento Worksheet_Calculate, nel forum e in rete trovi vari esempi, prova da solo se non riesci allega la macro
Ciao
di salvo158 (utente non iscritto) data: 13/12/2013 17:19:15
ciao gaetano e grazie per la risposta;
è la prima volta che mi occupo di macro e vba.
Ho messo
Private Sub WorkSheet_Calcolate()
ordina
end sub
nel foglio in cui voglio si avvii la macro e la macro ordina l'ho messa in modulo1.
però non va.
Allego la mia macro, sarà un po rozza.
sub ordina()
s=24
for r=57 to 243
if cells(r, 81).value=1 and cells(r, 82).value<>"" then
cells(24, 66).value=""
cells(25, 66).value=""
cells(26, 66).value=""
cells(27, 66).value=""
cells(28, 66).value=""
cells(29, 66).value=""
cells(s, 66).value=cells(r, 82).value
cells(s, 67).value=cells(r, 84).value
s=s+1
end if
next r
end sub |
di gaetanopr data: 13/12/2013 17:31:37
La macro non va messa nel modulo1, ma direttamente inserita nel foglio facendo doppio click sul nome del foglio dall'editor vb.
Dovresti prendere l'abitudine di dichiarare le variabili che usi e di usare Option Explicit.
Option Explicit
Private Sub Worksheet_Calculate()
Dim s As Long, r As Long
Application.EnableEvents = False
s=24
for r=57 to 243
if cells(r, 81).value=1 and cells(r, 82).value<>"" then
cells(24, 66).value=""
cells(25, 66).value=""
cells(26, 66).value=""
cells(27, 66).value=""
cells(28, 66).value=""
cells(29, 66).value=""
cells(s, 66).value=cells(r, 82).value
cells(s, 67).value=cells(r, 84).value
s=s+1
end if
next r
Application.EnableEvents = True
End Sub |
di salvo158 (utente non iscritto) data: 13/12/2013 18:20:20
Grazie gaetano, hai risolto il mio problema.
Cercherò di seguire i tuoi consigli.
se ti va potresti spiegarmi in parole povere cosa significano Option Explicit e Application.EnableEvents = False prima e Application.EnableEvents = True?
Cmq ti ringrazio ancora immensamente, a presto.
di gaetanopr data: 13/12/2013 19:45:08
Option Explicit è un istruzione facoltativa e quando indicata(và inserita ad inizio modulo) ti obbliga a dichiarare tutte le variabili in uso, in modo da evitare errori di digitazioni, infatti nel momento in cui venisse usata una variabile non dichiarata o una variabile digitata erroneamente verrà visualizzato un errore.
Application.EnableEvents = False
Quando si sfruttano gli eventi come Worksheet_Calculate, oppure Worksheet_Change per evitare ricorsione del codice (la macro si avvia ad ogni ricalcolo del foglio, può capitare che si inneschi un ciclo all'infinito) quindi è opportuno inibire gli eventi con una prima istruzione EnableEvents = False e successivamente al termine della macro ripristinarli con EnableEvents = True
Comunque quando hai dei dubbi su delle istruzioni ti basta selezionare e fare F1, si aprirà la guida in linea di excel.
Ciao
di salvo158 (utente non iscritto) data: 13/12/2013 20:22:49
Gentilissimo. Mi sto appassionando al vba.
Dovessi avere qualche altro problema so a chi rivolgermi.
Ancora grazie, ciao.
Vuoi Approfondire?