29 mayo, 2023

ENVIAR DATOS DESDE EXCEL A UNA PAGINA WEB – FORMULARIO

Hola a todos:

Hace unos días me enviaban una consulta sobre cómo podían enviar a través de Excel datos para introducir valores en un formulario web. Aunque la respuesta ya la adelanté en esta web me ha parecido interesante publicarla en una entrada.

Para poder realizar el trabajo debemos usar VBA y para ello es necesario que tengamos en cuenta algunos aspectos de la página web en cuestión y los elementos que vamos a necesitar para poder realizar la consulta.

Como ejemplo voy a utilizar mi web, de manera que mediante  código sea capaz de ingresar en su cuadro de búsqueda un valor, por ejemplo: «API» y que realice la búsqueda. Es decir, que sea capaz de enviar datos a una web, la mía,  y a un cuadro de texto (parecido a un formulario) y generar la búsqueda.

Para ello, vamos a utilizar la siguiente macro:

Sub CARGAR_DATOS_WEB()
Dim IE As Object
Application.ScreenUpdating = False
'Creamos objeto internet explorer
Set IE = CreateObject("InternetExplorer.Application")
'abrimos web
IE.navigate "https://excelsignum.com/"
'esperamos a que se carguen todos los elementos
Do Until IE.ReadyState = 4
DoEvents
Loop
'si necesitamos más tiempo lo podemos configurar aquí
Application.Wait (Now + TimeValue("0:00:01"))
'localizamos el ID que hace referencia al cuadro de búsqueda
'esto lo hacemos buscando en el código HTML de la página web
'e igualamos el valor de la celda para realizar la búsqueda
IE.document.getElementById("s").Value = "API" '
'también buscamos ID correspondiente al botón para buscar el valor
IE.document.getElementById("searchsubmit").Click
'hacemos visible la web.
IE.Visible = True
Set IE = Nothing
Application.ScreenUpdating = True
End Sub

Como podéis observar, es de gran importancia que seamos capaces de identificar los ID´s de cada uno de los elementos, es decir, del buscador y del botón para realizar la búsqueda.

Esto lo podemos hacer de varias formas, o bien rastreamos el código HTML de toda la web o bien nos posicionamos encima del buscador y pulsamos botón derecho:

enviar-datos-desde-excel-a-una-pagina-web_formulario1

y se abrirá la ventana de inspección con el ID o Name que necesitamos:

enviar-datos-desde-excel-a-una-pagina-web_formulario

Como podéis ver Para el buscador el ID es «s» y para el botón de búsqueda el procedimiento será idéntico.

Una vez que tenemos los ID´s ya podemos introducirlos en la macro y ejecutarla, el resultado que esperamos es ver una búsqueda de la palabra «API» en Excel Signum, es decir, esto:

enviar-datos-desde-excel-a-una-pagina-web_formulario2

Obviamente si hablamos de un formulario web, tendremos que identificar el elemento adecuado, si se trata de un ID o un Nombre y realizar tantas referencias como sean necesarias.

Esta vez no pondré archivo de descarga, el motivo es que no es necesario, tan solo hay que copiar la macro en un módulo, adaptarla y ejecutarla.

Espero que os sea de utilidad 🙂

Comparte este post

