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

externe Datenabfrage abbrechen

Forumthread: externe Datenabfrage abbrechen

externe Datenabfrage abbrechen
24.04.2014 07:24:39
Enrico
Hallo zusammen
Ich starte in einer Tabelle mehrere externe Datenabfragen.
Dauert eine Abfrage zu lange, suche ich nach einer Möglichkeit diese Abfrage
einfach abzubrechen bzw. zu überspringen.
Ist dies möglich und wenn ja wie ?
Habe auch schon im Archiv recherchiert, aber leider keine Antwort gefunden.
Viele Dank

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: externe Datenabfrage abbrechen
25.04.2014 11:59:51
Born
Hallo Enrico,
ich habe selbst noch keine Datenabfragen genutzt. Kann man das ggf. mit einem Timer lösen?
Mit welchem Befehl startest Du die Abfrage? Ev. steht in der VBA-Hilfe mehr dazu...
Gruß,
M. Born

AW: externe Datenabfrage abbrechen
25.04.2014 13:24:18
Enrico
Hier ein Beispiel......
... das geht je recht fix.
Wenn die Abfrage aber aus irgendeinem Grund länger dauert
hätte ich das gern automatisch abgebrochen.
Sub Makro1()
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.finanzen.net/index/DAX/30-Werte", Destination:=Range("$A$1"))
.Name = "30-Werte"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "3"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub

Anzeige
AW: externe Datenabfrage abbrechen
25.04.2014 14:06:03
EtoPHG
Hallo Enrico,
Durch diese Codezeile:
.Refresh BackgroundQuery:=False
setzt du ein Datenquery an den Server ab, das nicht im Hintergrund (asynchron) laufen darf.
Damit werden keine weiteren Codezeilen ausgeführt, bis das Query alle Daten zurückgeliefert hat.
Änderst du die BackgroundQuery-Eigenschaft auf =True, läuft die Abfrage asynchron und hat folgende Auswirkung:
1. Dein Code wird weiter ausgeführt, sofern noch ausführbare Codezeilen folgen.
2. Die Abfrage kann von aussen durch das Drücken der ESC Taste beendet werden.
3. Den Zustand der Abfrage (ob laufend) solltest du in der Statusbar von Excel sehen (drehendes Icon).
Gruess Hansueli

Anzeige
AW: externe Datenabfrage abbrechen
28.04.2014 07:19:32
Enrico
Danke für die Antwort.
Meine Abfragen stehen aber schon alle auf
.BackgroundQuery = True
Mit welcher Befehlszeile könnte ich denn die Abfrage abbrechen,
wenn es zu lang dauert. ESC wäre für mich in dem Fall keine Option.

AW: externe Datenabfrage abbrechen
28.04.2014 08:27:23
EtoPHG
Hallo Enrico,
Bei Level VBA gut würde ich den Umgang mit dem Objektkatalog under der Hilfe des VBE voraussetzen.
Du hast einen Code gepostet, der deinen Aussagen widerspricht. Zudem addierst du mit dem Code jedesmal ein neuen Querytable-Objekt. Ist das gewollt? Wie wirst du das Objekt wieder los?
Zum Problem: Starte z.B. ein Ontime-Makro, das die Refreshing-Eigenschaft des Queryobjekts prüft und falls es nach einer best. Zeit immer noch True ist, brich es mit der CancelRefresh Methode ab!
Gruess Hansueli

Anzeige
AW: externe Datenabfrage abbrechen
28.04.2014 16:24:28
Enrico
OK - das probiere ich mal.
Danke
Die Querytable-Objekte lösche ich aus dem Namens-Manager.
Habe aber keine Probleme damit, da die Datei nicht gespeichert wird und nach erneutem öffnen sind alle alten Abfragen weg.
Werde dann wohl beim nächsten Mal mein VBA Level niedriger ansetzten.
:-)
Mfg Enrico

