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

getmorespeed und application.calculation

Forumthread: getmorespeed und application.calculation

getmorespeed und application.calculation
18.12.2008 09:45:00
David
Hallo zusammen,
nachdem ich mich in letzter Zeit etwas rar hier gemacht habe, nun mal wieder eine Frage.
Ich hatte mal irgendwann ein Makro "getmorespeed" hier im Forum gefunden (von Hajo, glaube ich?) und verwende dieses des Öfteren in meinem Code.
Hier für alle, die es nicht kennen:

Sub GetMoreSpeed(bYesNo As Boolean)
Application.ScreenUpdating = Not (bYesNo)
Application.EnableEvents = Not (bYesNo)
Application.Calculation = IIf(bYesNo, xlCalculationManual, xlCalculationAutomatic)
If Not bYesNo Then Calculate
End Sub


Ich war bisher der Meinung, dass der aktuelle Status von Application.Calculation mit der Option "Getmorespeed False" wieder auf den vorherigen Wert gesetzt wird.
Nun habe ich aber festgestellt, dass bei eingeschalteter manueller Berechnung und Ausführen meines Makros in der Form


Getmorespeed True
Mein Code
Getmorespeed False


hinterher die automatische Berechnung wieder eingeschaltet ist, was nicht gewollt ist.
Ich erkenne aber nicht, ob und wenn ja was ich ändern müsste, damit das funzt.
In meinem Code wird diese Option übrigens nicht angefasst (bevor jemand fragt)
Vielleicht kann mir ja jemand einen Tip geben.
Danke im Voraus.
Gruß
David

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: getmorespeed und application.calculation
18.12.2008 10:13:44
ransi
HAllo
Du solltest dafür sorgen das wenn dein Programm abstürzt, die alten Einstellungen wieder zurückgesetzt werden.
Schau dir mal diesen Code an:
Option Explicit
Dim AppCalc
Dim AppScreen
Dim AppEvents

Public Sub dein_Code()
On Error GoTo raus
Call More_speed
'Hier dein eigentlicher Code zum übertragen
'
'
'
'
raus:
Call Meine_Einstellungen
End Sub

Public Sub More_speed()
With Application
    '#######################
    'Einstellungen speichern
    AppCalc = .Calculation
    AppScreen = .ScreenUpdating
    AppEvents = .EnableEvents
    '#######################
    'Angezogene Bremsen lösen
    .Calculation = xlCalculationManual 'Berechnung auf manuell
    .ScreenUpdating = False 'Bildschirmaktualisierung aus
    .EnableEvents = False 'Ereignismakros abschalten
    '#######################
End With
End Sub

Public Sub Meine_Einstellungen()
With Application
    .Calculation = AppCalc
    .ScreenUpdating = AppScreen
    .EnableEvents = AppEvents
End With
End Sub


Der ist vom Prinzip her gleich wie:
Sub GetMoreSpeed(bYesNo As Boolean)
Es werden aber auf jedenfall die alten Einstellungen wieder gesetzt.
(und er ist leichter nachzuvollziehen ;-)
ransi
Anzeige
AW: getmorespeed und application.calculation
18.12.2008 10:20:00
David
Hallo ransi,
es geht hier zwar nicht um "abstürzenden" Code, aber prinzipiell hast du Recht. Normalerweise sorge ich auch dafür.
Deswegen ja auch das Getmorespeed am Anfang mit True und am Ende mit False.
Deine Variante funzt und ist auch leicht nachzuvollziehen, aber leider auch um einiges länger. Mich würde jedenfalls trotzdem interessieren, ob meine Variante einen Fehler enthält oder ob dieses Verhalten gewollt ist.
Deswegen lasse ich den Thread mal noch offen.
Auf jeden Fall dir schon mal vielen Dank.
Gruß
David
Anzeige
AW: getmorespeed und calculation
18.12.2008 10:18:39
Erich
Hallo David,
in deiner Funktion steht überhaupt nichts davon, dass der vorige Stand irgendwo festgehalten wird.
Diese Routine solltest du wegwerfen - auch wenn sie hier aus dem Forum ist.
Schau mal in https://www.herber.de/forum/archiv/976to980/t977234.htm
Da findest du (mit Uhrzeit 17:16:38) einen sehr viel besseren Code von Nepumuk
und ein paar Erläuterungen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: getmorespeed und calculation
18.12.2008 10:28:32
David
Hallo Erich,
genau so was habe ich gesucht, "kurz und knackig".
Danke und Gruß
David
;
Anzeige

