** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Conversor Divisas
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoConversor Divisas

 Responder Responder
Autor
Mensaje
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1258
Enlace directo a este mensaje Tema: Conversor Divisas
    Enviado: 03/Noviembre/2021 a las 11:10
Buenos dias:
Por cortesía del joven Mihura puedo obtener el cambiio, de compra-venta, entre monedas
Lo obtiene del siguiente enlace:
https://www1.oanda.com/lang/es/currency/converter/
Yo lo hago a traves de su función, con un sencillo formulario con los campos "Divisa Origen" y "Divisa Destino"especificando el tipo de operacion deseada COMPRAR O VENDER.
La función de Mihura devuelve el cambiio del día
Pues bien, desde la pagina web se puede elegir a que fecha se desea realizar el cambio y me gustaria poder pasarsela desde el formulario y así obtener el resultado deseado. Porque hasta ahora necesito entrar en la pagina y ponerle yo la fecha en la que quiero la conversion.
Esto me permitiria ir creando una tabla de cambios de la que nutrirme a la hora de generar albaranes y facturas de ventas por exprtaciiones.

Saludos al Grupo
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1258
Enlace directo a este mensaje Enviado: 05/Noviembre/2021 a las 11:02
Wondows_10 vs Access_2010
Hola de nuevo
Como me tengo que declarar gran ignorante del HTML os dejo la función de origen que devuelve el cambio de moneda
Public Function CalculaDivisa(Origen As String, Destino As String) As Double
  Dim IE As InternetExplorer
    Dim HtmlDoc As HTMLDocument
    Dim inputEle As HTMLInputElement
    Dim innerBox 'As HTMLDivElement
    Dim col 'As HTMLElementCollection
    Dim div 'As HTMLDivElement
    Dim span 'As HTMLSpanElement
    Dim xArray As Variant, i As Integer, Xs As String, Divisa1 As String, Divisa2 As String
    DoCmd.Hourglass True
    Set IE = CreateObject("InternetExplorer.Application")
    IE.visible = False
    IE.Navigate "https://www1.oanda.com/lang/es/currency/converter/"

    Do While IE.ReadyState = 4: DoEvents: Loop   'Do While
    Do Until IE.ReadyState = 4: DoEvents: Loop   'Do Until

    Set HtmlDoc = IE.Document
    ' primero ponemos la cantidad que deseamos cambiar
    Set inputEle = IE.Document.getElementById("quote_amount_input")
      inputEle.value = "1"
    ' referenciamos el desplegable con la divisa 1
        Set innerBox = HtmlDoc.getElementById("scroll-innerBox-1")
        ' referenciamos controles div de clase "ltr_list_item", que son los elementos del desplegable
        Set col = innerBox.getElementsByClassName("ltr_list_item")
        For Each div In col
        ' referenciamos el elemento span nº 3 de cada div "ltr_list_item" (que es la class "code-right")
            Set span = div.getElementsByTagName("span")(2)
     ' ponemos un valor diferente al que queremos (obligamos a actualizar el campo y otros valores)
            If span.innerText <> Origen Then
                div.FireEvent ("onmouseover")
                div.FireEvent ("onclick")
                Exit For
            End If
        Next
        Set col = innerBox.getElementsByClassName("ltr_list_item")
        For Each div In col
       ' referenciamos el elemento span nº 3 de cada div "ltr_list_item" (que es la class "code-right")
            Set span = div.getElementsByTagName("span")(2)
            ' en la segunda pasada ponemos el valor que queremos
            If span.innerText = Origen Then
                div.FireEvent ("onmouseover")
                div.FireEvent ("onclick")
                Exit For
            End If
        Next
    
        ' referenciamos el desplegable con la divisa 2 y hacemos lo mismo que con la divisa 1
        Set innerBox = HtmlDoc.getElementById("scroll-innerBox-2")
        Set col = innerBox.getElementsByClassName("ltr_list_item")
        For Each div In col
            Set span = div.getElementsByTagName("span")(2)
            If span.innerText <> Destino Then
                div.FireEvent ("onmouseover")
                div.FireEvent ("onclick")
                Exit For
            End If
        Next
        Set col = innerBox.getElementsByClassName("ltr_list_item")
        For Each div In col
            Set span = div.getElementsByTagName("span")(2)
            If span.innerText = Destino Then
                div.FireEvent ("onmouseover")
                div.FireEvent ("onclick")
                Exit For
            End If
        Next
        Sleep 2000
        CalculaDivisa = IE.Document.getElementById("base_amount_input").value
    IE.Quit
    Set IE = Nothing
    DoCmd.Hourglass False
End Function
Inspecionando el campo donde se introduce la fecha compruebo que su Id es "end_date_input"
Con lo que me animé a poner en la funcion lo siguiente..
    Set inputEle = IE.Document.getElementById("end_date_input")
    inputEle.value = #10/30/2021#
Bien pues dejando la web visible veo que efectivamente introduce la fecha pero no actualiza la conversión y sigue apareciendo el cambio del dia.
Faltaria saber controlar y ejecutar el evento que desencadene el nuevo calculo tras cambiar de fecha en el formulario web.
En fin, que si alguno controla como manejar esto de las clases y coleciones le resultará mucho mas facil que a mi.
Gracias por vuestro tiempo y conocimiento
Saludos al Grupo




Editado por main - 05/Noviembre/2021 a las 11:09
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Enlace directo a este mensaje Enviado: 05/Noviembre/2021 a las 12:05
Hola.

Así a ojo.

en lugar de acceder a https://www1.oanda.com/lang/es/currency/converter/ sería más fácil si directamente accedes a https://www.oanda.com/fx-for-business/historical-rates

Luego rellenas los combos como hasta ahora y luego activas el botón download-btn

Un saludo.

Luis
El Búho es un pajarraco
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1258
Enlace directo a este mensaje Enviado: 05/Noviembre/2021 a las 13:17
Hola Ibauluz
He visto el enlace y desde luego es mas interesante ya que permite obtener los cambios para un determinado rango de fechas.
Pero estoy con el mismo problema para implementar el acceso a esos datos e incorporarlos a una tabla.
El caso es como leer la tabla de "cambios" para cada dia.
Ya antepuse que estoy verdaderamente pez en esto del HTML y lo poco que intento es por mera intuición viendo "arbolitos" de un lado y de otro.
Por eso me conformaba con dar con la solución en la pagina planteada. Me ayudaria a mejorar esa intuicion y si me animo o necesito estudiar el HTML comprenderé mejor su estructura.
Gracias por el enlace y
Saludos cordiales.
Saludos al Grupo

Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1258
Enlace directo a este mensaje Enviado: 17/Noviembre/2021 a las 14:01
Buenos dias

Este tema se puede cerrar
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1258
Enlace directo a este mensaje Enviado: 19/Noviembre/2021 a las 13:21
Hola de nuevo
Aprovecho que aún no se cerró el tema para poner el procedimiento definitivo
Public Function CalculaDivisa(Origen As String, Destino As String, Fec As Date, Optional Canti As Double = 1) As Double
  Dim IE As InternetExplorer
    Dim HtmlDoc As HTMLDocument
    Dim inputEle As HTMLInputElement
    Dim innerBox 'As HTMLDivElement
    Dim col 'As HTMLElementCollection
    Dim div 'As HTMLDivElement
    Dim span 'As HTMLSpanElement
    Dim xArray As Variant, i As Integer, Xs As String, Divisa1 As String, Divisa2 As String
    DoCmd.Hourglass True
    Set IE = CreateObject("InternetExplorer.Application")
    IE.visible = True
    IE.Navigate "https://www1.oanda.com/lang/es/currency/converter/"
    Do While IE.ReadyState = 4: DoEvents: Loop   'Do While
    Do Until IE.ReadyState = 4: DoEvents: Loop   'Do Until
    Set HtmlDoc = IE.Document
    'Introducimos la fecha de cambio
     Set inputEle = IE.Document.getElementById("end_date_input")
       inputEle.focus
       inputEle.value = Fec
       inputEle.Click  'O bien, inputEle.FireEvent ("OnClick")
       'primero ponemos la cantidad que deseamos cambiar
    IE.visible = False
    Set inputEle = IE.Document.getElementById("quote_amount_input")
    inputEle.value = Canti
        ' referenciamos el desplegable con la divisa 1
        Set innerBox = HtmlDoc.getElementById("scroll-innerBox-1")
        ' referenciamos controles div de clase "ltr_list_item", que son los elementos del desplegable
        Set col = innerBox.getElementsByClassName("ltr_list_item")
        For Each div In col
            ' referenciamos el elemento span nº 3 de cada div "ltr_list_item" (que es la class "code-right")
            Set span = div.getElementsByTagName("span")(2)
            Debug.Print span, span.innerText
            ' ponemos un valor diferente al que queremos (obligamos a actualizar el campo y otros valores)
            If span.innerText <> Origen Then
                div.FireEvent ("onmouseover")
                div.FireEvent ("onclick")
                Exit For
            End If
        Next
        Set col = innerBox.getElementsByClassName("ltr_list_item")
        For Each div In col
            ' referenciamos el elemento span nº 3 de cada div "ltr_list_item" (que es la class "code-right")
            Set span = div.getElementsByTagName("span")(2)
            ' en la segunda pasada ponemos el valor que queremos
            If span.innerText = Origen Then
                div.FireEvent ("onmouseover")
                div.FireEvent ("onclick")
                Exit For
            End If
        Next
      ' referenciamos el desplegable con la divisa 2 y hacemos lo mismo que con la divisa 1
        Set innerBox = HtmlDoc.getElementById("scroll-innerBox-2")
        Set col = innerBox.getElementsByClassName("ltr_list_item")
        For Each div In col
            Set span = div.getElementsByTagName("span")(2)
            If span.innerText <> Destino Then
                div.FireEvent ("onmouseover")
                div.FireEvent ("onclick")
                Exit For
            End If
        Next
 
        Set col = innerBox.getElementsByClassName("ltr_list_item")
        For Each div In col
            Set span = div.getElementsByTagName("span")(2)
            If span.innerText = Destino Then
                div.FireEvent ("onmouseover")
                div.FireEvent ("onclick")
                Exit For
            End If
        Next
                
       Sleep 2000
    CalculaDivisa = IE.Document.getElementById("base_amount_input").value
    IE.Quit
    Set IE = Nothing
    DoCmd.Hourglass False
End Function

Funciona, pero con un pequeño problemilla y es que si dejo el IE no visible desde el principio, entonces no lo calcula con la fecha desada y me dá el valor de hoy.
Sabeis como arreglar esto.
Saludos.


Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 19/Noviembre/2021 a las 13:25
Pon el control de tamaño 0.01 x 0.01 visible y ya tá  ... Tongue

Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1258
Enlace directo a este mensaje Enviado: 19/Noviembre/2021 a las 13:32
Bueno, sinó tien otra solución tambien valdráClap
Gracias, joven.
Ahora ya se puede cerrar
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable