VBA Excel: página web y QueryTable

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

Hola,
El siguiente fragmento de código
        ' Copiar la página web en "Hoja2"
        Sheets("Hoja2").Select
        Cells.Clear
        ' agregar 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
......

copia una página web completa en la Hoja2 desde A1 y funciona de manera satisfactoria para mis necesidades. Sin embargo, algunas áreas de la página web contienen indicaciones del tipo 1-14 (por ejemplo) y se importan en las celdas de Excel como una fecha del tipo ene-14 ... ¿Es posible evitar este inconveniente y recuperar 1-14?
 


Windows / Chrome 124.0.0.0


1 respuesta

  1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Ambassadeur 1 588
     

    hola,

    Puedes ver que tienes el mismo comportamiento si escribes "1-14" manualmente en una celda.

    Para evitar que Excel interprete los datos, primero hay que configurar las celdas en formato "Texto".

     Cells.Clear Cells.NumberFormat = "@" 
    1
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      También podrías haber probado, simplemente, asignando un valor así:

       Cells.Clear [a5] = "1-14" Cells.NumberFormat = "@" [a6] = "1-14" 

      Te habrías dado cuenta de que no tenía nada que ver con el hecho de que la fuente sea una página web.

      0
    2. mikel831 Mensajes publicados 237 Fecha de registro   Estado Miembro Última intervención   19
       

      ¡Gracias por tu respuesta!
      1) Si pongo las celdas en formato texto antes del set Qt, no cambia nada.
      2) Si lo hago después, el ene-14 se transforma, por supuesto, en 41640... ¿No existe algún parámetro de configuración de QT?

      0
    3. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > mikel831 Mensajes publicados 237 Fecha de registro   Estado Miembro Última intervención  
       

      Creo que hay un parámetro que permite preservar el formato de las celdas.

      Sería más bien un parámetro accesible a través de la destinación, no a través de la conexión.

      Te sugiero que lo pruebes manualmente para encontrar este parámetro, y luego lo automatices si es necesario (el VBA podría simplemente usar un parámetro existente).

      https://stackoverflow.com/questions/56678825/formating-change-in-excel-when-refresh-data-source-connectred-with-sql-server

      0
    4. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
       

      ¿y así?

      .WebDisableDateRecognition = True
      1
    5. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > mikel831 Mensajes publicados 237 Fecha de registro   Estado Miembro Última intervención  
       

      Con mi archivo html de prueba, esto funciona simplemente poniéndolo en formato texto.

       Cells.Clear Cells.NumberFormat = "@" Set QT = ActiveSheet.QueryTables.Add(Connection:="URL;" & Url, _ Destination:=Range("A1")) ' configurar la QueryTable... With QT .WebSelectionType = xlEntirePage '... para seleccionar toda la página '.PreserveFormatting = False '.WebDisableDateRecognition = False .Refresh BackgroundQuery:=False '... para refrescar los datos y pegarlos en la hoja 
      un <br> 1-14 <br> tres
      1