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

Forumthread: Aktualisierung von unzähligen QueryTables

Aktualisierung von unzähligen QueryTables
07.01.2018 10:56:27
unzähligen
Guten Morgen zusammen,
ich habe folgendes Problem:
1. Pro Tabellenblatt gibt es 6 Queries
2. Es gibt ca. 250 Tabellenblätter. Macht aktuell ca. 1500 Queries für ein Exceldokument.
3. Verwende Excel 2016
Lösungsansätze:
1. Refresh all klappt nicht, da die Menge einfach zu groß ist --> sprich die Queries müssen nacheinander abgearbeitet werden
2. Ich habe ein paar Lösungen für einzelne Seiten gefunden (bzw. wurde mir dies empfohlen) --> hier fehlt mir aber das nacheinander abarbeiten der Tabellenblätter
z.B.
Sub Aktualisierung()
'alle Querytables im Blatt aktualisieren
Dim objQT As QueryTable
For Each objQT In Sheets("Test").QueryTables
objQT.Refresh BackgroundQuery:=False
Next objQT
End Sub

3. Aktuelle Version von mir: ich selektiere ein Tabellenblatt, und dann alle 6 Zeilen die das Query enthalten. --> funktioniert soweit sogut. Jedoch wenn eine angewählte Zeile verrutscht klappt das nicht mehr so gut. Desweiteren muss ich das auf mehrere Module verteilen da ich sonst einen Fehler (wegen 64kb) bekomme.
Sub Aktualisierung()
Sheets("Test").Select
Range("A80").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range("A500").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range("A850").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range("A1250").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range("A1650").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range("A2100").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range("A2500").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Sheets("Test1").Select
Range("A80").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range("A500").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range("A850").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range("A1250").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range("A1650").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range("A2100").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range("A2500").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
End Sub
Gibt es eine Lösung bei dem ich
- die Tabellenblätter nacheinander abarbeiten kann
- nicht mehr jede Zeile selektieren muss (etwas dynamischer)
- alles in ein Module bekomme oder auch automatisch von z.B. Modul1 in Modul2 in Modul3 springe, sodass ich nicht alle Module manuell starten muss? --> das würde vermutlich mit
Sub button()
dein erstes Makro
dein zweites Makro...
End Sub

klappen.
Vielen Dank für eure Hilfe am Morgen.
VG
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Aktualisierung von unzähligen QueryTables
07.01.2018 11:39:09
unzähligen
Hallo FragePeter,
leider schreibst Du nicht, woher die Queries ihre Daten beziehen. Wenn man eine Abfrage auf Access-Tabellen macht, dann landen die Daten in einer formatierten Tabelle (Vba: ListObject)
Deshalb muß man dann auch die formatierten Tabellen in den Arbeitsblätten auf Queries prüfen _ und nicht in der Arbeitstabelle selbst. Bei mir sieht das so aus:

Sub Aktualisierung()
'alle Querytables in allen Blättern der Arbeitsmappe aktualisieren
Dim ws As Worksheet, objQT As QueryTable, objLst As ListObject
For Each ws In ThisWorkbook.Worksheets
For Each objLst In ws.ListObjects
objLst.QueryTable.Refresh BackgroundQuery:=False
Next objLst
Next ws
Set ws = Nothing
Set objLst = Nothing
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Aktualisierung von unzähligen QueryTables
07.01.2018 12:51:07
unzähligen
Hallo Luschi,
die Daten kommen direkt von Webseiten (sprich 1500 Queries auf Webseiten. 6 Webseiten pro Sheet). Klappt das mit deiner Version auch?
VG
AW: Aktualisierung von unzähligen QueryTables
09.01.2018 18:53:43
unzähligen
Leider kann ich den Code gar nicht ausführen. Habe ihn in ein Modul gepackt aber es tut sich nichts. Wie gesagt die Quelle sind Webseiten.
Noch eine Idee?
Vielen Dank & Viele Grüße
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Aktualisierung von unzähligen QueryTables in Excel


Schritt-für-Schritt-Anleitung