Infobox / Tutorial

Anwendung von Application.Calculation für mehr Geschwindigkeit in Excel


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne den VBA-Editor in Excel (Alt + F11) und füge ein Modul hinzu.

  2. Code einfügen: Verwende den folgenden Code, um das GetMoreSpeed-Makro zu erstellen:

    Sub GetMoreSpeed(bYesNo As Boolean)
       Application.ScreenUpdating = Not (bYesNo)
       Application.EnableEvents = Not (bYesNo)
       Application.Calculation = IIf(bYesNo, xlCalculationManual, xlCalculationAutomatic)
       If Not bYesNo Then Calculate
    End Sub
  3. Makro aufrufen: Verwende das Makro in deinem Code, um die Berechnung zu steuern:

    GetMoreSpeed True
    ' Dein Code hier
    GetMoreSpeed False
  4. Fehlerbehandlung einfügen: Um sicherzustellen, dass die Einstellungen immer zurückgesetzt werden, füge eine Fehlerbehandlung hinzu.


Häufige Fehler und Lösungen

  • Problem: Nach dem Ausführen des Codes bleibt die automatische Berechnung aktiv, obwohl du GetMoreSpeed False aufrufst.

    • Lösung: Stelle sicher, dass der vorherige Zustand von Application.Calculation vor dem Ändern gespeichert wird. Verwende den folgenden Code:
    Dim oldCalc As XlCalculation
    oldCalc = Application.Calculation
    Application.Calculation = xlCalculationManual
    ' Dein Code hier
    Application.Calculation = oldCalc
  • Problem: Die Einstellungen werden nicht zurückgesetzt, wenn der Code abstürzt.

    • Lösung: Implementiere eine Fehlerbehandlung, um die alten Einstellungen wiederherzustellen, wie im Beispiel von ransi:
    On Error GoTo Fehlerbehandlung
    ' Dein Code hier
    Exit Sub
    Fehlerbehandlung:
    Application.Calculation = oldCalc

Alternative Methoden

Eine alternative Methode zum Steuern der Berechnung ist die Verwendung von Application.CalculationState. Du kannst überprüfen, ob die Berechnung manuell oder automatisch ist, und entsprechend handeln.

If Application.CalculationState = xlDone Then
    ' Berechnung ist abgeschlossen
End If

Für komplexere Anwendungen kannst du auch Application.Formula verwenden, um Formeln dynamisch zu ändern und die Berechnungsmethoden anzupassen.


Praktische Beispiele

  1. Erstellen eines Makros mit Fehlerbehandlung:

    Sub MeinMakro()
       Dim oldCalc As XlCalculation
       On Error GoTo Fehlerbehandlung
       oldCalc = Application.Calculation
       Application.Calculation = xlCalculationManual
       ' Dein Code hier
       Application.Calculation = oldCalc
       Exit Sub
    Fehlerbehandlung:
       Application.Calculation = oldCalc
    End Sub
  2. Verwendung der GetMoreSpeed-Funktion:

    Sub Beispiel()
       GetMoreSpeed True
       ' Intensive Berechnungen hier
       GetMoreSpeed False
    End Sub

Tipps für Profis

  • Verwende Application.Calculation = xlCalculationManual nur, wenn du viele Berechnungen durchführst. Das kann die Geschwindigkeit erheblich verbessern.
  • Speichere den Status vor Änderungen, um unerwünschte Effekte zu vermeiden.
  • Teste deinen Code gründlich, um sicherzustellen, dass alle Einstellungen korrekt zurückgesetzt werden, insbesondere bei komplexen Makros.

FAQ: Häufige Fragen

1. Warum bleibt die automatische Berechnung aktiv?
Wenn du GetMoreSpeed False aufrufst, wird die vorherige Einstellung möglicherweise nicht korrekt gespeichert. Stelle sicher, dass du den Status vor Änderungen speicherst.

2. Wie kann ich sicherstellen, dass meine Einstellungen zurückgesetzt werden?
Implementiere eine Fehlerbehandlungsroutine, um sicherzustellen, dass die ursprünglichen Einstellungen auch bei einem Fehler wiederhergestellt werden.

3. Gibt es eine einfachere Methode, um die Berechnung zu steuern?
Ja, du kannst auch die Application.CalculationState-Eigenschaft verwenden, um den Status der Berechnung zu überprüfen und entsprechend zu handeln.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige