Rellenar formulario web html desde Excel

Quiero rellenar un formulario web desde unos datos de excel y luego imprimir la web. He aplicado la siguiente macro y me funciona, pero me gustaría poder aplicarla para cada fila de datos y se abriera la web o que cuando la cierre se aplique la macro a la siguiente fila de dato y que hiciera click en el botón imprimir de la web. Supongo que será posible pero me pierdo...

Datos excel:

Botón imprimir de la web:

MACRO VISUAL BASIC:

Sub CARGAR_DATOS_WEB()
Dim IE As Object
Application.ScreenUpdating = False
Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "http://ec.europa.eu/taxation_customs/vies/vatRequest.html"
Do Until IE.ReadyState = 4
DoEvents
Loop
IE.document.getElementById("countryCombobox").Value = Range("A2").Value
IE.document.getElementById("number").Value = Range("B2")
IE.document.getElementById("requesterCountryCombobox").Value = "ES"
IE.document.getElementById("requesterNumber").Value = "BXXXXXxx"
IE.document.getElementById("submit").Click
IE.document.getElementById("img").Click
IE.Visible = True
Set IE = Nothing
Application.ScreenUpdating = True
End Sub

1 respuesta

Respuesta
1

[Hola

Sobre lo de las filas, la verdad es bastante simple, basta colocar todo en algún bucle. Sobre imprimir, el botón de esa web lo que hace es hace un llamado a JavaScript. Otro dilema es que al hacer click al botón "Comprobar" se carga otra web que yo no puedo conocer por no tener los datos reales, así que tú tendrás que agregarla pero dejo ahí la que creo puede ser. Ah, por cierto, eso de imprimir en realidad lo que hace es que se muestra el cuadro de diálogo correspondiente ¿o tu idea es mandar directamente a la impresora?

Sub CARGAR_DATOS_WEB()
Dim IE As Object
Dim UltimaFila As Long
Dim Celda As Range
Application.ScreenUpdating = False
Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "http://ec.europa.eu/taxation_customs/vies/vatRequest.html"
Do Until IE.ReadyState = 4
    DoEvents
Loop
Let UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row
For Each Celda In Range("A2:" & UltimaFila)
    With IE
        .document.getElementById("countryCombobox").Value = Celda.Value
        .document.getElementById("number").Value = Celda.Offset(0, 1).Value
        .document.getElementById("requesterCountryCombobox").Value = "ES"
        .document.getElementById("requesterNumber").Value = "BXXXXXxx"
        .document.getElementById("submit").Click
        'aquí hay que cargar la web que comprueba los datos
        '.navigate "http://ec.europa.eu/taxation_customs/vies/vatResponse.html"
        'java para imprimir
        '.Navigate ("javascript:tools.printPage()")
        .navigate "http://ec.europa.eu/taxation_customs/vies/vatRequest.html"
        Do Until .ReadyState = 4
            DoEvents
        Loop
    End With
Next Celda
'IE.Visible = True
IE.Quit
Set IE = Nothing
Application.ScreenUpdating = True
End Sub

Comentas

Abraham Valencia

Lo de imprimir es para que me muestre solo el cuadro de diálogo.

La página web que te he puesto es la correcta, lo único que el BXXXX es nuestro CIF.

También ahora me da el error 1004 aquí:

For Each Celda In Range("A2:" & UltimaFila)

Reemplaza por:

For Each Celda In Range("A2:A" & UltimaFila)

Abraham Valencia

Ahora no me da error pero no me abre Internet Explorer, antes si, no se que puede pasar. El CIF lo he puesto correctamente:

Sub CARGAR_DATOS_WEB()
Dim IE As Object
Dim UltimaFila As Long
Dim Celda As Range
Application.ScreenUpdating = False
Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "http://ec.europa.eu/taxation_customs/vies/vatRequest.html"
Do Until IE.ReadyState = 4
DoEvents
Loop
Let UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row
For Each Celda In Range("A2:A" & UltimaFila)
With IE
.document.getElementById("countryCombobox").Value = Celda.Value
.document.getElementById("number").Value = Celda.Offset(0, 1).Value
.document.getElementById("requesterCountryCombobox").Value = "ES"
.document.getElementById("requesterNumber").Value = "BXXXXXX"
.document.getElementById("submit").Click
'aquí hay que cargar la web que comprueba los datos
'.navigate "http://ec.europa.eu/taxation_customs/vies/vatResponse.html"
'java para imprimir
'.Navigate ("javascript:tools.printPage()")
.navigate "http://ec.europa.eu/taxation_customs/vies/vatRequest.html"
Do Until .ReadyState = 4
DoEvents
Loop
End With
Next Celda
'IE.Visible = True
IE.Quit
Set IE = Nothing
Application.ScreenUpdating = True
End Sub

[Hola

Debiste ver todas las líneas y sobre todo, entender cada una, no solo copiar/pegar. Esta línea:

'IE.Visible = True

Tiene un apostrofe, solo bórralo. Por cierto, mejor borra la línea "IE.Quit", quizá no "ver" el IE te cause cierta confusión.

Abraham Valencia

Había quitado el apostrofe pero no me habría la página no se por qué. Ahora tengo otro problema porque Internet Explorer si que me abre pero no me enlaza los datos ni se validan los datos en la página web. 

Tendría que abrirse la página con los datos tantas veces como filas de datos tengo y solo se abre una vez.

Perdona mi ignorancia pero no me dedico a esto y lo que hago es trastear un poco las macros que me encuentro he intentar entenderlas.

[Hola nuevamente

Sin datos reales yo no puedo probar tal cual la web; por eso puse también un enlace con apostrofe pues es la web que quizá hay que cargar como paso previo a todo, pero repito, sin datos reales yo no puedo probar, solo tú podrías hacerlo. Quítale el apostrofe a esa web a ver si es.

Abraham Valencia

¿Hay alguna manera de que te mande el archivo de forma privada con los datos?

Coloca el archivo en algún "Drive" (Google Drive, OneDrive, DropBox, etc.), si quieres mantenerlo privado restringe el ingreso, envía el enlace por aquí y al intentar entrar yo, te llegará un correo para que me autorices; te darás cuentas que es mi correo al instante, yo sé porque te lo digo.

Abraham Valencia

¿Cabría la posibilidad de enlazarlo con Google Chrome?

Aquí va:

https://drive.google.com/file/d/1I4_I7WzRqwE3xWjyVPdy9ly1N5Znlcj0/view?usp=sharing

Ya que quiere que salga el cuadro de diálogo de imprimir, de alguna manera hay que mantener el control de la carga, lo he hecho mediante un MsgBox que si bien puede ser medio "entrometido", da tiempo para que el bucle se complete sin problema:

Sub CARGAR_DATOS_WEB()
Dim IE As Object
Dim UltimaFila As Long
Dim Celda As Range
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "http://ec.europa.eu/taxation_customs/vies/vatRequest.html"
Do Until IE.ReadyState = 4
    DoEvents
Loop
IE.Visible = True
Let UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row
For Each Celda In Range("A2:A" & UltimaFila)
    With IE
        .document.getElementById("countryCombobox").Value = Celda.Value
        .document.getElementById("number").Value = Celda.Offset(0, 1).Value
        .document.getElementById("requesterCountryCombobox").Value = "ES"
        .document.getElementById("requesterNumber").Value = "B54699756"
        .document.getElementById("submit").Click
        Application.Wait (Now + TimeValue("00:00:01"))
        .Navigate ("javascript:tools.printPage()")
        MsgBox "¿Recordaste imprimir??"
        .Navigate "http://ec.europa.eu/taxation_customs/vies/vatRequest.html"
        Do Until .ReadyState = 4
            DoEvents
        Loop
    End With
Next Celda
Set IE = Nothing
End Sub

Saludos]

Abraham Valencia

Buenos días!

Ahora cuando ejecuto la macro me da este error:

Y además, se me abre una página de Internet Explorer donde me valida el primer NIF pero no consigo que me abra otra página validando el segundo NIF...

[Hola

El archivo está infectado, según el servidor de Google y por ende no puede ser descargado.

Sobre el error, ojo con algo, después de cada comprobación de datos, primero o debes cancelar el proceso de impresión o imprimir y recién después de eso, puedes darle click al botón "aceptar" del MsgBox. Ese puede ser el problema

El segundo motivo podría ser la inestabilidad que se genera en el Internet Explorer al hacer bucles de muchos datos; se reporta que después de algunas "vueltas" da errores y no, no hay una solución específica aunque a veces funciona usar Application. Wait ( de unos dos o tres segundos - ya tienes un ejemplo ahí, puedes hacerlo tú ahora) antes del Next.

Por cierto, no, VBA solo puede interactuar con IE, no con Chrome.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas