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

Forumthread: 10 sek. warten

10 sek. warten
dennis
Hallo,
ich habe schon einiges probiert, was ich hier im Forum gelesen habe, aber anscheinend passt nichts davon zu meinem Problem: ein Makro schreibt in die Spalten A - D Formeln, die einen Import von Daten bewirken. Diese Daten kopiere ich und überschreibe dann die Formeln in A - D wieder. Das hat den Grund, dass die DDE-Formeln recht prozessor-intensiv sind und ich brauche diese Daten nur einmal pro Stunde. Daher will ich jede Stunde das Makro einmal betätigen und es soll die Daten importieren und sobald ALLE Daten importiert sind, die Formeln mit den aktuellen Daten überschreiben.
Nun ist es so, dass der Datenimport ein paar Sekunden benötigt, bis alle Daten aktualisiert sind. In dieser Zeit soll das Makro 10 Sekunden warten, bevor es die Formeln mit den Daten überschreibt.
Wenn ich z.B. Application.Wait nehme, sehe ich keine Aktualisierung der Daten. Daher denke ich, dass es die beste Möglichkeit wäre, wenn ich eine 10 sekunden Schleife habe, die nur DoEvents ausführt.
Kann mir jemand sagen, wie ich das am besten löse?
Danke!
Gruß Dennis
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: 10 sek. warten
26.08.2009 19:50:41
Harry
Hi,
probier mal:
Option Explicit
Private Declare Sub Sleep Lib "Kernel32" (ByVal ms As Long)
Sub ordination()
Dim x As Integer
Do Until x = 1000
x = x + 1
Sleep 10
DoEvents
Loop
End Sub
mfg Harry
AW: 10 sek. warten
26.08.2009 20:44:06
Tino
Hallo,
teile doch dein Makro in zwei, eins für den import und eins für die Formel.
Dieses zweite startest du mittels Application.Ontime nach 10 Sekunden aus dem ersten.
Sollte bei VBA gut kein Problem sein
Gruß Tino
Anzeige
AW: 10 sek. warten
26.08.2009 21:39:13
Matthias
Hallo Dennis,
Falls der Vorgang des Datenimports die Eigenschaft Application.CalculationState beeinflusst, kannst Du auch versuchen, nicht immer 10 sec. zu warten, sondern solange, bis die Berechnungen abgeschlossen sind:

Do
DoEvents
Loop Until Application.CalculationState = xlDone
Wie gesagt, falls, das müsstest Du mal ausprobieren.
Gruß Matthias
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Datenimport in Excel VBA: Wie Du 10 Sekunden warten kannst


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne den VBA-Editor in Excel, indem Du ALT + F11 drückst. Erstelle ein neues Modul.

  2. Datenimport: Schreibe Dein Makro, das die Daten in die Spalten A-D importiert. Zum Beispiel:

    Sub DatenImport()
       ' Dein Code für den Datenimport hier
    End Sub
  3. Warten-Funktion hinzufügen: Füge eine Warten-Funktion hinzu, die 10 Sekunden wartet, bevor die Formeln überschrieben werden. Du kannst die Sleep-Funktion verwenden:

    Private Declare Sub Sleep Lib "Kernel32" (ByVal ms As Long)
    
    Sub Warten()
       Dim x As Integer
       Do Until x = 1000
           x = x + 1
           Sleep 10
           DoEvents
       Loop
    End Sub
  4. Makro kombinieren: Kombiniere beide Makros:

    Sub HauptMakro()
       DatenImport
       Warten
       ' Code zum Überschreiben der Formeln
    End Sub
  5. Makro ausführen: Führe das Hauptmakro aus, um den Datenimport und das Warten von 10 Sekunden zu testen.


Häufige Fehler und Lösungen

  • Problem: Die Daten werden nicht aktualisiert.

    • Lösung: Stelle sicher, dass Du DoEvents in der Warten-Schleife verwendest, damit Excel die Daten aktualisieren kann.
  • Problem: Das Makro läuft nicht richtig.

    • Lösung: Überprüfe, ob Du die Makros korrekt miteinander kombiniert hast.

Alternative Methoden

Eine alternative Methode ist die Verwendung von Application.OnTime, um die Ausführung des zweiten Makros nach 10 Sekunden zu planen. Hier ein Beispiel:

Sub HauptMakro()
    DatenImport
    Application.OnTime Now + TimeValue("00:00:10"), "FormelnUeberschreiben"
End Sub

Sub FormelnUeberschreiben()
    ' Code zum Überschreiben der Formeln
End Sub

Diese Methode ist besonders nützlich, wenn Du die Ausführung für eine festgelegte Zeit planen möchtest.


Praktische Beispiele

Wenn Du eine große Datenmenge importierst und die CPU stark beansprucht wird, könnte die folgende Methode hilfreich sein:

Sub DatenImport()
    ' Importiere Daten hier
    Warten
    ' Überschreibe Formeln hier
End Sub

Verwende die Warten-Funktion, um sicherzustellen, dass der Datenimport abgeschlossen ist, bevor die Formeln überschrieben werden.


Tipps für Profis

  • Nutze Application.CalculationState, um zu überprüfen, ob die Berechnungen abgeschlossen sind, anstatt eine feste Zeit zu warten. Dies kann die Effizienz Deines Makros erhöhen:

    Do
       DoEvents
    Loop Until Application.CalculationState = xlDone
  • Halte Deine Makros modular, um die Wartung und Anpassung zu erleichtern.


FAQ: Häufige Fragen

1. Wie lange kann ich in VBA warten? Du kannst die Wartezeit anpassen, indem Du den Wert in der Sleep-Funktion änderst. Achte jedoch darauf, dass zu lange Wartezeiten die Benutzererfahrung negativ beeinflussen können.

2. Was passiert, wenn ich DoEvents nicht verwende? Ohne DoEvents wird Excel während der Wartezeit nicht reagieren, was bedeutet, dass die Benutzeroberfläche nicht aktualisiert wird.

3. Ist die Verwendung von Application.OnTime besser? Ja, Application.OnTime ist oft besser für zeitgesteuerte Aufgaben, da es die Benutzeroberfläche nicht blockiert und Excel weiterhin reaktiv bleibt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige