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

Forumthread: Calculate-Ereignis auslösende Zelle ermitteln

Calculate-Ereignis auslösende Zelle ermitteln
08.06.2004 15:02:23
Peter
Hallo Excel-Freunde,
Wie kann ich die R- und C-Werte (Row & Column) einer Zelle, die gerade ein calculate-Ereignis ausgelöst hat, in Variablen schreiben.
Weiß jemand bescheid?
Anzeige
AW: Calculate-Ereignis auslösende Zelle ermitteln
Ulf
Wodurch wird denn das Ereignis ausgelöst? Es muss sich ja irgendwas an der
Mappe oder dem Sheet ändern, damit neu berechnet wird.
Ulf
Hier ein einfaches Beispiel
Peter
In Zelle A1 steht z.B. die Formel "=B1*2" und in Zelle A2 die Formel "=B2*2".
Je nachdem ob ich jetzt entweder in B1 oder in B2 einen neuen Wert eingebe, wird auch der Wert entweder von Zelle A1 oder von Zelle A2 neu berechnet.
In beiden Fällen wird damit ein worksheet_calculate Ereignis erzeugt, welches mir eine Messagebox "Der Wert in Zelle: (Zeile 2, Spalte 1) wurde soeben neu berechnet!" liefern soll wenn in B2 ein neuer Wert eingegeben wurde (entsprechend anders natürlich wenn in B1 ein neuer Wert eingegeben wurde).
Verständlich?
Anzeige
AW: Hier ein einfaches Beispiel
Ulf
Frag im Change- Ereignis die direkte Nachfolgerzelle ab, das muss für dein
Beispiel die sein, die die Berechnung auslöst.
Ulf
AW: Hier ein einfaches Beispiel
Peter
Klingt gut!
Mit welchen Befehlen krieg' ich das hin?
Ein kurzer Script wäre gut!!
AW: Hier ein einfacher Code
Ulf
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim dd As Range, c As Range
If Target.Count > 1 Then Exit Sub
On Error GoTo errH
Set dd = Target.DirectDependents
For Each c In dd.Cells
MsgBox c.Address(0, 0)
Next
Exit Sub
errH:
End Sub

Ulf
Anzeige
AW: Hier ein einfacher Code
Peter
Vielen Dank Ulf !
Das ist ziemlich genau was ich suchte !!!
Ich frage mich jetzt nur noch ob das gleiche mit einer Worksheet_Calculate-Routine erzielt werden kann. Der Unterschied zwischen dem Change- und dem Calculate-Ereignis ist zwar klein ... aber fein!
AW: Calculate-Ereignis auslösende Zelle ermitteln
ChrisL
Hi Peter
Wird eine Zelle geändert (Worksheet_Change resp. Target) dann wir ein Calculate (Neuberechnung) der gesamten Tabelle ausgelöst. Excel berechnet sämtliche Zellen der Tabelle neu. Das Calculate Ereignis kennt somit kein "Target".
Gruss
Chris
Anzeige
AW: Calculate-Ereignis auslösende Zelle ermitteln
Peter
Danke für die Erklärung Chris...klingt einleuchtend!
Ich hatte mir auch schon fast sowas gedacht!!!
Vielleicht fällt jemandem trotzdem eine Lösung bzw. einen workaround für die Aufgabenstellung ein?
Im Prinzip suche ich also die Position (Zeile/Spalte) derjenigen Zelle, die letzten Endes das Worksheet_Calculate-Ereignis tatsächlich ausgelöst hat. Irgendeine Zelle muß doch irgendwie "als Erste" dieses Ereignis erzeugen, oder?
Anzeige
AW: Calculate-Ereignis auslösende Zelle ermitteln
ChrisL
Hi Peter
Wenn du die Frage so formulierst ist es ganz einfach... jede Änderung einer Zelle löst ein Calculate-Ereignis aus, folglich kannst du das Change-Ereignis Abfangen.
Bezogen auf dein Beispiel von vorhin könntest du einschränken auf Spalte A.
If Target.Column = 1 Then MsgBox "Änderung in Zelle A" & Target.Row
Gruss
Chris
Anzeige
AW: Calculate-Ereignis auslösende Zelle ermitteln
09.06.2004 08:45:10
Thomas
Grüezi Chris
Darf ich mich hier kurz einklinken?
Bei der Veränderung einer Zelle durch eine Neueigabe wird mitnichten die ganze Tabelle neu berechnet.
Excel baut eine sogenannte 'Calculate-Chain' auf, welche alle von der Eingabe-Zelle abhängigen Zellen beinhaltet, und läuft diese dann durch.
Zellen mit Formeln die sich *nicht* auf die veränderte Zelle beziehen (sei es direkt oder indirekt über andere Formeln) werden nich neu berechnet - dazu besteht ja auch keine Veranlassung.
Auf diese Weise wird die Berechnungszeit im Minimalbereich gehalten.
Mit freundlichen Grüssen
Thomas Ramel
- MVP für Microsoft-Excel -
[Win XP Pro SP-1 / xl2000 SP-3]
Anzeige
AW: Calculate-Ereignis auslösende Zelle ermitteln
ChrisL
Salut Thomas
Danke für die Erklärung, man lernt nie aus.
Aber bezogen auf die Frage siehst du auch keine Möglichkeit, aufgrund des Calculate Ereignisses die geänderte Zelle zu eruieren oder doch?
Herzliche Grüsse
Chris
"Calculate-Chain"
Peter
Moin zusammen,
Genau!!! "Calculate-Chain" ist das Stichwort!
Mich würde jetzt interessieren ob es möglich ist, sich diese Kette von "betroffenen" Zellen anhand einer Worksheet_Calculate-Routine (in der richtigen Reihenfolge) angeben zu lassen.
In etwa so, wie es mit der Worksheet_Change-Routine von Ulf - etwas weiter oben - mit Target.DirectDependents wunderbar klappt.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zelle ermitteln, die ein Calculate-Ereignis auslöst


