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

Forumthread: Worksheet_Calculate auf einzelnen Bereich anwenden

Worksheet_Calculate auf einzelnen Bereich anwenden
Frank
Hallo zusammen,
ich möchte das Ereignis Worksheet_Calculate nur dann auslösen, wenn sich eine bestimmte Zelle im Worksheet ändert, nicht bei jeder Kalkulation im Worksheet. Ich möchte also quasi ein Target vergeben wie bei Worksheet_change.
Geht das?
Vielen Dank,
Frank
Anzeige

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

Betreff
Benutzer
Anzeige
AW: Worksheet_Calculate auf einzelnen Bereich anwenden
15.01.2010 14:36:14
Josef
Hallo Frank,
stell die Berechnung auf manuell und kopiere diesen Code in das Modul der Tabelle.
' **********************************************************************
' Modul: Tabelle2 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address(0, 0) = "A1" Then Me.Calculate
End Sub

Gruß Sepp

Anzeige
AW: Worksheet_Calculate auf einzelnen Bereich anwenden
15.01.2010 14:40:54
Frank
Hm, Berechnung auf "manuell" stellen, wird nicht gehen, da in dem Blatt sehr viel gerechnet wird...Und das soll auch automatisch weiter erhalten bleiben. Das Ereignis soll aber eben nur dann ausgelöst werden, wenn sich etwas in einer bestimmten Zelle (oder einem bestimmten Bereich) durch Kalkulation ändert.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Worksheet_Calculate auf einzelnen Bereich anwenden


Schritt-für-Schritt-Anleitung

Um das Ereignis Worksheet_Calculate nur für einen bestimmten Bereich oder eine bestimmte Zelle auszulösen, kannst du den folgenden VBA-Code verwenden. Dieser Code sollte im entsprechenden Arbeitsblatt-Modul eingefügt werden:

Private Sub Worksheet_Calculate()
    If Range("A1").Value <> "" Then
        ' Hier kannst du den Code einfügen, der bei der Berechnung ausgeführt werden soll
        MsgBox "Die Zelle A1 hat sich geändert!"
    End If
End Sub
  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Suche im Projekt-Explorer das Arbeitsblatt, für das du das Ereignis anpassen möchtest.
  3. Doppelklicke auf das Arbeitsblatt, um das Codefenster zu öffnen.
  4. Füge den obigen Code in das Codefenster ein.
  5. Schließe den VBA-Editor und teste die Funktion.

Häufige Fehler und Lösungen

  • Fehler: Worksheet_Calculate wird nicht ausgelöst.

    • Lösung: Stelle sicher, dass die Berechnungen in Excel auf 'Automatisch' eingestellt sind. Gehe zu Formeln > Berechnungsoptionen und wähle Automatisch.
  • Fehler: Das Skript funktioniert nicht für die gewünschte Zelle.

    • Lösung: Überprüfe, ob die korrekte Zelle im Code angegeben ist (z.B. "A1"). Ändere die Adresse entsprechend.

Alternative Methoden

Wenn du nicht mit Worksheet_Calculate arbeiten möchtest, kannst du auch Worksheet_Change verwenden, um Änderungen in einem bestimmten Bereich zu überwachen. Hier ist ein Beispiel:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
        ' Hier wird der Code ausgeführt, wenn sich A1 ändert
        MsgBox "Die Zelle A1 hat sich geändert!"
    End If
End Sub

Mit dieser Methode wird der Code nur ausgeführt, wenn die Zelle A1 direkt verändert wird, im Gegensatz zur Berechnung.


Praktische Beispiele

Ein praktisches Beispiel für die Nutzung von Target.Calculate könnte so aussehen:

Private Sub Worksheet_Calculate()
    Dim rng As Range
    Set rng = Range("B1:B10") ' Der Bereich, der überwacht wird

    If Application.WorksheetFunction.CountA(rng) > 0 Then
        rng.Calculate ' Berechnung nur für den spezifischen Bereich
    End If
End Sub

In diesem Beispiel wird der Bereich B1:B10 nur berechnet, wenn er nicht leer ist.


Tipps für Profis

  • Nutze Application.EnableEvents = False, um zu verhindern, dass andere Ereignisse während der Berechnung ausgelöst werden. Vergiss nicht, es wieder auf True zu setzen.
  • Verwende Debug.Print, um Zwischenergebnisse zu überprüfen und die Ausführung zu verfolgen.
  • Experimentiere mit verschiedenen Bedingungen in deinem Code, um die Funktionsweise zu optimieren.

FAQ: Häufige Fragen

1. Kann ich mehrere Zellen gleichzeitig überwachen? Ja, du kannst Intersect verwenden, um mehrere Zellen zu überwachen. Beispiel:

If Not Intersect(Target, Me.Range("A1:C3")) Is Nothing Then

2. Was passiert, wenn ich Worksheet_Calculate und Worksheet_Change kombiniere? Du kannst beide Ereignisse kombinieren, um unterschiedliche Aktionen basierend auf Änderungen und Berechnungen in deinem Arbeitsblatt auszuführen. Achte jedoch darauf, die Logik klar zu strukturieren, um endlose Schleifen zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige