Nikolas ha desarrollado una consulta web para recuperar datos externos de forma regular. El problema es que con frecuencia recibe el mensaje de error «No se puede abrir la página web …​» cuando ejecuta la consulta web. Este mensaje aparece cuando hay alguna interrupción de la conexión a Internet entre Nikolas y el servidor web, y debe hacer clic en Aceptar en el mensaje de error para que Excel continúe.

Esto presenta un problema cuando Nikolas está lejos de su computadora porque puede significar que la consulta web no recopila todos los datos que debería ser porque está esperando pacientemente a que se haga clic en el botón Aceptar cuando surge un problema. Nikolas quiere una forma de decirle a la consulta web que no muestre el mensaje y simplemente vuelva a esperar si no puede conectarse en el intento actual.

Desafortunadamente, no hay forma de decirle a Excel que haga lo que quiere. Cuando aparece el mensaje «No se puede abrir la página web …​», es prácticamente imposible suprimir el mensaje. La única solución es intentar crear una macro que solucione el problema. Por ejemplo, podría desarrollar una macro que cree una instancia de Internet Explorer (que no tiene el problema) para probar si hay un error al llegar a la página web.

La siguiente macro implementa este enfoque.

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

Tenga en cuenta que esta macro requiere alguna configuración dentro de la interfaz VBA para funcionar correctamente. Específicamente, debe elegir Referencias en el menú Herramientas y asegurarse de que el proyecto incluya referencias a la Biblioteca de objetos HTML de Microsoft y los Controles de Internet de Microsoft.

Lo que hace la macro es usar IE para conectarse a la URL pasada a la función (en strStartURL) y luego tomar el contenido que se encuentra allí.

Si la conexión es exitosa, entonces Conectado se establece en Verdadero y puede analizar y usar los datos en el sitio. La función, tal como está escrita, devuelve «Datos capturados con éxito» a la rutina de llamada, pero podría devolver con la misma facilidad algún valor obtenido del sitio remoto. Ese valor podría entonces rellenarse, pero la rutina de llamada, en una hoja de trabajo.

Tenga en cuenta también que la función realiza un análisis rudimentario de la página que captura y solo considera que la conexión es exitosa si encuentra alguna redacción esperada en el título de la página que se encuentra en la URL.

Para tener una idea de cómo funciona la macro, use algunas macros como las siguientes:

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

El primero debería funcionar; los dos segundos deben mostrar un mensaje que diga «N / A».

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (10525) se aplica a Microsoft Excel 2007 y 2010.