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

Forumthread: Auf Fertigstellung der Aktualisierung warten

Auf Fertigstellung der Aktualisierung warten
Ralf
Hallo Forum,
ich möchte eine Tabelle mit Aktienkursen aus dem Internet nachträglich mit Makro formatieren.
Dummerweise wartet das Makro nicht auf die Fertigstellung der Datenaktualisierung. Die Aktualisierung wird angestossen, dann die Formatierung ausgeführt, dann die Aktualisierung abgeschlossen und die Formatierung ist wieder in der alten Form.
Sub Daten_aktualisieren()
'--- Bildschirmaktualisierung aus
Application.ScreenUpdating = False
'--- Daten aktualisieren und warten bis Aktualsierung abgeschlossen ist
Sheets("Intraday").Select
ActiveWorkbook.RefreshAll
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
If Application.Wait(Now + TimeValue("0:00:10")) Then
MsgBox "Time expired"
End If
'--- Tabellenblatt Intraday aktualisieren
End Sub
Hat jemand einen Tipp, um die Reihenfolge einzuhalten? Wahrscheinlich ist das Warten im Makro nicht richtig.
Viele Grüße
Ralf
Anzeige
AW: Auf Fertigstellung der Aktualisierung warten
13.04.2011 17:10:26
Nepumuk
Hallo Ralf,
dazu nutzen wir den AfterRefresh-Event des QueryTable-Objektes. Ich hab dir mal eine Beispielmappe gemacht.
https://www.herber.de/bbs/user/74381.xlsm
Gruß
Nepumuk
AW: Auf Fertigstellung der Aktualisierung warten
14.04.2011 06:44:27
Ralf
Hallo Nepomuk,
ich habe nach bestem Wissen und Gewissen Deine Logik in meine Tabelle eingebaut.
Die Aktualisierung wird durchgeführt, die Formatierung anschließend jedoch nicht.
Vielleicht kannst Du Dir das mal anschauen.

Die Datei https://www.herber.de/bbs/user/74391.xlsm wurde aus Datenschutzgründen gelöscht


Danke.
Viele Grüße
Ralf
Anzeige
AW: Auf Fertigstellung der Aktualisierung warten
14.04.2011 09:09:43
Nepumuk
Hallo Ralf,
naja, die Tabelle heißt Tabelle1 in VBA, Intraday ist der Name auf der Exceloberfläche. Außerdem hab ich dein Formatierungs-Makro noch ein bisschen geändert. Zudem musste ich die Eigenschaft der Abfragen ändern, die wurden beim öffnen nämlich schon ausgeführt bevor die Klasse initialisiert war. Jetzt wird sie beim öffnen nach der Initialisierung der Klasse gestartet.
https://www.herber.de/bbs/user/74395.xlsm
Gruß
Nepumuk
Anzeige
AW: Auf Fertigstellung der Aktualisierung warten
14.04.2011 09:29:42
Nepumuk
Hallo Ralf,
ich hab mich gerade gewundert warum das plötzlich nicht immer klappt. Die Abfrage welche die Formatierung auslösen soll hat nicht den Index 1 sondern 2. Also diese Routine in der Tabelle Intraday:
Friend Sub Init_Class()
    Set mobjQueryTable = New clsQueryTable
    Set mobjQueryTable.prpQueryTable = Tabelle1.QueryTables(1)
End Sub

so ändern:
Friend Sub Init_Class()
    Set mobjQueryTable = New clsQueryTable
    Set mobjQueryTable.prpQueryTable = QueryTables(2)
End Sub

Gruß
Nepumuk
Anzeige
AW: Auf Fertigstellung der Aktualisierung warten
14.04.2011 09:34:47
Ralf
Hallo Nepomuk,
gerade wurde zumindest kurzzeitig die Formatierung durchgeführt. Das passiert mit der Änderung nicht mehr.
Gruß
Ralf
AW: Auf Fertigstellung der Aktualisierung warten
14.04.2011 12:11:53
Ralf
Hallo Nepomuk,
ja, natürlich, habe ich alles brav geändert.
Gruß
Ralf
AW: Auf Fertigstellung der Aktualisierung warten
14.04.2011 12:19:04
Nepumuk
Hallo Ralf,
das funktioniert nach der Änderung bei mir immer. Ich lade die diese Mappe aber vorsichtshalber noch mal hoch.
https://www.herber.de/bbs/user/74400.xlsm
Gruß
Nepumuk
Anzeige
AW: Auf Fertigstellung der Aktualisierung warten
14.04.2011 09:31:17
Ralf
Hallo Nepomuk,
also bei mir wird erst formatiert und dann die Datenaktualisierung durchgeführt, also die Makroformatierung wieder überschrieben.
Hast Du das in der 74395 Datei mal ausprobiert?
Viele Grüße
Ralf
AW: Auf Fertigstellung der Aktualisierung warten
14.04.2011 10:10:38
Nepumuk
Hallo Ralf,
hast du auch die Änderung welche ich hier: https://www.herber.de/forum/messages/1210357.html geschrieben habe gemacht?
Gruß
Nepumuk
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Auf Fertigstellung der Aktualisierung warten in Excel VBA


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass die Datenaktualisierung in Excel VBA abgeschlossen ist, bevor weitere Schritte vorgenommen werden, kannst du den AfterRefresh-Event des QueryTable-Objektes nutzen. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Erstelle ein neues Modul:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".
  2. Füge den folgenden Code hinzu:

    Private WithEvents mobjQueryTable As QueryTable
    
    Sub Init_Class()
       Set mobjQueryTable = Tabelle1.QueryTables(2) ' Stelle sicher, dass der Index korrekt ist
    End Sub
    
    Private Sub mobjQueryTable_AfterRefresh()
       ' Hier kannst du die Formatierung durchführen
       MsgBox "Aktualisierung abgeschlossen!"
       ' Beispiel für Formatierung
       Sheets("Intraday").Range("A1").Font.Bold = True
    End Sub
  3. Aktiviere das Makro:

    • Stelle sicher, dass das Makro in deinem Arbeitsblatt aktiviert ist und führe Init_Class aus, um den AfterRefresh-Event zu initialisieren.
  4. Testen:

    • Führe das Makro aus, das die Daten aktualisiert, und beobachte, dass die Formatierung erst nach der Aktualisierung durchgeführt wird.

Häufige Fehler und Lösungen

  • Fehler: Formatierung wird vor der Aktualisierung ausgeführt

    • Lösung: Stelle sicher, dass du den AfterRefresh-Event richtig implementiert hast. Überprüfe den Index des QueryTable, um sicherzustellen, dass du die richtige Abfrage verwendest.
  • Fehler: Aktualisierung läuft nicht durch

    • Lösung: Überprüfe, ob dein Makro die Abfragen korrekt initialisiert. Wenn du ActiveWorkbook.RefreshAll verwendest, stelle sicher, dass die Abfragen nicht vorzeitig beendet werden.

Alternative Methoden

  1. VBA Wait:

    • Eine einfachere Methode könnte die Verwendung von Application.Wait sein. Beachte, dass dies die Anwendung für die angegebene Zeit anhält, was nicht immer optimal ist.
    ActiveWorkbook.RefreshAll
    Application.Wait (Now + TimeValue("0:00:10")) ' Warten für 10 Sekunden
  2. Polling:

    • Du könntest auch eine Schleife verwenden, um regelmäßig zu überprüfen, ob die Aktualisierung abgeschlossen ist. Dies ist jedoch weniger elegant als die Verwendung des AfterRefresh-Events.

Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du die Aktualisierung abwarten kannst, bevor du mit der Formatierung fortfährst:

Sub Daten_aktualisieren()
    Application.ScreenUpdating = False
    Sheets("Intraday").Select
    ActiveWorkbook.RefreshAll ' Daten aktualisieren
    ' Auf Fertigstellung warten
    Do While ActiveWorkbook.Refreshing
        DoEvents ' Warte, bis die Aktualisierung abgeschlossen ist
    Loop
    ' Formatierung nach der Aktualisierung
    Sheets("Intraday").Range("A1").Font.Bold = True
    Application.ScreenUpdating = True
End Sub

Tipps für Profis

  • Verwende DoEvents: Wenn du eine Schleife verwendest, um auf die Aktualisierung zu warten, stelle sicher, dass du DoEvents einfügst, um die Anwendung nicht zu blockieren.

  • Fehlerbehandlung: Implementiere Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme abzufangen und entsprechende Maßnahmen zu ergreifen.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Aktualisierung wirklich abgeschlossen ist?
Verwende den AfterRefresh-Event des QueryTable, um sicherzustellen, dass deine Formatierungen erst nach Abschluss der Aktualisierung durchgeführt werden.

2. Was ist der Unterschied zwischen RefreshAll und QueryTable.Refresh?
RefreshAll aktualisiert alle Datenverbindungen im Arbeitsbuch, während QueryTable.Refresh nur die spezifische Abfrage aktualisiert, die du angibst.

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