Recuperación de datos de consultas web sin interrupciones (Microsoft Excel)
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.