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

calculate auslösen

Forumthread: calculate auslösen

calculate auslösen
Jörg-HH
Hallo zusammen
ich muß im Code, der weitgehend ohne AutoBerechnung läuft, an einer Stelle eine Berechnung auslösen, weil es sonst Murks gibt. Das löse ich zZt etwas stümperhaft durch einmal Ein- und wieder Ausschalten der AutoBerechnung:
Application.Calculation = xlCalculationAutomatic
Application.Calculation = xlCalculationManual
Das verursacht dann gleich zweimal den Zeitbedarf, der für das Umschalten erforderlich ist (was sich bei meiner großen Datei deutlich bemerkbar macht)
Geht das vielleicht auch eleganter mit nur einem Befehl, so daß ich auch nur einmal den Zeitbedarf fürs Schalten habe?
Grüße - Jörg
Anzeige

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

Betreff
Benutzer
Anzeige
AW: calculate auslösen
11.11.2011 16:11:37
Beverly
Hi Jörg,
einfach: Calculate


AW: calculate auslösen
11.11.2011 16:13:00
hary
Hallo Joerg
Am Anfang ausschalten.
dann reicht:

Calculate

gruss hary
=WENN(JETZT()>0;"";"") und ActiveSheet.Calculate
11.11.2011 16:16:12
NoNet
Hallo Jörg,
füge in eine "versteckte" Zelle einfach folgende Funktion ein : =WENN(JETZT()>0;"";"")
Jetzt kannst Du per VBA die Berechnung durchführen : ActiveSheet.Calculate
Durch die Funktion in der "versteckten" Zelle werden folgende Ereignisse ausgelöst :
Private Sub Worksheet_Calculate() 'im Codemodul des Tabellenblattes
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) 'Im Klassenmodul "DieseArbeitsmappe"
Gruß, NoNet
Anzeige
hmm...
11.11.2011 16:34:54
Jörg-HH
Hi NoNet
im ActiveSheet soll die Berechnung gar nicht stattfinden. Dort gibt es nur eine Stelle, an der ein Fehler auftritt, wenn nicht vorher in einem anderen Blatt was geradegebogen wird. Die kann ich durch calculate erreichen.
Was ist denn technisch der Unterschied zwischen deinem Vorschlag und den beiden anderen mit calculate ohne Zusätze?
Jörg
Anzeige
Ob Calculate oder ActiveSheet.Calculate ist egal
11.11.2011 16:54:32
NoNet
Hallo Jörg,
es spielt (fast) keine Rolle, ob Du Calculate (gesamte Arbeitsmappe) oder nur ActiveSheet.Calculate (also nur das aktuelle Blatt) verwendest. entscheidend ist allenfalls, ob das aktuelle Blatt überhaupt berechenbare Zellen (also Zellen mit Formeln/Funktionen/Bezüge) beinhaltet und/oder ob in den anderen Blättern evtl. umfangreiche und zeitraubende Berechnungen (z.B. grosse MATRIX-Funktionen) enthalten sind.
Ich hatte es so verstanden, dass das aktuelle Blatt keine berechenbaren Zellen beinaltet und daher das Ereignis "Worksheet_Calculate" gar nicht ausgelöst werden kann - daher auch der Tipp mit der (ansonsten überflüssigen) Funktion mit JETZT(), da diese immer aktuell berechnet wird (siehe "volatile Funktion").
Da in Deinem Fall die Berechnung auf einem "anderen Blatt" (z.B. "Tabelle2") durchgeführt werden soll, muss die Anweisung lauten : Sheets("Tabelle2").Calculate
Das bewirkt, dass das Ereignis "WorkSheet_Calculate()" im Klassenmodul "Tabelle2" ausgeführt wird, in dem Du die Veränderung auf dem aktuellen Blatt durchführen kannst, z.B. :
'Code in das Klassenmodul zu Tabelle2 - aktuelles Blatt ist z.B. "Tabelle1" :
Private Sub Worksheet_Calculate()
ActiveSheet.[A5] = "Geändert am : " & Format(Now, "DD.MM.YYYY hh:mm:ss")
End Sub
Ohne berechnete Zellen auf dem zu berechnenden Blatt wird das Makro übrigens NICHT ausgeführt !
Gruß, NoNet
Anzeige
Wenn du ohnehin mit KalkModus=manuell ...
11.11.2011 17:23:12
Luc:-?
…arbeitest, Jörg,
schlage ich dir vor, was ich in solchen Fällen mache:
1. KalkModus abfragen — davon …
2. abhängig machen, ob und was unbedingt neu berechnet wdn sollte und schließlich …
3. für diese Fälle ggf eine eigene Berechnungsproz schreiben, die die Bereiche eines Blattes in der notwendigen richtigen Reihenfolge berechnet, denn mit der Methode Calculate kann man auch einzelne Bereiche eines Blattes berechnen, was unschwer daran zu erkennen ist, dass der VBE-Intellisense und der VBE-Objekt-Manager sie auch als Methode des Range-Objekts ausweisen.
Gruß Luc :-?
Anzeige
...Stoff zum Nachdenken...
11.11.2011 18:19:49
Jörg-HH
Hallo zusammen
eure Antworten beantworten mir mehr, als ich überhauot gefragt hatte. Jetzt habe ich nämlich den Hinweis, wie ich meine lahme Riesendatei beschleunigen kann - und zwar indem ich dafür sorge, daß Berechnungen nur noch da stattfinden, wo sie nötig sind, und nicht mehr in allen 130 Blättern gleichzeitig :-) ... wird wohl viel Arbeit machen, das nachträglich einzubauen...
Danke für die Nachhilfe!
Jörg
Anzeige
Bitte seeehr! ;-) Gruß owT
11.11.2011 22:19:12
Luc:-?
:-?
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Berechnungen in Excel effizient auslösen mit VBA


