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.