Anzeige
AW: externe Datenabfrage abbrechen
25.04.2014 13:33:39
Enrico
Meine Abfrage holt eine größere Datenmenge einen geschlossenen Netz.
Das dauert in seltenen Fällen länger als 5 Min.
;
Anzeige
Anzeige

Infobox / Tutorial

Externe Datenabfrage in Excel abbrechen


Schritt-für-Schritt-Anleitung

Um eine externe Datenabfrage in Excel abzubrechen, folge diesen Schritten:

  1. Öffne den Visual Basic Editor (VBE): Drücke ALT + F11, um den Editor zu öffnen.

  2. Erstelle ein neues Makro: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden VBA-Code ein:

    Sub AbfrageAbbrechen()
        Dim qt As QueryTable
        Set qt = ActiveSheet.QueryTables(1) ' Wählt die erste QueryTable aus
    
        If qt.Refreshing Then
            qt.CancelRefresh ' Bricht die laufende Abfrage ab
        End If
    End Sub
  4. Füge diesen Code in dein bestehendes Makro ein: Stelle sicher, dass die Abfrage als BackgroundQuery:=True gesetzt ist.

  5. Starte das Makro: Du kannst das Makro manuell starten oder eine Zeitsteuerung (z.B. Application.OnTime) verwenden, um das Abbrechen nach einer bestimmten Zeit automatisch auszuführen.


Häufige Fehler und Lösungen

  • Fehler: Die Abfrage wird nicht abgebrochen, obwohl BackgroundQuery auf True gesetzt ist.

    • Lösung: Überprüfe, ob du die Abfrage tatsächlich mit BackgroundQuery:=True gestartet hast.
  • Fehler: Das Makro funktioniert nicht, weil die QueryTable nicht gefunden wird.

    • Lösung: Stelle sicher, dass die QueryTable existiert. Verwende ActiveSheet.QueryTables.Count, um die Anzahl der Abfragen zu überprüfen.

Alternative Methoden

  • Excel Befehl abbrechen: Du kannst die Abfrage manuell abbrechen, indem du die ESC-Taste drückst, wenn die Abfrage im Hintergrund läuft.
  • Timer-Makro: Nutze ein Timer-Makro, das regelmäßig den Status der Abfrage überprüft und bei Bedarf abbricht.
Sub TimerAbbrechen()
    Application.OnTime Now + TimeValue("00:01:00"), "AbfrageAbbrechen" ' Führt das Abbrechen alle 1 Minute durch
End Sub

Praktische Beispiele

Hier ein Beispiel, wie du eine Datenabfrage mit einem Timeout versehen kannst:

Sub DatenabfrageMitTimeout()
    Dim qt As QueryTable
    Set qt = ActiveSheet.QueryTables.Add(Connection:="URL;http://www.example.com", Destination:=Range("$A$1"))

    qt.BackgroundQuery = True
    qt.Refresh

    ' Timer starten
    Application.OnTime Now + TimeValue("00:05:00"), "AbfrageAbbrechen" ' Abbruch nach 5 Minuten
End Sub

Tipps für Profis

  • Verwende Application.ScreenUpdating = False, um das Flackern des Bildschirms während der Abfragen zu minimieren.
  • Halte deinen Code sauber und vermeide die wiederholte Erstellung von QueryTable-Objekten, um die Performance zu verbessern.
  • Nutze die Statusleiste in Excel, um den Fortschritt der Abfrage zu überwachen.

FAQ: Häufige Fragen

1. Kann ich die Abfrage abbrechen, bevor sie abgeschlossen ist? Ja, wenn du BackgroundQuery:=True verwendest, kannst du die Abfrage durch das Makro abbrechen.

2. Gibt es eine Möglichkeit, die Abfrage automatisch nach einer bestimmten Zeit abzubrechen? Ja, du kannst ein Timer-Makro einsetzen, das regelmäßig den Status prüft und das Abbrechen initiiert, falls die Abfrage zu lange dauert.

3. Welche Excel-Version wird benötigt? Die oben genannten Techniken funktionieren in Excel 2010 und neueren Versionen.

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