Excel. Automatizar importación de web con varias tablas.

Conozco la posibilidad que Excel tiene de importar tablas desde la web. No hay problema cuando la página en cuestión tiene una sola tabla pero cuando, como en esta dirección, el documento tiene 42 páginas, se hace un poco engorroso ir creando una pestaña para cada pantalla.

Mi pregunta sería si hay posibilidad de realizar dicha importación en una sola tabla. Realizo la pregunta para Excel, que es lo que conozco más, pero me valdría también para Power BI o cualquier otro programa desde el que se pudiera utilizar.

1 respuesta

Respuesta
1

[Hola

El dilema es que por el diseño de la web, los "Query" de Excel toman toda la página como tabla y no solo la parte en donde están los datos así que se importan todas las filas superiores a las tablas de datos. Igual, como para seguir con tu idea, prueba algo así:

Sub Prueba()
Dim n As Integer
Dim nURL As String
Application.ScreenUpdating = False
For n = 1 To 5
    nURL = "URL;https://www.iaaf.org/records/toplists/sprints/100-metres/outdoor/men/senior/2018?page=" & n
    With ActiveSheet.QueryTables.Add(Connection:=nURL _
            , Destination:=Range("$A$1"))
            .Name = "Tabla" & n
            .FieldNames = True
            .BackgroundQuery = True
            .WebSelectionType = xlEntirePage
            .WebFormatting = xlWebFormattingNone
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .Refresh BackgroundQuery:=False
    End With
    DoEvents
    Sheets.Add
Next n
Application.ScreenUpdating = True
MsgBox "Proces terminado"
End Sub

Paciencia que el proceso tardará un minuto quizá.

Comentas

Abraham Valencia

PD1: Igual será más fácil usar solo los datos que te interesan pues todos estarán en la misma fila de cada hoja

PD2: Las web más modernas tienen ese tipo de formato y para solo importar los datos puntuales se puede hacer (a veces) pero es más engorroso/difícil: Enlace

Muchísimas gracias por tu contestación Abraham. Mis conocimientos sobre macros son limitados, así es que intentaré ir paso a paso. A ver si consigo algo porque es un tema que llevo años intentando solucionar.

Una pregunta. ¿Este código lo asocio a un botón o podría ejecutarse de alguna forma al abrir el archivo?

Gracias de nuevo.

Carlos.

Si la quieres en un botón, copia y pega la macro enviada a un módulo "standard" y la asocias al botón. Si quieres que se ejecute al abrir el archivo, debes usar el evento "Open" del libro que se encuentra en el módulo del libro que por defecto lleva el nombre "ThisWorkBook" y colocar el código en él:

Private Sub Workbook_Open()
Dim n As Integer
Dim nURL As String
Application.ScreenUpdating = False
For n = 1 To 5
    nURL = "URL;https://www.iaaf.org/records/toplists/sprints/100-metres/outdoor/men/senior/2018?page=" & n
    With ActiveSheet.QueryTables.Add(Connection:=nURL _
            , Destination:=Range("$A$1"))
            .Name = "Tabla" & n
            .FieldNames = True
            .BackgroundQuery = True
            .WebSelectionType = xlEntirePage
            .WebFormatting = xlWebFormattingNone
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .Refresh BackgroundQuery:=False
    End With
    DoEvents
    Sheets.Add
Next n
Application.ScreenUpdating = True
MsgBox "Proces terminado"
End Sub

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas