Tiempo atrás publiqué una forma de interactuar con formularios de páginas Web (ver).
Relacionado con este post y sobre todo con el del día anterior, donde necesitamos recuperar datos en una Table (de HTML) de una Web y llevarlos a nuestra hoja de Excel, expongo el siguiente artículo.
Es importante identificar en el código fuente de la Web el nombre o Id de la 'Table'.
Si accedemos a la Web en cuestión del ejemplo:
http://es.investing.com/indices/spain-35-components
y desde la Table presionamos botón derecho y Inspeccionar elemento, veremos el Id buscado:
En nuestro ejemplo la Table se identifica con el Id:"cr1", y así nos referiremos en el código de nuestra macro.
A continuación añadimos rótulos a nuestro encabezado en la hoja 'IBEX35', e incorporamos en la ventana de código de nuestro módulo incluimos el siguiente procedimiento:
Al lanzar la macro el resultado es:
Debemos tener mucha precaución, ya que la carga se realiza, según la Web, intercambiando los separadores decimales!!!.
En el código de más arriba se le da un tratamiento para que los números sean almacenados como números, empleando nuestro sistema de separadores.
Relacionado con este post y sobre todo con el del día anterior, donde necesitamos recuperar datos en una Table (de HTML) de una Web y llevarlos a nuestra hoja de Excel, expongo el siguiente artículo.
Es importante identificar en el código fuente de la Web el nombre o Id de la 'Table'.
Si accedemos a la Web en cuestión del ejemplo:
http://es.investing.com/indices/spain-35-components
y desde la Table presionamos botón derecho y Inspeccionar elemento, veremos el Id buscado:
En nuestro ejemplo la Table se identifica con el Id:"cr1", y así nos referiremos en el código de nuestra macro.
A continuación añadimos rótulos a nuestro encabezado en la hoja 'IBEX35', e incorporamos en la ventana de código de nuestro módulo incluimos el siguiente procedimiento:
Sub ImportarTableHTML_a_Excel() 'Tener REFERENCIA ACTIVA Microsoft Internet Controls !!! Dim IE As Object Dim fila As Integer, col As Integer Dim elemCollection As Object, curHTMLRow As Object Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.navigate ("http://es.investing.com/indices/spain-35-components") 'nos aseguramos que la web se ha descargado completamente While IE.Busy Or IE.readyState <> READYSTATE_COMPLETE DoEvents Wend 'Limpiamos el rango destino de nuestra hoja de calculo ThisWorkbook.Sheets("IBEX35").Activate Range("A2:I36").ClearContents 'identificamos la Table, mediante su Id, para cargarla Set elemCollection = IE.Document.getElementById("cr1") ' Rows(0) sería el título de la tabla, por eso lo saltamos '(Ya tenemos nuestros rótulos) 'ahora recorremos todas las filas y columnas de la Table en HTML For fila = 1 To elemCollection.Rows.Length - 1 Set curHTMLRow = elemCollection.Rows(fila) For col = 0 To curHTMLRow.Cells.Length - 1 'llevamos los datos a nuestra hoja de cálculo Set celda = Sheets("IBEX35").Cells(fila + 1, col + 1) celda.Value = "'" & curHTMLRow.Cells(col).InnerText 'tratamos los valores numéricos como número... If IsNumeric(celda) Then celda.Value = Replace(celda.Value, ",", ".") Next col Next fila 'Cerramos Internet Explorer IE.Quit 'y limpiamos memoria Set IE = Nothing Set curHTMLRow = Nothing Set celda = Nothing End Sub
Al lanzar la macro el resultado es:
Debemos tener mucha precaución, ya que la carga se realiza, según la Web, intercambiando los separadores decimales!!!.
En el código de más arriba se le da un tratamiento para que los números sean almacenados como números, empleando nuestro sistema de separadores.