Recupero dei dati delle query Web senza interruzioni (Microsoft Excel)
Nikolas ha sviluppato una query Web per recuperare regolarmente dati esterni. Il problema è che riceve spesso un messaggio di errore “Impossibile aprire la pagina Web …” durante l’esecuzione della query Web. Questo messaggio viene visualizzato quando si verifica un’interruzione della connessione Internet tra Nikolas e il server Web e deve fare clic su OK nel messaggio di errore in modo che Excel continui.
Questo presenta un problema quando Nikolas è lontano dal suo computer perché potrebbe significare che la query Web non raccoglie tutti i dati che dovrebbe essere perché attende pazientemente che venga cliccato il pulsante OK quando si verifica un problema. Nikolas vuole un modo per dire alla query Web di non visualizzare il messaggio e tornare ad aspettare se non riesce a connettersi al tentativo corrente.
Sfortunatamente, non c’è modo di dire a Excel di fare quello che vuoi. Quando viene visualizzato il messaggio “Impossibile aprire la pagina Web …”, è praticamente impossibile sopprimere il messaggio. L’unica soluzione è provare a creare una macro che aggiri il problema. Ad esempio, potresti sviluppare una macro che crei un’istanza di Internet Explorer (che non presenta il problema) per verificare la presenza di un errore nel raggiungimento della pagina Web.
La seguente macro implementa questo approccio.
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
Si noti che questa macro richiede una configurazione all’interno dell’interfaccia VBA per funzionare correttamente. In particolare, è necessario scegliere Riferimenti dal menu Strumenti e assicurarsi che il progetto includa riferimenti alla libreria di oggetti HTML di Microsoft e ai controlli Internet di Microsoft.
Quello che fa la macro è usare IE per connettersi all’URL passato alla funzione (in strStartURL) e quindi prendere il contenuto che si trova lì.
Se la connessione ha esito positivo, Connected è impostato su True ed è possibile analizzare e utilizzare i dati nel sito. La funzione, come scritto, restituisce “Dati acquisiti con successo” alla routine chiamante, ma potresti altrettanto facilmente restituire un valore acquisito dal sito remoto. Quel valore potrebbe quindi essere inserito, ma la routine chiamante, in un foglio di lavoro.
Si noti, inoltre, che la funzione esegue un’analisi rudimentale sulla pagina che acquisisce e considera la connessione riuscita solo se trova alcune parole previste nel titolo della pagina trovato all’URL.
Per avere un’idea di come funziona la macro, usa alcune macro come le seguenti:
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
Il primo dovrebbe funzionare; i secondi due dovrebbero visualizzare un messaggio che dice “N / A”.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (10525) si applica a Microsoft Excel 2007 e 2010.