macro quando una cella cambia



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