Schritt-für-Schritt-Anleitung

Um die R- und C-Werte (Row und Column) einer Zelle zu ermitteln, die ein Calculate-Ereignis in Excel auslöst, kannst Du den folgenden VBA-Code verwenden:

  1. Öffne Microsoft Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle im Projekt-Explorer das gewünschte Arbeitsblatt aus (z.B. "Sheet1").
  3. Füge den folgenden Code in das Codefenster ein:
Private Sub Worksheet_Calculate()
    Dim cell As Range
    Dim dependentCells As Range
    Set dependentCells = Me.Cells.SpecialCells(xlCellTypeFormulas)

    For Each cell In dependentCells
        If cell.HasFormula Then
            MsgBox "Die Zelle " & cell.Address & " wurde neu berechnet!"
        End If
    Next cell
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Ändere Werte in Zellen, die Formeln enthalten, um das Calculate-Ereignis auszulösen.

Dieser Code nutzt das Worksheet_Calculate-Ereignis, um alle abhängigen Zellen zu ermitteln. Beachte, dass dies in Excel 2010 oder später ausgeführt werden sollte.


Häufige Fehler und Lösungen

  • Fehler: Das Calculate-Ereignis wird nicht ausgelöst.

    • Lösung: Stelle sicher, dass sich die Berechnungseinstellungen auf "Automatisch" gesetzt sind (unter Formeln > Berechnungsoptionen > Automatisch).
  • Fehler: Keine Meldung wird angezeigt.

    • Lösung: Überprüfe, ob die Zellen tatsächlich Formeln enthalten. Der Code funktioniert nur für Zellen mit Formeln.

Alternative Methoden

Eine alternative Methode, um das Verhalten von target.calculate zu nutzen, wäre die Verwendung des Worksheet_Change-Ereignisses:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Columns("B")) Is Nothing Then
        MsgBox "Änderung in Zelle " & Target.Address
    End If
End Sub

Dieser Code zeigt eine MessageBox an, wenn eine Änderung in Spalte B erfolgt. Es ist eine einfache Möglichkeit, um zu erfahren, welche Zelle eine Änderung ausgelöst hat und damit das Calculate-Ereignis beeinflusst.


Praktische Beispiele

  1. Beispiel für die Verwendung von Worksheet_Calculate:

    • Angenommen, Du hast in Zelle A1 die Formel =B1*2. Ändere den Wert in B1 und beobachte, wie das Calculate-Ereignis ausgelöst wird und die Nachricht angezeigt wird.
  2. Beispiel für die Verwendung von Worksheet_Change:

    • Ändere den Wert in Zelle B1, und Du erhältst eine Meldung über die Änderung in der Zelle.

Tipps für Profis

  • Nutze Application.CalculationState, um den Status der Berechnung zu überprüfen, bevor Du das Calculate-Ereignis verarbeitest.
  • Vermeide unnötige Berechnungen, indem Du nur spezifische Zellen oder Bereiche beobachtest, anstatt die gesamte Arbeitsmappe.

FAQ: Häufige Fragen

1. Kann ich auch mehrere Zellen gleichzeitig überwachen? Ja, Du kannst das Target-Objekt im Worksheet_Change-Ereignis verwenden, um Änderungen in mehreren Zellen zu erfassen.

2. Wie kann ich sicherstellen, dass der Code nur in bestimmten Zellen ausgeführt wird? Verwende die Intersect-Funktion, um sicherzustellen, dass der Code nur für spezifische Zellen oder Bereiche ausgeführt wird.

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