Um alle QueryTables in einem Excel-Dokument effizient zu aktualisieren, kannst Du den folgenden VBA-Code verwenden. Dieser Code durchläuft alle Arbeitsblätter und aktualisiert jede QueryTable ohne die Notwendigkeit, jede Zeile manuell auszuwählen:

Sub Aktualisierung()
    ' Alle QueryTables in allen Blättern der Arbeitsmappe aktualisieren
    Dim ws As Worksheet
    Dim objQT As QueryTable
    Dim objLst As ListObject

    For Each ws In ThisWorkbook.Worksheets
        For Each objLst In ws.ListObjects
            If Not objLst.QueryTable Is Nothing Then
                objLst.QueryTable.Refresh BackgroundQuery:=False
            End If
        Next objLst
    Next ws

    Set ws = Nothing
    Set objLst = Nothing
End Sub

Diese Methode stellt sicher, dass Du nicht jede Zeile manuell auswählen musst und alle Tabellenblätter nacheinander abgearbeitet werden.


Häufige Fehler und Lösungen

  1. Code funktioniert nicht: Wenn der Code nicht ausgeführt wird, stelle sicher, dass Du ihn in ein Modul eingefügt hast. Überprüfe auch, ob die Arbeitsmappe Makros aktiviert hat.
  2. Keine QueryTables gefunden: Stelle sicher, dass die Tabellen, die Du aktualisieren möchtest, tatsächlich als QueryTables formatiert sind. Manchmal sind sie möglicherweise nicht korrekt eingerichtet.
  3. Leere Tabellen: Wenn Du leere Tabellen hast, kann das zu Fehlern führen. Füge eine Überprüfung hinzu, um sicherzustellen, dass die QueryTable nicht leer ist.

Alternative Methoden

Eine weitere Möglichkeit besteht darin, den Refresh-Befehl für jede QueryTable direkt über die Auswahl auszuführen. Hier ein Beispiel:

Sub RefreshSelection()
    Selection.QueryTable.Refresh BackgroundQuery:=False
End Sub

Du kannst diese Methode nutzen, wenn Du nur eine bestimmte QueryTable aktualisieren möchtest, anstatt alle auf einmal.


Praktische Beispiele

Hier sind einige Beispiele, wie Du verschiedene Ansätze kombinieren kannst:

  1. Aktualisierung einer spezifischen QueryTable:

    Sub AktualisierungEinzelnerQuery()
       Sheets("Test").ListObjects("Tabelle1").QueryTable.Refresh BackgroundQuery:=False
    End Sub
  2. Aktualisierung aller QueryTables in einem bestimmten Arbeitsblatt:

    Sub AktualisierungBlatt()
       Dim objQT As QueryTable
       For Each objQT In Sheets("Test").QueryTables
           objQT.Refresh BackgroundQuery:=False
       Next objQT
    End Sub

Tipps für Profis

  • Verwende BackgroundQuery: Wenn Du mehrere Queries hast, kannst Du BackgroundQuery:=True verwenden, um die Abfragen im Hintergrund auszuführen. Dies kann die Wartezeit verkürzen.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen in Deinen Code, um unerwartete Unterbrechungen zu vermeiden.
  • Optimierung: Reduziere die Anzahl der Refresh-Befehle, indem Du nur die Queries aktualisierst, die aktualisiert werden müssen.

FAQ: Häufige Fragen

1. Warum funktioniert mein Refresh-Befehl nicht? Überprüfe, ob die QueryTables korrekt eingerichtet sind und die Datenquelle erreichbar ist.

2. Kann ich den Refresh im Hintergrund ausführen? Ja, nutze BackgroundQuery:=True, um die Abfragen im Hintergrund auszuführen und die Arbeitsmappe nicht zu blockieren.

3. Wie kann ich mehrere Module in einem Makro aufrufen? Du kannst einfach die Sub-Prozeduren der Module nacheinander aufrufen, z.B.:

Sub Button()
    Call Modul1.Aktualisierung
    Call Modul2.Aktualisierung
End Sub

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige