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

Hintergrundabfrage...

Forumthread: Hintergrundabfrage...

Hintergrundabfrage...
05.01.2023 07:54:59
Chris
Guten Morgen liebe Excel-Profis,
ich habe eine Auswertung mit einem Datenmodell erstellt, wo ich versch. Makros nacheinander rufe und am Schluss folgendes ausführe:

Activeworkbook.RefreshAll
Calculate
Msgbox ("Update was sucessfull!")
End Sub
Was mir hier nicht gefällt, ist die Tatsache, dass nach der Erfolgsmeldung in der unteren Leiste "Hintergrundabfrage wird ausgeführt" angezeigt wird.
Eigentlich soll nach der Erfolgsmeldung alles fertig aktualisiert und berechnet sein. Was mache ich hier falsch?
Bitte um eure Hilfe - vielen Dank!
Lg,
Chris
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hintergrundabfrage...
05.01.2023 08:16:13
ChrisL
Hi Chris
Versuch mal in den Eigenschaften der Abfrage "Aktualisierung im Hintergrund zulassen" zu deaktivieren.
cu
Chris
AW: Hintergrundabfrage...
05.01.2023 09:16:31
Chris
Es ist bei allen Abfragen "Aktualisierung im Hintergrund zulassen" deaktiviert bzw. ausgegraut - ich könnte es gar nicht aktivieren.
Nur bei ThisWorkbookDataModel ist es aktiv aber auch ausgegraut - ich kann es daher hier nicht deaktivieren...
Anzeige
AW: Hintergrundabfrage...
05.01.2023 10:15:58
ChrisL
Hi Chris
Mir fehlen die Ideen. Ich lasse offen.
cu
Chris
AW: Hintergrundabfrage...
05.01.2023 10:59:43
Chris
Trotzdem danke Chris!
AW: Hintergrundabfrage...
05.01.2023 11:37:21
onur
"Was mache ich hier falsch" ?
Du liest nicht die "Gebrauchsanleitung.
Microsoft:
Workbook.RefreshAll-Methode (Excel)
Artikel
11.04.2022
2 Minuten Lesedauer
Aktualisieren alle externe Datenbereiche und PivotTable-Berichte in der angegebenen Arbeitsmappe.
Syntax
ausdruck. RefreshAll
expression Eine Variable, die ein Workbook-Objekt darstellt.
Bemerkungen
Objekte, für die die BackgroundQuery-Eigenschaft auf "True " festgelegt ist, werden im Hintergrund aktualisiert.
Anzeige
AW: Hintergrundabfrage...
05.01.2023 12:55:30
Chris
Danke für den Hinweis!
Ich habe nun den Befehl

Activeworkbook.RefreshAll
mit folgenden Code ersetzt:

For Each Conn In ActiveWorkbook.Connections
  Conn.OLEDBConnection.BackgroundQuery = False
  Application.StatusBar = "Die " & Conn.Name & " wird aktualisiert. Bitte warten..."
  Conn.OLEDBConnection.Refresh
Next Conn
Calculate
Es wird dann eine Abfrage nach der anderen aktualisiert, aber dann auf einmal bekomme ich einen Laufzeitfehler: 1004 - Microsoft Excel aktualisiert gerade Daten. Versuchen Sie es bitte später noch mal.
Anzeige
AW: Hintergrundabfrage...
05.01.2023 13:38:46
onur
Das weg:

Application.StatusBar = "Die " & Conn.Name & " wird aktualisiert. Bitte warten..."
Conn.OLEDBConnection.Refresh
Das HINTER "Next Conn"

Activeworkbook.RefreshAll

AW: Hintergrundabfrage...
05.01.2023 15:17:36
Chris
Danke für deine Unterstützung! Aber...
ich bekomme jedoch im Zuge der Schleife wieder einen Laufzeitfehler 1004 - Anwendungs- oder objektdefinierter Fehler
Kann es sein, dass die Schleife das False auch für das Datenmodel selbst setzen würde und das halt irgendwie nicht möglich ist?
Bin echt ratlos...
Anzeige
AW: Hintergrundabfrage...
05.01.2023 15:17:44
Chris
Danke für deine Unterstützung! Aber...
ich bekomme jedoch im Zuge der Schleife wieder einen Laufzeitfehler 1004 - Anwendungs- oder objektdefinierter Fehler
Kann es sein, dass die Schleife das False auch für das Datenmodel selbst setzen würde und das halt irgendwie nicht möglich ist?
Bin echt ratlos...
Anzeige
AW: Hintergrundabfrage...
08.01.2023 20:28:24
Piet
Hallo
was passiedrt wenn du in deinem Code die Wait Funktion einbaust? Einfach mal probieren ...
Gibt es auch als Sleeo in Millisekunden, dann musst es vorher müt Public Funktion deklariert werden!
Conn.OLEDBConnection.Refresh
Application.Wait Now + TimeSerial(0, 0, 1) 'Warte 1 Sekunde
end Piet
Anzeige
AW: Hintergrundabfrage...
09.01.2023 07:45:51
Chris
Guten Morgen Piet,
das hatte ich schon probiert - aber nachdem die Daten immer mehr werden, bräuchte ich ein dynamisches Wait...
Ich stelle mir nach wie vor die Frage, warum bei meinen Abfragen der Menüpunkt "Hintergrundaktualisierung" ausgegraut ist - es kann doch nicht sein, dass dies bis jetzt nur bei mir vorkommt... Und beim Datenmodell ist es aktiv und ebenfalls ausgegraut...
Hier ein Screenshot der Einstellungen einer Abfrage:
Userbild
Und auch vom Datenmodel:
Userbild
Vielleicht weiß ja doch noch jemand warum das so ist...
Danke!
Lg,
Chris
Anzeige
;
Anzeige

Infobox / Tutorial

Hintergrundabfragen in Excel VBA effektiv steuern


Schritt-für-Schritt-Anleitung

  1. Verhindere die Hintergrundaktualisierung: Stelle sicher, dass die Eigenschaft BackgroundQuery für jede OLEDB-Verbindung auf False gesetzt ist. Dies kannst Du durch den folgenden Code erreichen:

    For Each Conn In ActiveWorkbook.Connections
       Conn.OLEDBConnection.BackgroundQuery = False
       Conn.OLEDBConnection.Refresh
    Next Conn
  2. Warte auf die Aktualisierung: Verwende die Application.Wait-Methode, um dem System Zeit zu geben, die Aktualisierungen abzuschließen. Beispiel:

    Application.Wait Now + TimeSerial(0, 0, 1) ' Warte 1 Sekunde
  3. Aktualisiere das Arbeitsblatt: Nach der Aktualisierung der Verbindungen kannst Du das Arbeitsblatt erneut berechnen:

    Calculate
    MsgBox ("Update was successful!")
  4. Kombiniere alle Schritte: Der vollständige Code könnte so aussehen:

    For Each Conn In ActiveWorkbook.Connections
       Conn.OLEDBConnection.BackgroundQuery = False
       Conn.OLEDBConnection.Refresh
       Application.Wait Now + TimeSerial(0, 0, 1) ' Warte 1 Sekunde
    Next Conn
    Calculate
    MsgBox ("Update was successful!")

Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Dieser Fehler tritt häufig auf, wenn Excel versucht, Daten zu aktualisieren, während eine andere Aktualisierung noch läuft. Löse dieses Problem, indem Du sicherstellst, dass BackgroundQuery auf False gesetzt ist, bevor Du die Aktualisierung startest.

  • Aktivierung der Hintergrundaktualisierung ausgegraut: Dies kann vorkommen, wenn die Datenquelle oder das Datenmodell in Excel nicht die richtigen Eigenschaften zulässt. Überprüfe die Verbindungen im Datenmodell und stelle sicher, dass Du nicht versuchst, BackgroundQuery für nicht unterstützte Verbindungen zu ändern.


Alternative Methoden

  • Dynamisches Warten: Anstelle einer festen Wartezeit kannst Du eine Schleife verwenden, um zu überprüfen, ob die Aktualisierung abgeschlossen ist, bevor Du fortfährst. Dies kann durch eine Kombination aus Do While-Schleifen und der Wait-Funktion geschehen.

    Dim isUpdating As Boolean
    isUpdating = True
    
    Do While isUpdating
       isUpdating = False
       For Each Conn In ActiveWorkbook.Connections
           If Conn.OLEDBConnection.BackgroundQuery = True Then
               isUpdating = True
           End If
       Next Conn
       Application.Wait Now + TimeSerial(0, 0, 1) ' Warte 1 Sekunde
    Loop

Praktische Beispiele

Ein einfaches Beispiel zur Verwendung von ActiveWorkbook.RefreshAll könnte wie folgt aussehen:

Sub RefreshAllData()
   ActiveWorkbook.RefreshAll
   Application.Wait Now + TimeSerial(0, 0, 5) ' Warte 5 Sekunden
   MsgBox ("Alle Daten wurden aktualisiert!")
End Sub

Wenn Du mit mehreren Verbindungen arbeitest, kannst Du den oben beschriebenen Code mit NextConn verwenden, um sicherzustellen, dass alles nacheinander aktualisiert wird.


Tipps für Profis

  • Verwende DoEvents: Wenn Du möchtest, dass Excel während der Aktualisierung weiterhin reagiert, füge DoEvents in Deinen Code ein. Dies ermöglicht es Excel, andere Aufgaben zu erledigen, während es auf die Aktualisierung wartet.

  • Überwache den Status: Nutze die Application.StatusBar, um den Fortschritt der Aktualisierung anzuzeigen. Dies verbessert die Benutzererfahrung, indem Du den Benutzern Rückmeldungen über den Aktualisierungsstatus gibst.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass alle Verbindungen aktualisiert werden?
Verwende die Schleife mit Conn.OLEDBConnection.Refresh, um jede Verbindung nacheinander zu aktualisieren.

2. Was mache ich, wenn BackgroundQuery ausgegraut ist?
Dies kann an den Verbindungseigenschaften liegen; stelle sicher, dass alle deine Verbindungen korrekt konfiguriert sind und dass Du die Berechtigungen für das Datenmodell überprüfst.

3. Kann ich die Wartezeit dynamisch gestalten?
Ja, indem Du eine Schleife verwendest, um den Status der Aktualisierungen zu überprüfen, kannst Du die Wartezeit anpassen, basierend auf der Anzahl der Verbindungen oder der Größe der Datenquelle.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige