Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Mit "worksheet_change" nur zwei Zellen prüfen?

Mit "worksheet_change" nur zwei Zellen prüfen?
25.05.2009 20:23:58
Dennis
Hallo Forum,
ich importiere teilweise sekündlich in Tabelle3 Daten aus einer externen Quelle. Aus diesen Daten berechne ich ein Verhältnis, was in C5 und D5 angezeigt wird. Nun möchte ich aber nicht, dass bei jedem Datenimport die worksheet_change (oder nehme ich besser worksheet_calc?) routine startet, sondern nur, wenn eine Änderung in C5 oder D5 stattfindet. Wie grenze ich die Prüfung nur auf diese Zellen ein? Und würdet ihr eher change oder calc nehmen?
Danke!
Gruß Dennis
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit "worksheet_change" nur zwei Zellen prüfen?
25.05.2009 20:30:06
Gerd
Hallo Dennis!
berechne ich ein Verhältnis, was in C5 und D5 angezeigt wird
Wodurch? Per Formeln?
Gruß Gerd
AW: Mit "worksheet_change" nur zwei Zellen prüfen?
25.05.2009 20:35:21
Dennis
Hallo Gerd,
genau. In A1, B1 A2 und B2 importiere ich Zahlen.
C5 ist (vereinfacht) A1/B2 + X*A2
und D5 ist A2/B1 - X*A1
Diese Formeln stehen in C5 und D5.
Gruß Dennis
Anzeige
AW: Mit "worksheet_change" nur zwei Zellen prüfen?
25.05.2009 20:59:02
Gerd
Hallo Dennis!
In den Excel-Optionen auf manuelle Berechnung stellen!

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:B2")) Is Nothing Then Exit Sub
Range("C5:D5").Calculate
End Sub


Probier mal aus, ob der Import das Change-Ereignis auslöst.
Ich habe keine Datenpumpe zur Verfügung.
Gruß Gerd

Anzeige
AW: Mit "worksheet_change" nur zwei Zellen prüfen?
25.05.2009 21:09:18
Dennis
Hallo Gerd,
ich probiere es sofort mal aus. Bisher hatte ich das getestet, leider funktioniert es nicht:

Private Sub Worksheet_change(ByVal Target As Excel.Range)
If Target.Address = "$C$5" Or Target.Address = "$D$5" Then
MsgBox Target.Value
End If
End Sub


Anzeige
AW: Mit "worksheet_change" nur zwei Zellen prüfen?
25.05.2009 21:21:43
Dennis
Klappt leider auch nicht... verstehe ich irgendwie nicht...
Meinst du, es ist folgendes möglich?
Wenn ABS(C5) oder ABS(D5) größer 5 ist, soll ein Makro ausgeführt werden.
Ich habe allerdings noch nie ein Makro durch eine WENN-Formel ausführen lassen.
Falls das möglich ist, brauche ich kein worksheet_change benutzen.
Gruß Dennis
Anzeige
AW: Mit "worksheet_change" nur zwei Zellen prüfen?
25.05.2009 21:30:37
Dennis
makroausführung per Formel klappt... Google und Herber sind ein gutes Team... ;-)
AW: Rückfrage
25.05.2009 21:37:32
Gerd
Hallo Dennis,
tut sich beim Datenimport so garnichts mehr ?
Oder werden C5 u. D5 noch wie vorher berechnet?
Gruß Gerd
AW: Rückfrage
25.05.2009 22:41:38
Dennis
Hi Gerd,
ich habe es mittlerweile schon so versucht, dass nur die Felder überwacht werden, wo der Datenimport stattfindet. Sobald sich dort was ändert, soll das Makro gestartet werden. Komischerweise Fehlanzeige. Obwohl ständig neue Daten kommen, reagiert Excel nicht.
Aber jetzt habe ich eine normale WENN Formel auf dem Blatt, die konstant die Berechnung kontrolliert und wenn ein bestimmter Wert überschritten ist, wird direkt ein Makro gestartet. Mehr wollte ich eigentlich nicht. Ich wusste nur nicht, ob und wie man ein Makro per Formel starten kann.
Gruß Dennis
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Mit "worksheet_change" nur bestimmte Zellen prüfen


Schritt-für-Schritt-Anleitung

Um die worksheet_change-Ereignis nur für bestimmte Zellen in Excel zu nutzen, kannst du folgenden VBA-Code verwenden. Dieser Code reagiert nur auf Änderungen in den Zellen C5 und D5:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C5:D5")) Is Nothing Then
        MsgBox "Änderung in C5 oder D5 erkannt!"
    End If
End Sub
  1. Öffne dein Excel-Dokument und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle das entsprechende Arbeitsblatt im Projektfenster aus.
  3. Füge den obigen Code in das Codefenster ein.
  4. Schließe den VBA-Editor und teste die Änderung in den Zellen C5 oder D5.

Dieser Code sorgt dafür, dass die worksheet_change-Routine nur dann ausgeführt wird, wenn eine Änderung in den Zellen C5 oder D5 vorgenommen wird.


Häufige Fehler und Lösungen

  1. Das Ereignis wird nicht ausgelöst.

    • Überprüfe, ob die Excel-Optionen auf "manuelle Berechnung" eingestellt sind. Stelle sicher, dass die Berechnung auf "automatisch" steht, wenn du das worksheet_change-Ereignis verwenden möchtest.
  2. Falsche Zellen werden überwacht.

    • Achte darauf, dass die Zelladressen im Code korrekt angegeben sind. Vergewissere dich, dass du die richtigen Zellen in der Intersect-Funktion verwendest.
  3. Kein Popup erscheint.

    • Stelle sicher, dass du die Zellen C5 oder D5 tatsächlich änderst. Wenn du nur die Werte in Zellen A1 bis B2 änderst, wird das worksheet_change-Ereignis nicht ausgelöst.

Alternative Methoden

Wenn du eine andere Herangehensweise nutzen möchtest, um nur bestimmte Zellen zu prüfen, kannst du die Worksheet_Calculate-Routine verwenden. Diese Methode ist nützlich, wenn du die Werte von C5 und D5 berechnest und auf Veränderungen reagieren möchtest.

Hier ist ein Beispiel:

Private Sub Worksheet_Calculate()
    If Abs(Range("C5").Value) > 5 Or Abs(Range("D5").Value) > 5 Then
        Call MeinMakro
    End If
End Sub

Mit dieser Methode kannst du ein Makro auslösen, wenn die Bedingungen für C5 oder D5 erfüllt sind, ohne dass du die worksheet_change-Routine benötigst.


Praktische Beispiele

  1. Überwachung von Eingaben: Wenn du möchtest, dass bei einer Änderung in C5 oder D5 eine Nachricht angezeigt wird, kannst du den folgenden Code verwenden:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Range("C5:D5")) Is Nothing Then
           MsgBox "Wert geändert!"
       End If
    End Sub
  2. Automatisches Makro bei bestimmten Werten: Du könntest ein Makro aufrufen, wenn der Wert in C5 oder D5 über einen bestimmten Schwellenwert steigt:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Range("C5:D5")) Is Nothing Then
           If Range("C5").Value > 10 Or Range("D5").Value > 10 Then
               Call MeinMakro
           End If
       End If
    End Sub

Tipps für Profis

  • Verwende die Intersect-Funktion, um präzise zu steuern, welche Zellen überwacht werden.
  • Halte den Code übersichtlich und dokumentiere wichtige Abschnitte, um die Wartung zu erleichtern.
  • Nutze Application.EnableEvents = False, um zu verhindern, dass sich das worksheet_change-Ereignis selbst rekursiv auslöst, während du Änderungen vornimmst.

FAQ: Häufige Fragen

1. Wie kann ich das worksheet_change-Ereignis für mehrere Zellen verwenden?
Du kannst die Intersect-Funktion mit einem Bereich verwenden, der mehrere Zellen umfasst, z.B. Range("A1:D5").

2. Ist es möglich, das worksheet_change-Ereignis nur bei bestimmten Bedingungen auszulösen?
Ja, du kannst Bedingungen in deinem Code einfügen, um das Ereignis nur auszulösen, wenn die gewünschten Kriterien erfüllt sind.

3. Kann ich eine Excel-Formel verwenden, um ein Makro auszulösen?
Direkt aus einer Formel heraus ist dies nicht möglich. Du musst VBA verwenden, um die Logik zu implementieren, die eine Makroausführung basierend auf Zelländerungen oder Berechnungen ermöglicht.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige