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

Makro erst nach vollst. Berechnung ausführen

Forumthread: Makro erst nach vollst. Berechnung ausführen

Makro erst nach vollst. Berechnung ausführen
14.08.2018 10:20:54
Christian
Hallo,
gibt es eine Art Befehl, welcher ein bestimmten Teil eines Makro - welches per Click auf einen CB ausgeführt wird - erst ausführt, wenn die Excel-Arbeitsmappe komplett berechnet wurde?
Teil1 meines Makros zwingt die Arbeitsmappe zum Berechnen und Teil2 zeigt die Ergebnisse in einer Listbox.
Leider sind die Berechnungen von Teil1 manchmal noch gar nicht abgeschlossen und werde somit nicht vollständig in der Listbox dargestellt.
Gibt es einen Befehl, welchen ich nach Teil1 einbauen kann um sicherzustellen, dass Teil2 erst ausgeführt wird, wenn die Arbeitsmappe komplett berechnet wurde?
Hoffe es ist verständlich.
Würde mich über Hilfe sehr freuen.
MfG,
Christian
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Makro erst nach vollst. Berechnung ausführen
14.08.2018 11:09:23
niclaus
Hallo Christian
OnTime wäre eine Variante dafür.
Dazu muss das Makro in zwei Makros aufgeteilt werden.
Sub makro1()
'dies und das
RefreshAll ' oder was auch immer
Application.OnTime Now + TimeValue("00:00:05"), "makro2"
' 5 Sekunden Ausführungszeit
End Sub

Sub makro2
'dies und das
End Sub
Wichtig! Das zweite Makro wird nicht mit Call aufgerufen! Es muss am Ende der OnTime-Zeile in Anführungszeichen gesetzt werden!
Ich hoffe, das hilft Dir. Grüsse Niclaus
Anzeige
AW: Makro erst nach vollst. Berechnung ausführen
14.08.2018 11:30:03
MatthiasG
Hallo Christian,
das sollte mit dieser Schleife funktionieren:

Do
DoEvents
Loop Until Application.CalculationState = xlDone

Gruß Matthias
Anzeige
Anzeige

Infobox / Tutorial

Makro erst nach vollständiger Berechnung ausführen


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass ein Excel-Makro erst nach der vollständigen Berechnung der Arbeitsmappe ausgeführt wird, kannst Du die folgenden Schritte befolgen:

  1. Teile Dein Makro in zwei separate Teile. Der erste Teil wird die Berechnung durchführen, der zweite Teil wird die Ergebnisse verarbeiten.

  2. Nutze den Befehl Application.OnTime, um das zweite Makro zeitverzögert auszuführen. Hier ist ein Beispiel:

    Sub makro1()
       ' Berechnung ausführen
       RefreshAll ' oder andere Berechnungsbefehle
       Application.OnTime Now + TimeValue("00:00:05"), "makro2" ' 5 Sekunden Verzögerung
    End Sub
    
    Sub makro2()
       ' Ergebnisse in der Listbox anzeigen
    End Sub
  3. Stelle sicher, dass das zweite Makro nicht mit Call aufgerufen wird, sondern am Ende der OnTime-Zeile in Anführungszeichen steht.


Häufige Fehler und Lösungen

  • Problem: Das Makro zeigt unvollständige Daten in der Listbox an.

    • Lösung: Stelle sicher, dass Du die Berechnung vor dem Aufruf des zweiten Makros durchführst. Nutze die Application.OnTime Methode, um eine Verzögerung einzubauen.
  • Problem: Fehler in der Syntax des Makros.

    • Lösung: Überprüfe die Schreibweise und die Struktur des Codes. Achte darauf, dass alle Makros korrekt deklariert sind.

Alternative Methoden

Eine andere Möglichkeit, um sicherzustellen, dass alle Berechnungen abgeschlossen sind, ist die Verwendung einer Schleife. Hier ist ein Beispiel:

Do
    DoEvents
Loop Until Application.CalculationState = xlDone

Diese Schleife wartet, bis der Berechnungsstatus von Excel auf xlDone wechselt, bevor das nächste Makro ausgeführt wird. Dies kann besonders nützlich sein, wenn Du sicherstellen möchtest, dass alle Daten vollständig sind, bevor Du mit der Verarbeitung fortfährst.


Praktische Beispiele

Angenommen, Du möchtest die Berechnung von Makronährstoffen in einer Excel-Tabelle durchführen und die Ergebnisse in einer Listbox anzeigen. Hier ist ein einfaches Beispiel:

Sub berechneMakronährstoffe()
    ' Berechnung der Nährstoffe
    RefreshAll
    Application.OnTime Now + TimeValue("00:00:05"), "zeigeErgebnisse"
End Sub

Sub zeigeErgebnisse()
    ' Ergebnisse in einer Listbox anzeigen
    ListBox1.AddItem "Protein: " & Cells(1, 1).Value
    ListBox1.AddItem "Kohlenhydrate: " & Cells(1, 2).Value
    ListBox1.AddItem "Fette: " & Cells(1, 3).Value
End Sub

Dieses Beispiel zeigt, wie Du ein Makro zur Berechnung von Makronährstoffen verwenden kannst und die Ergebnisse nach einer kurzen Verzögerung in einer Listbox anzeigst.


Tipps für Profis

  • Nutze DoEvents innerhalb von Schleifen, um die Benutzeroberfläche reaktionsfähig zu halten, während Excel Berechnungen durchführt.
  • Experimentiere mit der Verzögerungszeit in Application.OnTime, um die besten Ergebnisse für Deine spezifischen Berechnungen zu erzielen.
  • Teste Deine Makros regelmäßig, um sicherzustellen, dass sie unter verschiedenen Bedingungen funktionieren.

FAQ: Häufige Fragen

1. Wie lange sollte ich warten, bevor ich das zweite Makro aufrufe? Die optimale Wartezeit hängt von der Größe Deiner Daten und der Komplexität der Berechnungen ab. In vielen Fällen sind 5 Sekunden ausreichend, aber Du kannst die Zeit anpassen.

2. Kann ich die Schleife auch ohne DoEvents verwenden? Ja, Du kannst die Schleife ohne DoEvents verwenden, aber dies kann dazu führen, dass Excel nicht mehr reagiert, während die Berechnungen abgeschlossen werden. Es wird empfohlen, DoEvents zu verwenden, um die Benutzeroberfläche reaktionsfähig zu halten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige