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

Worksheet_Change bei Änderung des Zellwert

Forumthread: Worksheet_Change bei Änderung des Zellwert

Worksheet_Change bei Änderung des Zellwert
Frank
Hallo zusammen,
Ich überwache die Zelle A1. Bei Änderung der Zelle soll per Worksheet_Change ein Ereingnis ausgeführt werden. Worksheet_Change reagiert leider auch, wenn der Zellwert gleich bleibt. Beispiel: A1 hat den Wert "10". Ein anderes Makro "überschreibt" A1 mit dem Wert "10"; das Ereignis wird dennoch ausgelöst. Kann das verhindert werden?
Vielen Dank,
Frank
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Worksheet_Change bei Änderung des Zellwert
18.01.2010 10:26:54
Tino
Hallo,
Du kannst Dir den Wert aus A1 in einer Static Variablen merken und diesen mit überprüfen.
Static Variablen behalten den Wert auch nach beenden der Prozedur.
Beispiel:
Private Sub Worksheet_Change(ByVal Target As Range)
Static MerkA1
If MerkA1  Range("A1") Then
If Not Intersect(Target, Range("A1")) Is Nothing Then
MsgBox "A1 wurde geändert"
'Wert in Zelle A1 merken
MerkA1 = Range("A1")
End If
End If
End Sub
Gruß Tino
Anzeige
superb! das funktioniert! dankeschön! [n/t]
18.01.2010 10:44:54
Frank
-
;
Anzeige
Anzeige

Infobox / Tutorial

Überwachung von Zelländerungen mit Worksheet_Change in Excel VBA


Schritt-für-Schritt-Anleitung

Um das Verhalten des Worksheet_Change-Ereignisses zu steuern und zu verhindern, dass es auch bei identischen Zellwerten ausgelöst wird, kannst du eine Static Variable verwenden. Folge diesen Schritten:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel, indem du ALT + F11 drückst.

  2. Wähle das entsprechende Arbeitsblatt aus, für das du das Ereignis implementieren möchtest.

  3. Füge den folgenden Code in das Code-Fenster des Arbeitsblatts ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Static MerkA1 As Variant
    
       ' Überprüfen, ob die Zelle A1 betroffen ist und ob sich der Wert geändert hat
       If MerkA1 <> Range("A1").Value Then
           If Not Intersect(Target, Range("A1")) Is Nothing Then
               MsgBox "A1 wurde geändert"
               ' Wert in Zelle A1 merken
               MerkA1 = Range("A1").Value
           End If
       End If
    End Sub
  4. Schließe den VBA-Editor und teste die Funktionalität, indem du Werte in Zelle A1 änderst.


Häufige Fehler und Lösungen

  • Fehler: Das Ereignis wird auch ausgelöst, wenn der Wert gleich bleibt.

    • Lösung: Stelle sicher, dass du eine Static Variable verwendest, um den vorherigen Wert zu speichern und nur bei einer tatsächlichen Änderung eine Aktion auszulösen.
  • Fehler: Der Code funktioniert nicht wie erwartet.

    • Lösung: Überprüfe, ob der Code im richtigen Arbeitsblatt eingefügt wurde und ob du die richtige Syntax verwendest.

Alternative Methoden

Eine andere Möglichkeit, nur bei bestimmten Zellen Änderungen zu überwachen, besteht darin, den Worksheet_Change-Code für mehrere Zellen anzupassen. Du kannst die Intersect-Funktion erweitern, um mehrere Zellen zu berücksichtigen:

If Not Intersect(Target, Range("A1, B1, C1")) Is Nothing Then
    ' Deine Logik hier
End If

Mit dieser Methode kannst du auch mehrere Zellen gleichzeitig überwachen.


Praktische Beispiele

  1. Überwachung mehrerer Zellen: Wenn du die Zellen A1, B1 und C1 überwachen möchtest, kannst du den folgenden Code verwenden:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Static MerkA1 As Variant, MerkB1 As Variant, MerkC1 As Variant
    
       If MerkA1 <> Range("A1").Value Or MerkB1 <> Range("B1").Value Or MerkC1 <> Range("C1").Value Then
           If Not Intersect(Target, Range("A1, B1, C1")) Is Nothing Then
               MsgBox "Eine der überwachten Zellen wurde geändert."
               ' Werte merken
               MerkA1 = Range("A1").Value
               MerkB1 = Range("B1").Value
               MerkC1 = Range("C1").Value
           End If
       End If
    End Sub
  2. Ereignis nur bei bestimmten Bedingungen: Du kannst auch Bedingungen einfügen, um nur bei bestimmten Werten zu reagieren:

    If Not Intersect(Target, Range("A1")) Is Nothing Then
       If Range("A1").Value > 10 Then
           MsgBox "A1 hat einen Wert über 10."
       End If
    End If

Tipps für Profis

  • Nutze die Möglichkeit, Static Variablen für mehrere Zellen zu verwenden, um den Code sauber und übersichtlich zu halten.
  • Überlege, ob du eine separate Funktion für komplexere Logik erstellst, um den Worksheet_Change-Code lesbarer zu gestalten.
  • Achte darauf, deine Arbeitsmappe regelmäßig zu speichern, während du mit VBA arbeitest, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Warum wird das Worksheet_Change-Ereignis bei identischen Werten ausgelöst?
Das Ereignis wird ausgelöst, weil Excel bei jedem Schreibvorgang eine Änderung registriert, auch wenn der Wert gleich bleibt. Eine Static Variable hilft, dies zu verhindern.

2. Kann ich das Ereignis nur für bestimmte Zellen aktivieren?
Ja, du kannst die Intersect-Funktion verwenden, um nur bestimmte Zellen zu überwachen, wie in den Beispielen gezeigt.

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