Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Worksheet_Change vorübergehend deaktivieren

Worksheet_Change vorübergehend deaktivieren
01.03.2006 17:11:18
torsten
Hallo Leute,
- MEINE EXCELVERSION IST 2002 - SP2 -
Ich habe ein mittlerweile ziemlich umfangreiches Workbook, mit mehreren Sheets, CommandButtons, etc. erstellt. Z.Zt. lasse ich 2 meiner Sheets per "Worksheet_Change" überwachen, damit keine unerlaubten Änderungen vorgenommen werden können. Dazu habe ich im Rumpf von "Worksheet_Change" jeweils die entsprechendes Ranges angegeben und lasse sie entspr. überwachen.
Manchmal veranlasst der Benutzer jedoch völlig legitime Änderungen (einlesen von Daten, aus einer Quelle) in dem überwachten Sheet. Bei diesen Änderungen, die nicht von Hand geschehen, sondern per Quellcode, soll die Überwachung deaktiviert werden.
Z.Zt. realisiere ich dies mit einer globalen booleschen Variablen (deactShChange). Dabei setze ich sie zu Beginn des auszuführenden Codes auf True und am Ende eben wieder auf FALSE.
Es funktioniert zwar, aber was mich daran nervt, ist, dass jedesmal die Sub ausgeführt wird. Z.Zt. ist mein Workbook dadurch nicht langsamer, aber es nervt mich irgendwie trotzdem, obwohl der Rumpf bereits in der 2 Zeile abgebrochen wird. Als würde es nicht schon reichen, dass ich jeder "legitimen"-Prozedur ein setTrue und ein setFalse verpassen musste.
Frage:
Ist es möglich, statt der setTrue&False-Geschichte einfach ein
de-/activate_Worksheet_Change zu verwenden ?
Gruß
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worksheet_Change vorübergehend deaktivieren
01.03.2006 17:50:07
Heiko
Hallo Thorsten,
Auszug aus der VBA Hilfe:
Beispiel zur EnableEvents-Eigenschaft
In diesem Beispiel werden Ereignisse vor dem Speichern einer Datei deaktiviert, so dass das Ereignis BeforeSave nicht auftritt.
Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
Damit wird aber auch das Worksheet_Change Event und noch viele andere abgeschaltet.
Also Events auf False, deine Code zum ändern, Events auf True, Fertig.
Gruß Heiko
PS: Rückmeldung wäre nett
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Worksheet_Change vorübergehend deaktivieren in Excel VBA


Schritt-für-Schritt-Anleitung

Um das Worksheet_Change-Ereignis in Excel VBA vorübergehend zu deaktivieren, kannst du die Application.EnableEvents-Eigenschaft verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne deinen VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Wähle das entsprechende Worksheet: Suche das Arbeitsblatt, dessen Worksheet_Change-Ereignis du deaktivieren möchtest.

  3. Füge den folgenden Code hinzu:

    Private Sub Worksheet_Change(ByVal Target As Range)
       ' Deaktiviere Events
       Application.EnableEvents = False
    
       ' Deine Code-Logik hier
       If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
           ' Beispiel: Ändere den Wert in Zelle B1
           Me.Range("B1").Value = "Änderung erkannt"
       End If
    
       ' Reaktiviere Events
       Application.EnableEvents = True
    End Sub
  4. Speichere dein Projekt: Vergiss nicht, dein Workbook zu speichern, um die Änderungen zu behalten.


Häufige Fehler und Lösungen

  • Fehler: Ereignisse werden nicht reaktiviert

    • Lösung: Stelle sicher, dass der Code, der die Ereignisse deaktiviert, auch die Ereignisse wieder aktiviert, selbst wenn ein Fehler auftritt. Verwende dafür die On Error-Anweisung:
    Private Sub Worksheet_Change(ByVal Target As Range)
       On Error GoTo ErrorHandler
       Application.EnableEvents = False
    
       ' Deine Code-Logik hier
    
    ErrorHandler:
       Application.EnableEvents = True
    End Sub
  • Fehler: Änderungen werden nicht erkannt

    • Lösung: Überprüfe, ob die Target-Range korrekt ist. Stelle sicher, dass die Änderungen innerhalb des überwachten Bereichs liegen.

Alternative Methoden

Wenn du das Worksheet_Change-Ereignis nicht für alle Änderungen deaktivieren möchtest, kannst du auch spezifische Bedingungen setzen, um nur bestimmte Änderungen zu ignorieren. Eine Möglichkeit ist, die Änderungen in einer globalen booleschen Variable zu steuern.

Dim deactShChange As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
    If deactShChange Then Exit Sub

    ' Deine Code-Logik hier
End Sub

Setze deactShChange auf True, bevor du Änderungen vornimmst, und auf False, wenn du fertig bist.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du das Worksheet_Change-Ereignis deaktivieren und dann Änderungen vornehmen kannst:

Sub DatenImportieren()
    ' Deaktiviere das Worksheet_Change-Ereignis
    Application.EnableEvents = False
    deactShChange = True

    ' Beispiel: Importiere Daten aus einer CSV-Datei
    Workbooks.Open "C:\Pfad\zu\deiner\datei.csv"

    ' Führe hier deine Datenverarbeitung durch

    ' Reaktiviere das Worksheet_Change-Ereignis
    deactShChange = False
    Application.EnableEvents = True
End Sub

Tipps für Profis

  • Verwende Application.ScreenUpdating = False: Zusätzlich zu Application.EnableEvents kannst du Application.ScreenUpdating deaktivieren, um die Leistung zu verbessern, besonders bei umfangreichen Änderungen.

    Application.ScreenUpdating = False
    ' Deine Code-Logik hier
    Application.ScreenUpdating = True
  • Dokumentiere deinen Code: Füge Kommentare hinzu, um zu erläutern, warum du die Ereignisse deaktivierst. Dies hilft dir und anderen, die Logik später besser zu verstehen.


FAQ: Häufige Fragen

1. Wie kann ich die Ereignisse wieder aktivieren, wenn ein Fehler auftritt? Du kannst die On Error-Anweisung verwenden, um sicherzustellen, dass die Ereignisse immer reaktiviert werden, auch wenn ein Fehler auftritt.

2. Funktioniert dies auch in anderen Excel-Versionen? Ja, die beschriebene Methode funktioniert in den meisten Excel-Versionen, einschließlich Excel 2002 und neuer. Achte darauf, dass du in einer kompatiblen VBA-Umgebung arbeitest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige