Wie wird man QueryTables wieder los?

Mit Excel-VBA lassen sich unter Windows recht komfortable Web-Abfragen programmieren. Das funktioniert mittels QueryTable recht gut. Doch wie wird man das QueryTable-Objekt wieder los bzw. was passiert, wenn man sich nicht darum kümmert?

Zum Beispiel hat man wie folgt per VBA-Makro auf dem Worksheet shW eine QueryTable qt angelegt:

Set qt = shW.QueryTables.Add("URL;", shW.Cells(1, 1))
With qt
   .BackgroundQuery = False
   .RefreshStyle = xlInsertDeleteCells
   .WebSelectionType = xlEntirePage
   .WebFormatting = xlWebFormattingNone
   .WebDisableDateRecognition = True
End With

Eine Web-Abfrage kann man dann z.B. so ausführen:

With qt
   .Connection = "URL;" & eineUrl
   .Refresh (False)
End With

Am Ende des Makros will man natürlich das Worksheet shW wieder leeren, also:

shW.Cells.Clear

Wer denkt, damit ist alles getan, denn schließlich werden beim manuellen Leeren eines Tabellenblattes Web-Abfragen ja auch gleich mit entfernt, der irrt. .Cells.Clear leert zwar das Blatt, das QueryTable-Objekt bleibt jedoch bestehen, und bei jedem Lauf des Makros kommt ein neues hinzu. Irgendwann wundert man sich dann über komische Effekte in der Datei.

Abhilfe schafft hier zusätzlich folgender Code:

For k = shW.QueryTables.Count To 1 Step -1
   shW.QueryTables(k).Delete
Next

oder noch besser so:

For Each qt In shW.QueryTables
    qt.Delete
Next

Dann ist wirklich aufgeräumt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.