- Dettagli
- Scritto da Alessandra
- Pubblicato: 10 Giugno 2015
- Visite: 15453
Oggi ripropongo un argomento un po’ più avanzato di VBA:come interrompere la rilevazione degli eventi.
Voglio eseguire una operazione sull’evento Change di un foglio di lavoro. Se l’operazione che compio cambia in qualche modo il foglio, di fatto scateno nuovamente l’evento Change del foglio e quindi creo un ciclo infinito che genera un errore.
Immaginiamo di avere il codice che segue
Private Sub Worksheet_Change(ByVal Target As Range)
Dim numImg As Integer
numImg = ActiveSheet.Pictures.Count
Range("a1") = numImg
End Sub
È un codice banale: ogni volta che si verifica un evento qualunque nel foglio di lavoro, VBA conta le immagini presenti nel foglio e ne scrive il numero in A1. L’operazione di scrivere in A1 genera a sua volta un evento change che a sua volta volta richiama il conteggio delle immagini e la scrittura in A1 e così via.
Come posso evitare questo errore?
Basta correggere il codice come segue
Private Sub Worksheet_Change(ByVal Target As Range)
Dim numImg As Integer
numImg = ActiveSheet.Pictures.Count
Application.EnableEvents = False
Range("a1") = numImg
Application.EnableEvents = True
End Sub
Praticamente, prima di scrivere in A1 faccio in modo che la applicazione non gestisca gli eventi e quindi non richiami nuovamente l’evento Change del foglio. Riabilito gli eventi dopo aver scritto in A1.