54 comentarios en «ENVIAR DATOS DESDE EXCEL A UNA PAGINA WEB – FORMULARIO»

    1. Hola Leo:

      Con name sería así:

      Sub CARGAR_DATOS_WEB()
      Dim IE As Object
      Dim document As Object
      Application.ScreenUpdating = False
      'Creamos objeto internet explorer
      Set IE = CreateObject("InternetExplorer.Application")
      'abrimos web
      IE.navigate "https://excelsignum.com/"
      'esperamos a que se carguen todos los elementos
      Do Until IE.ReadyState = 4
      DoEvents
      Loop
      'si necesitamos más tiempo lo podemos configurar aquí
      Application.Wait (Now + TimeValue("0:00:01"))
      'localizamos el name que hace referencia al cuadro de búsqueda
      'esto lo hacemos buscando en el código HTML de la página web
      'e igualamos el valor de la celda para realizar la búsqueda
      Set document = IE.document
      With document
      .getElementsByName("s")(0).Value = "API"
      End With
      'también buscamos "name" correspondiente al botón para buscar el valor
      With document
      .getElementsByName("submit")(0).Click
      End With
      'hacemos visible la web.
      IE.Visible = True
      Set IE = Nothing
      Application.ScreenUpdating = True
      End Sub

  1. estoy intentando con una macro rellenar unos campos de un formulario web esta pagina web http://www.cortefilme.com.br/mapa.html tiene una parte en HTML y otra en flash los datos que tengo que rellenar son de la parte en flash, por lo que había pensado es ir aun campo HTML y después con sendkey y TAB acceder a los campos en flash , cuando lo hago manualmente me funciona bien, pero cuando lo hago a través de la macro en lugar de ir al primer campo flash se va a la barra de direcciones de internet explorer.
    Os adjunto el código por si hay alguien que me puede ayudar(soy novato en vba)

    Muchas gracias

    Sub lamina152()

    ‘ lamina152 Macro

    Dim IE As Object
    Dim CeldaActual As Range

    Set CeldaActual = ActiveCell
    Set IE = CreateObject(«InternetExplorer.application»)

    URL = «http://cortefilme.com.br/mapa.html»

    IE.Navigate URL
    IE.Visible = True

    Do

    DoEvents

    Loop Until IE.readystate = 4

    ‘Application.Wait (Now() + TimeValue(«00:00:06»))

    IE.document.getelementbyid(«aemail»).Select

    Call SendKeys(«1», True)
    ‘Application.Wait (Now() + TimeValue(«00:00:01»))
    Call SendKeys(«{TAB}», True)
    Call SendKeys(«{TAB}», True)

    Call SendKeys(«222», True)

    End Sub

  2. Hola Luis:

    En la parte flash no voy a entrar, porque no he programado vba con flash. Sobre lo otro, la forma de pasar información desde Excel a un formulario es como te indico en el post. Por ejemplo, para tu consulta, por ID se pueden completar todos los campos de cuadros de texto (nombre, email, etc, etc). NO hace falta usar combinación de teclas (que siempre dan problemas en VBA).

    Utiliza el .click para pulsar el botón de envío (indicando previamente su id).

    IE.document.getElementById("nome").Value = "alejandro" '
    IE.document.getElementById("email").Value = "mi@correo.com"
    IE.document.getElementById("anome").Value = "miamigo"
    IE.document.getElementById("aemail").Value = "su@correo.com"
    'también buscamos ID correspondiente al botón para buscar el valor
    IE.document.getElementById("bt_enviar").Click

    Saludos.

    1. Hola Segu.

      Tengo una consulta que hacerte acerca de la funcion .getElementByID que comentas en este hilo.

      Resulta que en un excel mediante una macro en vba (windows 7, excel 2013 de 32 bits y IE11), hago una llamada a internet explorer y me rellena un campo. Hasta ahí todo perfecto, me funcionaba genial.

      Resulta que ahora he cambiado a Windows 10 y excel 365 64 bits y IE11 y me devuelve error en esta función (error en tiempo de ejecucion, error de automatización). Lo tengo tal que así:

      ie.Document.getelementbyid(«campo»).Value = Range(«cd30»).Value

      Lo que me extraña es que en el equipo antiguo me iba bien y ahora no. He intentado dar con el error y no se si es por la version de IE o por los 64bits.

      ¿Alguna idea de por donde puede venir el fallo?

      Muchas gracias por la ayuda
      David

      1. Hola David:

        Yo acabo de ejecutar la macro en Windows 10 con Excel a 64 Bits y funciona ok. ¿Puedes probar otra vez?, es posible que sea un error puntual al pasar los datos al navegador. Saludos.

  3. Buenas tarde estimado, y si en la pagina en cuestión se quiere adjuntar un archivo, por ejemplo.
    IE.document.getElementById(«buttonAdd»).Click
    En la pagina se abre la ventana para adjuntar un archivo, pero no se bien que proceda, me imagino hay que poner la ruta del archivo en excel, pero desconozco como, me podras apoyar?

    1. Hola Hector, Esta macro es para ejecutar el click mediante código y activar la web y mostrar lo que interese. No es para subir archivos, tendría que estudiar hacer un post sobre eso.

      Saludos.

      1. Muchas gracias por contestar, igual seguiré investigando, pero estaré al tanto del contenido por si lo logras primero que yo, ahorita solo logre que arroje la ventana para elegir el archivo pero no logro hacer que lo elija de forma automática. Saludos!

  4. Hola buen día
    Si necesitara crear un formulario y que la información del formulario se ingresara en la página web?
    Por Ejemplo Un usuario y contraseña.

    1. Hola Daniel:

      Tendrías que hacerlo en un userform con dos cuadros de texto y un botón de ejecución. En el evento del botón de comando incluir este código:

      Private Sub CommandButton1_Click()
      Dim IE As Object
      Application.ScreenUpdating = False
      'Creamos objeto internet explorer
      Set IE = CreateObject("InternetExplorer.Application")
      'abrimos web
      IE.navigate "https://excelsignum.com/"
      'esperamos a que se carguen todos los elementos
      Do Until IE.ReadyState = 4
      DoEvents
      Loop
      'si necesitamos más tiempo lo podemos configurar aquí
      Application.Wait (Now + TimeValue("0:00:01"))
      'usuario
      IE.document.getElementById("elquecorresponda").Value = Me.TextBox1.Value '
      'contraseña
      IE.document.getElementById("elquecorresponda").Value = Me.TextBox2.Value '
      'también buscamos ID correspondiente al botón para buscar el valor
      IE.document.getElementById("elquecorresponda").Click
      'hacemos visible la web.
      IE.Visible = True
      Set IE = Nothing
      Application.ScreenUpdating = True
      End Sub

      Obviamente, el ID tendrás que obtener los Id de Usuario, Contraseña y botón de logeo de la página que vayas a abrir.

      Saludos.

  5. Hola buenas noches, me ha sido de mucha utilidad el ejemplo, pero me encuentro con la necesidad de que al acabar de entrar los datos en el formulario web tengo un botón para descargar un archivo csv con los datos y el explorador me pregunta para guardar o abrir el archivo. Sabrías decirme como puedo interactuar par hacer que lo guarde o abra desde el script.

    Muchas gracias.

  6. Buenas tardes, me he mirado el enlace y es exactamente mi problema pero no está resuelto, ya que para usar el URLDownloadToFile se requiere conocer el nombre del archivo y este se genera al hacer click en el botón a través de un script de java en la propia web.
    La web de la que quería extraer la información rellenado el formulario es: https://re.jrc.ec.europa.eu/pvg_tools/es/tools.html
    Y tu ejemplo es perfecto para rellenar el formulario apretar los botones que generan el archivo pero la página se queda esperando que le diga abrir o guardar. Y es lo que no se resolver

    Muchas gracias.

    1. Hola Joan:

      Ya sé lo que quieres decir con descargar el archivo. Pero la complejidad de lo que deseas es alta, hay cosas en la red, pero no son concluyentes (bajo mi punto de vista). Son desarrollos muy complejos en algunos casos y en otros directamente no funcionan bien.

      Te dejo un enlace a una discusión: https://stackoverflow.com/questions/32145437/controlling-ie11-do-you-want-to-open-save-dialogue-window-buttons-in-vba

      Esto tengo que estudiarlo con calma, y ver si consigo un código que funcione.

      Saludos.

  7. Hola
    Tengo información similar en distintas hojas que se incrementan todos los días, yo agrego información en otras columnas y luego tengo que ingresar la información a un formulario web… como puedo resumir ese proceso?
    Gracias.

  8. Hola Federico: tu pregunta es demasiado general, tendría que analizar qué es lo que buscas en realidad. Si lo que deseas es agrupar la información de varias hojas, en esta web tienes varios códigos que te ayudarán a hacer (en el buscador indica: agrupar o consolidar

    Saludos.

  9. Hola, no encuentro cómo hacer para poder traer información desde esa página a la que ingreso. Me gustaría traer ciertos datos que se generan cuando ingreso la búsqueda, ¿cómo puedo hacerlo? Muchas gracias

  10. Hola Segu.-Te quisiera consultar en relaciòn a la funciòn RTD ò, como en mi Excel ( versiòn actual ) RDTR.-Estoy, mediante este comando, obteniendo datos de pàgina web hacia mi formulario Excel.-La consulta que necesito hacerte es si es posible mediante algùn comando, macro, etc, enviar datos desde mi Excel hacia el programa que me provee dichos datos.-En este caso el programa se llama Thinkorswim y el comando RDTR se obtiene mediante el ProgID: «tos.rtd».- Desde ya muchas gracias.-

  11. Hola segu
    Estoy intentando pasar una información del Excel a una página De intranet y según veo está diseñada Con algunas divisiones y frames que cuando identifico el id tiene unas subdivisiones y en el campo que necesito escribir no se cual sea el código para agregar el texto. He intentado con value con text pero no funciona
    Como podría realizar el código para que me tome lo que quiero escribir?
    Muchas Gracias

  12. Hola buen día Segu

    Tengo una duda si en vez de un cuadro de texto lo que quiero es rellenar una lista despegable como seria el código, gracias!!!!

    Saludos.

    1. Hola Silvestre:

      Lo que indicas requiere un desarrollo aparte. No es únicamente enviar un dato a un cuadro de texto, es enviar un array a una lista desplegable. Trataré de estudiar el tema y ver si existe una solución.

      Saludos

  13. Hola Segu,
    muchas gracias por todas las soluciones, en mi caso en conseguido rellenar los campos de un formulario de registro web pero al dar al botón de registrar no reconoce los datos que he introducido via macro y me pide que los rellene. Debajo de cada campo pone: «Indique su nombre» o «Indique su apellido». Es decir en el campo nombre yo veo en la pantalla Luis pero el formulario no lo reconoce y en el momento en que modifico el campo con una letra o un espacio lo reconoce y me desaparece la peticion de «Indique su nombre». Espero que me puedas ayudar pq creo que el resto lo tengo vien. Te adjunto mi código:

    Sub inscripciones()

        Dim IE As Object
        Dim doc As HTMLDocument
       
        Set IE = CreateObject(«InternetExplorer.Application»)
       
        IE.Visible = True
        IE.navigate «https://register.gotowebinar.com/register/8357104619320871183»
       
        Do While IE.Busy Or IE.readyState 4
        Application.Wait DateAdd(«s», 1, Now)
        Loop
       
           
        ‘For intRow = 2 To 4
       
        ‘————————-este codigo inserta las variables pero no deja registrar———————–
       
        IE.document.getElementById(«registrant.firstName»).Value = «luis»
        IE.document.getElementById(«registrant.lastName»).Value = «romero»
        IE.document.getElementById(«registrant.email»).Value = «lromero@aaaa.com»
        IE.document.getElementById(«registration.submit.button»).Click
       
        ‘———————————————————————————————-
           
        ‘IE.document.getElementById(«registrant.firstName»).Value = ThisWorkbook.Sheets(«Hoja1»).Range(«A» & intRow).Value
        ‘IE.document.getElementById(«registrant.lastName»).Value = ThisWorkbook.Sheets(«Hoja1»).Range(«B» & intRow).Value
        ‘IE.document.getElementById(«registrant.email»).Value = ThisWorkbook.Sheets(«Hoja1»).Range(«C» & intRow).Value
        ‘IE.document.getElementById(«registration.submit.button»).Click
       
        ‘Application.Wait DateAdd(«s», 2, Now)
       
        ‘Next
       
        ‘IE.Quit

    End Sub

    1. Hola Beto:

      Lo que ocurre es que la página tiene bloqueo antispam y por eso no es posible realizar lo que pretendes. No es sencillo encontrar un solución.

      Saludos

  14. Estimado Segu:

    Por lo que puedo leer en este hilo, el codigo que porporcionaste amablemente es de mucha utilidad, y te doy mis mas granes felicitaciones y agradecimiento por este aporte..

    Por otro lado, estoy tratando de replicar el ejemplo publicado y estoy teniendo un error, el cual es :

    ‘=======================
    Run-time error ‘424’:

    Object required
    ‘=======================

    De casualidad tienes alguna idea de porque es este error y como puedo solucionarlo?.

    es necesario que tenag el navegador abierto en la pagina que refencias?,

    Te agardezco de antemanno.

      1. Hola q tal, muchas gracias por la respuesta, de hecho estaba tratando de replicarlo para entenderlo pq hay un procedimiento que necesito hacer pero la página donde quiero hacerlo, «sat.gob.mx», tambien me da un error de coneccion.

        Tengo la sesión iniciada y el procedimiento es para captura de informacion de mil facturas

        Sabes si necesito activar algo?! O si simplemente no se puede?!

        Muchas gracias por tus prontos comentarios.

        Saludos…

  15. Muy buenas,

    he visto tu entrada y estoy intentando usarla.
    Quiero consultar desde un excel las multas de varios NIF de forma periodica, he conseguido con tu codigo que entre en la pagina y rellene los campos, pero no soy capaz de hacer el click y no sé como traerme el resultado.

    On Error Resume Next

    With Application
    .DisplayAlerts = False
    End With

    DNI = Range(«a10»).Value
    Desde = Range(«e3»).Value
    Hasta = Range(«f3»).Value

    Set IE = CreateObject(«InternetExplorer.Application»)

    IE.navigate «https://www.boe.es/notificaciones/notificaciones.php»

    Application.Wait (Now + TimeValue(«0:00:05»))

    IE.document.all.Item(«dato[0]»).Value = DNI
    IE.document.all.Item(«dato[4][0]»).Value = Desde
    IE.document.all.Item(«dato[4][1]»).Value = Hasta

    IE.document.getElementById(«buscar»).Click

    Me puedes decir en qué estoy fallando y como traerme la respuesta?

    Mil gracias por tu tiempo.

    1. En esa web en concreto para activa el botón de buscar se hace así:

      IE.document.getElementsByName(«accion»)(0).Click

      Tienes en este post un ejemplo con ID y sin embargo pegas en la consulta otra macro. Te aconsejo que leas el post y pruebes la macro.

      Saludos.

  16. Hola, gracias a tu publicación he podido ejecutar el 90% de un proyecto personal que quería hacer desde hace rato.

    Ahorita, estoy intentando cambiar un valor de una lista desplegable en una pagina web, pero no sé como cambiar el valor (la lista no se deja escribir.

    Por otro lado, tampoco he logrado cargar un archivo automaticamente al dar click al botón que suele aparecer en internet como «cargar archivos», pero no sé como moverme dentro de la venta que se abre para buscar el documento dentro de mi pc.

    Tienes algún comando recomendado para realizar estas dos cositas?.

  17. Buena noche disculpa la pregunta, estoy trabajando en una hoja de Excel y por medio de un macro envío un número a una página web formulario, la página me despliega información, lo que quiero es que la información que despliega la web almacenarla en una celda de la hoja de Excel.

  18. si quiero que sea para edge: como quedaría: Set IE = CreateObject(«InternetExplorer.Application»), realizo corrección de pregunta

  19. Hola Segu, gracias por tu post,

    En mi caso al correr el código me genera el siguiente error en la linea IE.Document.getElementsByID

    Se ha producido el error 462’´en tiempo de ejecución:

    El equipo servidor remoto no existe o no está disponible

    Quedo atento a tus comentarios.

    1. Hola Eduardo puedes decirme qué web te está dando ese error y qué estás intentando enviar? El error puede ser por varios motivos:

      Puedes intentar lo siguiente:

      Sustituye:

      Do Until IE.ReadyState = 4
      DoEvents
      Loop

      Por esto:

      While internet.busy
      DoEvents
      Wend

  20. Hola segu, de mucha utilidad tu post,
    Si en mi caso quisiera hacer que se rellenen los campos de una pagina que ya tenga abierta en vez de abrir una nueva, como seria?

  21. Hola Segu, Podría utilizar este código para encontrar información específica de una fila por medio de un ID, por ejemplo, en la columna A de un excel poner 12345, y que al escribirlo en un input y le de enviar me aparezca la información de la fila donde está ese ID

  22. Utilize tu código, hice los cambios, pero me sale rerrorcde ejecución.en la línea donde puse el ID vFACTURACOMENTARIOS

    Me puedes ayudar??

    Sub CARGAR_DATOS_WEB()

    Dim IE As Object

    Application.ScreenUpdating = False

    ‘Creamos objeto internet explorer

    Set IE = CreateObject(«InternetExplorer.Application»)

    ‘abrimos web

    IE.navigate «http://IPOS/CalculoOtros.aspx»

    ‘esperamos a que se carguen todos los elementos

    Do Until IE.ReadyState = 4

    DoEvents

    Loop

    ‘si necesitamos más tiempo lo podemos configurar aquí

    Application.Wait (Now + TimeValue(«0:00:01»))

    ‘localizamos el ID que hace referencia al cuadro de búsqueda

    ‘esto lo hacemos buscando en el código HTML de la página web

    ‘e igualamos el valor de la celda para realizar la búsqueda

    IE.document.getElementById(«vFACTURACOMENTARIOS»).Value = «DATOS DE EXCEL IMPORTADO» ‘

    ‘también buscamos ID correspondiente al botón para buscar el valor

    ‘IE.document.getElementById(«searchsubmit»).Click

    ‘hacemos visible la web.

    IE.Visible = True

    Set IE = Nothing

    Application.ScreenUpdating = True

    End Sub

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies