Questo sito utilizza cookie, anche di terze parti, per migliorare la tua esperienza e offrire servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie

Rimani informato sugli aggiornamenti di SOS-OFFICE. Inserisci il tuo indirizzo e-mail: Informativa sulla privacy

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.

Joomla templates by a4joomla