Condividi tramite

VBA Excel: "Inibire" evento Workbook_Change (o Workbook_SheetChange)

Anonimo
2017-12-18T15:50:10+00:00

Buonasera,

ho il seguente problema: in un foglio Excel, intercetto l'evento "Workbook_Change" e a seconda della modifica faccio una cosa oppure l'altra. Nel caso, però, di errore, dovrei anche inserire un valore in un'altra cella: questo mi causa una nuova attivazione dell'evento Workbook_Change, ritrovo l'errore, e così via (loop!).

Come ne posso uscire? In questo senso vorrei "inibire" momentaneamente l'evento in questione.

Grazie in anticipo

Ivo

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2017-12-18T16:13:33+00:00

Ciao Ivo ,

ho il seguente problema: in un foglio Excel, intercetto l'evento "Workbook_Change" e a seconda della modifica faccio una cosa oppure l'altra. Nel caso, però, di errore, dovrei anche inserire un valore in un'altra cella: questo mi causa una nuova attivazione dell'evento Workbook_Change, ritrovo l'errore, e così via (loop!).

Come ne posso uscire? In questo senso vorrei "inibire" momentaneamente l'evento in questione una

Vedi la proprietà Application.EnableEvents.

Per un esempio banale, prova qualcosa del genere:

'=========>>

Option Explicit

'--------->>

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Rng As Range, rCell As Range

    Const sIntervallo As String = "A2:A20"

    Const dVal As Double = 100

    Set Rng = Intersect(Me.Range(sIntervallo), Target)

    If Not Rng Is Nothing Then

        On Error GoTo XIT

        Application.EnableEvents = False

        For Each rCell In Rng.Cells

            With rCell

                If .Value > dVal Then

                    .Offset(0, 1).Value = dVal * 2

                Else

                    .Offset(0, 2) = dVal / 2

                End If

            End With

        Next rCell

    End If

XIT:

    Application.EnableEvents = True

End Sub

'<<=========

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-12-18T18:03:47+00:00

    Ciao Ivo,

    Grazie, Norman! Sapevo che c'era la soluzione, ma .. non la trovavo!

    Grazie a te, Ivo, per il cortese riscontro.

    Alla prossima.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-12-18T16:20:53+00:00

    Grazie, Norman! Sapevo che c'era la soluzione, ma .. non la trovavo!

    La risposta è stata utile?

    0 commenti Nessun commento