Schritt-für-Schritt-Anleitung

Um eine Berechnung in Excel effizient über VBA auszulösen, kannst Du die folgende Vorgehensweise nutzen:

  1. Kalkulationsmodus abfragen: Überprüfe, ob der Kalkulationsmodus auf manuell eingestellt ist. Du kannst dies mit folgendem Code überprüfen:

    If Application.Calculation = xlManual Then
       ' Kalkulationsmodus ist manuell
    End If
  2. Berechnung durchführen: Um eine Berechnung durchzuführen, verwende den Befehl Calculate oder ActiveSheet.Calculate, je nachdem, ob Du die gesamte Arbeitsmappe oder nur das aktive Blatt berechnen möchtest. Hier ist ein einfaches Beispiel:

    ActiveSheet.Calculate
  3. Ereignisse nutzen: Wenn Du spezifische Berechnungen anstellen möchtest, kannst Du Events wie Private Sub Worksheet_Calculate() verwenden, um auf Änderungen zu reagieren.

  4. Optimierung: Reduziere die Anzahl der Berechnungen, indem Du nur die Blätter berechnest, die tatsächlich Formeln enthalten. Das kannst Du wie folgt umsetzen:

    Sheets("Tabelle2").Calculate

Häufige Fehler und Lösungen

  • Fehler: Worksheet_Calculate wird nicht ausgelöst.

    • Lösung: Stelle sicher, dass das aktive Blatt über berechenbare Zellen verfügt. Ansonsten wird das Ereignis nicht ausgelöst.
  • Fehler: Langsame Berechnung bei großen Dateien.

    • Lösung: Verwende Application.Calculation = xlManual und führe Berechnungen nur bei Bedarf aus, um die Effizienz zu steigern.

Alternative Methoden

Es gibt verschiedene Alternativen, um Berechnungen in Excel durchzuführen:

  • VBA-Methoden: Nutze Application.Calculate oder Application.CalculateFull, um eine vollständige Berechnung aller offenen Arbeitsmappen durchzuführen.

  • Versteckte Zellen: Füge in eine versteckte Zelle die Formel =WENN(JETZT()>0;"";"") ein, um Berechnungen auszulösen, ohne dass das aktive Blatt betroffen ist.

  • Bereichsberechnung: Du kannst auch spezifische Bereiche berechnen, indem Du den Range-Befehl verwendest:

    Range("A1:A10").Calculate

Praktische Beispiele

  1. Einfache Berechnung:

    Sub BerechnungDurchführen()
       Application.Calculation = xlManual
       Sheets("Tabelle1").Calculate
    End Sub
  2. Berechnung bei Änderungen:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
           Me.Calculate
       End If
    End Sub
  3. Komplexe Berechnung:

    Sub KomplexeBerechnung()
       If Application.Calculation = xlManual Then
           Application.Calculation = xlAutomatic
           Application.Calculate
           Application.Calculation = xlManual
       End If
    End Sub

Tipps für Profis

  • Verwende volatile Funktionen: Funktionen wie JETZT() sind volatil und sorgen dafür, dass das Blatt immer neu berechnet wird, auch wenn sich andere Zellen nicht ändern.

  • Minimiere die Nutzung von Calculate: Überlege, ob Du wirklich die gesamte Arbeitsmappe berechnen musst oder ob eine spezifische Berechnung ausreicht.

  • Nutze Debugging-Tools: Verwende den Debugger in VBA, um langsame Bereiche zu identifizieren und die Performance zu optimieren.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Calculate und ActiveSheet.Calculate? Beide Methoden lösen Berechnungen aus, jedoch berechnet Calculate die gesamte Arbeitsmappe, während ActiveSheet.Calculate nur das aktive Blatt berücksichtigt.

2. Wie kann ich Berechnungen manuell auslösen? Du kannst den Kalkulationsmodus auf manuell einstellen mit Application.Calculation = xlManual und dann gezielt Berechnungen durch Calculate oder ActiveSheet.Calculate auslösen.

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