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

Forumthread: Refreshall und Calculate zu schnell fertig

Refreshall und Calculate zu schnell fertig
Norman
Hallo alle,
Ich rufe aus einem Workbook (1) per Application.Run eine Sub-Routine eines anderen Workbooks (2) auf. In der Routine des "anderen" Workbooks (2) wird nur ThisWorkbook.Refreshall aufgerufen. RefreshAll kehrt sehr schnell zurück, was auch ok ist. Dann fängt Excel für (2) mit der Zellaktualisierung an, die seeeeeeehr lange dauert. Derweil wird aber die Sub-Funktion aus (2), die ja inzwischen fertig bearbeitet ist, beendet, was zur Folge hat, dass nach (1) zurückgesprungen wird. Dort rufe ich jetzt (2).Save auf (in der irrigen Annahme, dass (2) mit der Arbeit fertig ist) und erhalte eine Messagebox mit dem Hinweis: "Diese Aktion (hier save) wird eine anstehende Datenaktualisierung abbrechen. Fortfahren?". Den hintergrund verstehe ich natürlich, ich will die Datei speichern, obwohl noch nicht alle Berechnungen durchgeführt wurden. Jetzt endlich die Frage (puuuuh): Kann ich für (2) abfragen, ob die Zellberechnung noch am laufen ist?
Viele Grüße
Norman
Anzeige
AW: Refreshall und Calculate zu schnell fertig
Nepumuk
Hallo Norman,
versuch es mal so:
If ThisWorkbook.CalculationVersion = 0 Then 'Warten bis Berechnung fertig
Bin mir aber nicht sicher, ob das funktioniert.
Gruß
Nepumuk
AW: Refreshall und Calculate zu schnell fertig
Norman
Hi Nepumuk,
ne, die Funktion CalculationVersion gibts unter Ecel97 nicht. Noch eine Idee?
Gruß
Norman
Anzeige
AW: Refreshall und Calculate zu schnell fertig
Uwe
Hallo Norman,
eventuell bringt 'DoEvents' nach der RefreshAll-Anweisung etwas?
Gruß Uwe
AW: Refreshall und Calculate zu schnell fertig
Norman
Die Idee kam mir auch vor 10 Minuten :) Hat aber nichts gebracht.
Gruß
Norman
AW: Refreshall und Calculate zu schnell fertig
Nepumuk
Hallo Norman,
und wenn du die Berechnung vor dem speichern automatisierst und nicht im Code auslöst?
Application.CalculateBeforeSave = True
Gruß
Nepumuk
Anzeige
AW: Refreshall und Calculate zu schnell fertig
25.04.2004 20:01:57
Norman
Wie verhext - das macht absolut Sinn! Ich habs implementiert... und es läuft immer noch nicht... Ich verstehs nicht?!?!
Gruß
Norman
AW: Refreshall und Calculate zu schnell fertig
25.04.2004 22:37:21
Norman
Hmmm, je länger ich an dem Problem arbeite um so eher glaube ich, dass das Problem durch RefreshAll auftritt. Ich habe jetzt das Calculate gänzlich ausgeschaltet, aber trotzdem wird noch irgendwas gerechnet. Könnte es sein, dass die Query noch gar nicht fertig ist? Wirklich zum Haareraufen (und ich hab doch nicht mehr viele). Bin für jede weitere Idee dankbar....
Gruß
Norman
Anzeige
HIIIIIILLLFEEE :)
25.04.2004 23:11:17
Norman
Ok, jetzt kann ichs bestätigen - RefreshAll kehrt zu früh zurück. Ein direkter Aufruf von Save nach dem RefreshAll führt zu dem oben beschriebenen Fehler. Kann das jemand nachvollziehen? Ich würde die Datei ja hochladen, aber die Queries gehen auf eine Datenbank - das wird dann sehr kompliziert. Hat jemand ähnliche Erfahrungen?
Gruß
Norman
Anzeige
AW: Refreshall und Calculate zu schnell fertig
25.04.2004 23:23:03
Norman
Rofl, jetzt schreib ich mir schon laufend selber :)
Also, das Refresh läuft technisch ab, was aber nicht abläuft ist das Updaten der Tabelle auf die sich das Refresh bezieht. Ich sehe, wie er die Daten holt, dann kommt er in meinen VBA-Code zurück und irgendwann später macht er erst das Update auf die Tabelle. Leider will ich dann schon saven und das geht schief. Ich versuch mal ein bisschen mit Wait zu spielen, aber das scheint auch nix zu bringen, da Excel selbst sich dann auch schlafen legt...
Bis gleich
Norman
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Warten auf die Aktualisierung in Excel VBA


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass die Datenaktualisierung in Excel VBA abgeschlossen ist, bevor du die nächsten Schritte ausführst, kannst du eine einfache Methode implementieren. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Verwende ThisWorkbook.RefreshAll: Dies aktualisiert alle Datenquellen in deinem Workbook.

    ThisWorkbook.RefreshAll
  2. Warte auf die Aktualisierung: Du kannst die Schleife Do While verwenden, um zu überprüfen, ob die Aktualisierung noch läuft.

    Do While Application.CalculationState <> xlDone
       DoEvents
    Loop
  3. Speichern der Datei: Nachdem die Aktualisierung abgeschlossen ist, kannst du das Workbook speichern.

    ThisWorkbook.Save

Mit diesem Code wartest du, bis die Aktualisierung in Excel abgeschlossen ist, bevor du weitere Aktionen durchführst.


Häufige Fehler und Lösungen

  • Fehler: Excel Refresh All not working
    Wenn RefreshAll nicht zu funktionieren scheint, stelle sicher, dass deine Datenquelle korrekt konfiguriert ist und dass die Abfragen keine Fehler aufweisen.

  • Fehler: Save-Abbruch-Nachricht
    Dieser Fehler tritt auf, wenn du versuchst, das Workbook zu speichern, bevor die Aktualisierung abgeschlossen ist. Verwende die oben genannten Do While-Schleife, um sicherzustellen, dass die Aktualisierung abgeschlossen ist.


Alternative Methoden

Falls die oben beschriebene Methode nicht funktioniert, kannst du auch die Application.Wait-Methode verwenden:

ThisWorkbook.RefreshAll
Application.Wait (Now + TimeValue("0:00:05")) ' Wartet 5 Sekunden
ThisWorkbook.Save

Diese Methode ist zwar weniger dynamisch, kann aber bei einfachen Anwendungsfällen nützlich sein.


Praktische Beispiele

Hier ist ein Beispiel für eine vollständige Subroutine, die die oben genannten Techniken kombiniert:

Sub RefreshAndSave()
    ' Aktualisiere alle Daten
    ThisWorkbook.RefreshAll

    ' Warten bis die Aktualisierung abgeschlossen ist
    Do While Application.CalculationState <> xlDone
        DoEvents
    Loop

    ' Speichern der Datei
    ThisWorkbook.Save
End Sub

Dieses Beispiel zeigt, wie du sicherstellen kannst, dass alle Aktualisierungen abgeschlossen sind, bevor du die Datei speicherst.


Tipps für Profis

  • Verwende Application.CalculateBeforeSave: Setze diese Eigenschaft auf True, um sicherzustellen, dass alle Berechnungen vor dem Speichern durchgeführt werden.

    Application.CalculateBeforeSave = True
  • Debugging: Wenn du Probleme mit RefreshAll hast, überprüfe die Datenverbindungen und Abfragen in deinem Workbook, um sicherzustellen, dass alles korrekt konfiguriert ist.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine Datenaktualisierungen fehlerfrei sind?
Stelle sicher, dass die Abfragen in deiner Datenquelle korrekt konfiguriert sind und teste sie manuell in Excel, bevor du sie in VBA automatisierst.

2. Warum funktioniert DoEvents nicht immer?
DoEvents ermöglicht es Excel, anderen Prozessen Zeit zu geben, aber es ist keine Garantie, dass alle Aktualisierungen abgeschlossen sind. Verwende die CalculationState-Überprüfung für eine zuverlässigere Lösung.

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