Copia de una página web con una macro de Excel 365

Resuelto
mikel831 Mensajes publicados 237 Fecha de registro   Estado Miembro Última intervención   -  
mikel831 Mensajes publicados 237 Fecha de registro   Estado Miembro Última intervención   -

¡Buenos días!
Tengo una macro que abre una página web.
¿Cómo, en código VBA, copiar íntegramente esa página y pegarla después en una hoja de Excel empezando por la celda A1 (por ejemplo)?

1 respuesta

  1. CCMBot
     
    ¡Hola!
    ¡La IA que ama los desafíos está aquí!
    Para copiar una página web usando VBA en Excel 365, puedes usar los objetos QueryTables o InternetExplorer. Sin embargo, Excel puede no formatear correctamente el HTML dependiendo del sitio web. Aquí tienes cómo hacerlo con QueryTables:

    ```
    Sub CopiarPaginaWeb()
    Dim qt As QueryTable
    Dim url As String

    ' definir la URL del sitio web a copiar
    url = "http://www.example.com"

    ' añadir una QueryTable...
    Set qt = ActiveSheet.QueryTables.Add(Connection:="URL;" & url, Destination:=Range("A1"))

    ' configurar la QueryTable...
    With qt
    .WebSelectionType = xlEntirePage '... para seleccionar toda la página
    .Refresh BackgroundQuery:=False '... para actualizar los datos y pegarlos en la hoja
    End With

    ' liberar el objeto QueryTable
    Set qt = Nothing
    End Sub
    ```

    Esto debe pegar automáticamente toda la página web de la URL especificada en la celda A1 de la hoja activa.

    Nota: Asegúrate de tener una conexión a Internet activa y de que la URL que especifiques sea válida y accesible.

    Si quieres evitar el uso de QueryTables, puedes usar InternetExplorer.Application con HTMLDocument y HTMLBody. Así es como puedes hacerlo:

    ```
    Sub CopiarPaginaWeb()
    Dim IE As Object, html As Object

    ' Crear un nuevo Internet Explorer
    Set IE = CreateObject("InternetExplorer.Application")

    ' URL de la página a copiar
    IE.Navigate "http://www.example.com"

    ' Esperar a que IE termine de cargar la página
    Do While IE.Busy Or IE.readyState 4
    Application.Wait DateAdd("s", 1, Now)
    Loop

    ' Copiar el texto de la página
    Set html = IE.document.all
    html.Select
    html.CopyToClipboard

    ' Pegar la información en Excel
    Range("A1").PasteSpecial

    ' Salir de IE
    IE.Quit
    Set IE = Nothing
    Set html = Nothing
    End Sub
    ```
    Para este código, es recomendable añadir una referencia a "Microsoft HTML Object Library" utilizando "Tools -> References" en el editor de VBA.
    Asegúrate también de no navegar a otras páginas durante la ejecución de la macro.
    0
    1. mikel831 Mensajes publicados 237 Fecha de registro   Estado Miembro Última intervención   19
       

      ¡Hola!
      He optado por la QueryTable, y funciona bien.
      Sin embargo, en algunos casos, las imágenes y los íconos de la página web perturban la copia. ¿Es posible eliminarlos al copiar la QT?

      0