2016-06-28 20 views
-1

Ich habe einen VBA-Makro, den ich ausführen muss, um meinen monatlichen Datenabbild von Rohdaten zu initialisieren. Das funktioniert gut.VBA-Arbeitsblätter vorübergehend deaktivieren()

Zusätzlich habe ich einen Private Sub Worksheet_Change() Schritt, der jedes Mal ausgeführt wird, wenn der Wert einer Zelle geändert wird. Das funktioniert gut.

Mein Problem ist, dass, als mein Initialisierungsmakro viele Änderungen vornimmt, es weiterhin die Private Sub Worksheet_Change() feuert. Gibt es eine Möglichkeit, dass ich es deaktivieren kann, bis die Initialisierung beendet ist?

Antwort

2

Sie müssen vorübergehend disabile eventi mit

Application.EnableEvents = False

Und dann setzen Sie ihn zurück zu True Verwendung von Makro Ende Initialisierung

Um sicherzustellen, dass Sie es tatsächlich zurück würden Sie besser diese Einstellungen in Ihrem Initialisierung Makro tun selbst und ein Fehlerhandler verwenden, wie folgt:

Sub InitializingMacro() 

    On Error GoTo ErrHandler 
    Application.EnableEvents = False 

    'Your code here... 

ErrHandler: 
    Application.EnableEvents = True 

End Sub 
1
application.enableevents = false 
+1

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag. - [Aus Bewertung] (/ review/low-quality-posts/12835362) – gofr1

+0

@ gofr1. Danke für den Hinweis :) ja das ist eine sehr schlechte Antwort: D – Rosetta

+1

die Antwort braucht keine Erklärung meiner Meinung nach, in der Tat ist es die einzige mögliche Antwort. Die Frage selbst beweist keine Google-Suche vor der Hand. Das OP liefert nicht einmal Code oder welche Schritte er gemacht haben könnte ... –

0

füge ich einen globalen Wert bAlreadyinChange und setzen Sie ihn auf True, dann zu Beginn des Worksheet_Change Ereignis, überprüfen Sie diesen Wert und die Unter verlassen, wenn es bereits gesetzt ist, so ...

Sub Worksheet_Change() 
    if bAlreadyinChange Then Exit Sub 
    bAlreadyinChange = True ' set this so any updates don't fire the event again 
    ' do whatever here 
    bAlreadyinChange = False 
End Sub 

Dies bedeutet, dass ich das change-Ereignis verwenden kann, um alle Aktualisierungen oder Anpassungen, die ich mag, auf das Blatt anzuwenden, ohne das Ereignis rekursiv auszulösen. Obwohl ich keinen Grund, warum Sie nicht das gleiche tun könnte die Application.EnableEvents in Rosetta Beitrag

+1

Diese Methode ist für Benutzerformulare, in Arbeitsblättern können Sie 'application.enableevents = false' verwenden –

Verwandte Themen