Abrufen von Webabfragedaten ohne Unterbrechung (Microsoft Excel)
Nikolas hat eine Webabfrage entwickelt, um regelmäßig externe Daten abzurufen. Das Problem ist, dass er beim Ausführen der Webabfrage häufig die Fehlermeldung „Webseite kann nicht geöffnet werden …“ erhält. Diese Meldung wird angezeigt, wenn die Internetverbindung zwischen Nikolas und dem Webserver unterbrochen wird und er in der Fehlermeldung auf OK klicken muss, damit Excel fortgesetzt wird.
Dies stellt ein Problem dar, wenn Nikolas nicht an seinem Computer ist, da dies bedeuten kann, dass die Webabfrage nicht alle Daten sammelt, die sie sein sollte, da sie geduldig darauf wartet, dass auf die Schaltfläche OK geklickt wird, wenn ein Problem auftritt. Nikolas möchte der Webanfrage mitteilen, dass die Nachricht nicht angezeigt werden soll, und einfach wieder warten, wenn beim aktuellen Versuch keine Verbindung hergestellt werden kann.
Leider gibt es keine Möglichkeit, Excel anzuweisen, das zu tun, was Sie wollen. Wenn die Meldung „Webseite kann nicht geöffnet werden …“ angezeigt wird, ist es praktisch unmöglich, die Meldung zu unterdrücken. Die einzige Lösung besteht darin, ein Makro zu erstellen, das das Problem umgeht. Sie könnten beispielsweise ein Makro entwickeln, das eine Instanz von Internet Explorer erstellt (die kein Problem hat), um auf einen Fehler beim Erreichen der Webseite zu testen.
Das folgende Makro implementiert diesen Ansatz.
Option Explicit 'Declare Sleep API Private Declare Sub Sleep Lib "kernel32" (ByVal nMilliseconds As Long) Function GetData(strStartURL As String) As String Dim Attempt As Long Dim Connected As Boolean Dim ieDocNew As MSHTML.HTMLDocument GetData = "N/A" Attempt = 0 retry: Attempt = Attempt + 1 'Create browser object references and open an IE window Dim ieNew As New InternetExplorer 'Load page With ieNew .Visible = True 'show window .navigate strStartURL 'open page While Not .readyState = READYSTATE_COMPLETE Sleep 500 'wait 1/2 sec before trying again Wend End With 'The page should be open in IE, time for parsing 'Create document object model references Set ieDocNew = ieNew.Document If ieDocNew.Scripts.Length = 13 _ And ieNew.LocationName = "Microsoft Excel Tips" _ Then Connected = True GetData = "Data successfully captured" 'This is where you do something with the data End If 'Clean up IE objects Set ieDocNew = Nothing ieNew.Quit Set ieNew = Nothing DoEvents If Attempt < 10 And Not Connected Then GoTo retry End Function
Beachten Sie, dass für dieses Makro eine Konfiguration innerhalb der VBA-Schnittstelle erforderlich ist, um ordnungsgemäß zu funktionieren. Insbesondere müssen Sie im Menü Extras die Option Verweise auswählen und sicherstellen, dass das Projekt Verweise auf die Microsoft HTML-Objektbibliothek und die Microsoft Internet Controls enthält.
Das Makro verwendet den IE, um eine Verbindung zu der an die Funktion übergebenen URL (in strStartURL) herzustellen und dann den dort gefundenen Inhalt abzurufen.
Wenn die Verbindung erfolgreich ist, wird Connected auf True gesetzt, und Sie können die Daten am Standort analysieren und verwenden. Die Funktion gibt, wie geschrieben, „Daten erfolgreich erfasst“ an die aufrufende Routine zurück, aber Sie können genauso gut einen Wert zurückgeben, der vom Remote-Standort abgerufen wurde. Dieser Wert könnte dann aber die aufrufende Routine in ein Arbeitsblatt gestopft werden.
Beachten Sie auch, dass die Funktion die erfasste Seite rudimentär analysiert und die Verbindung nur dann als erfolgreich betrachtet, wenn sie im Seitentitel unter der URL einen erwarteten Wortlaut findet.
Verwenden Sie einige Makros wie die folgenden, um ein Gefühl für die Funktionsweise des Makros zu bekommen:
Sub TEST_GetData1() MsgBox GetData("http://excel.tips.net") End Sub
Sub TEST_GetData2() MsgBox GetData("http://excel.tipsxx.net") End Sub
Sub TEST_GetData3() MsgBox GetData("http://excel.tips.net/junk") End Sub
Der erste sollte funktionieren; Die zweiten beiden sollten eine Meldung mit der Aufschrift „N / A“ anzeigen.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (10525) gilt für Microsoft Excel 2007 und 2010.