No es inhabitual que muchas personas por razones de trabajo, estudio o personales, necesiten saber el cambio de su moneda nacional por alguna extranjera o quizá entre aquellas. Hoy en día, y con la masificación del uso de internet, es muy fácil encontrar miles de webs que realizan el cambio de modo rápido e incluso de forma gratuita, pero veamos cómo podemos tener esto en nuestro archivo de Excel.
Lo primero es mencionar que usaremos el objeto Internet Explorer que, si bien en ocasiones puede ser un poco lento, es más fácil de entender y usar (Enlace). Segundo, para el ejercicio vamos a usar la siguiente web: Enlace. Y tercero e importante, para tener los tipos de moneda vamos a usar el estándar internacional ISO 4217 que fue creado por la ISO con el objetivo de definir códigos de tres letras para todas las divisas del mundo (Enlace).
Ahora veamos como funciona la web de cambio. Si entramos a ella, ingresamos un monto y elegimos los tipos de moneda:
Al darle clic al botón correspondiente nos hará el cambio de divisas solicitado.
Lo que más nos interesa es el enlace generado. Veámoslo con detalle:
https://www.xe.com/es/currencyconverter/convert/?Amount=100&From=PEN&To=USD
Como quizás ya se dieron cuenta, aparece el monto (100), así como el código de las dos monedas seleccionadas (PEN y USD). Si prueban más montos y monedas verán el mismo efecto. Ojo con algo importante, dicha web solo acepta la coma (,) como separador de decimales, nunca el punto (.). Entonces, si logramos reemplazar el monto y los códigos con los que necesitemos, y lo enviamos a Internet Explorer, tendremos los resultados que necesitamos.
Para los códigos de las monedas podemos conseguirlos de enlace respectivo que he compartido líneas arriba de tal modo que en una hoja (que yo he llamado “Códigos”) tendremos algo así:
Creen un Userform y agréguenle un TextBox y dos Combobox (y algunos Labels como título y sub títulos, si desean claro).
Como vieron yo en mi hoja “Códigos” tengo tres columnas: Código (que es el que más nos interesa), divisa (moneda) y el país; por ende, en la propiedad ColumnCount he colocado 3. Para llenarlos he usado el evento Initialize del Userform.
Private Sub UserForm_Initialize()
Me.CmbCodigos.RowSource = "=Códigos!A2:C180"
Me.CmbCodigos2.RowSource = "=Códigos!A2:C180"
End Sub
Con el TextBox vamos a hacer que solamente acepte números y la coma decimal (no olviden que la web no acepta punto como separador de decimales) haciendo uso de su evento KeyPress. Ah, por cierto, solo dejaremos que se ingrese una coma como máximo.
Private Sub TxtMoneda_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 44 Then
KeyAscii = 0
End If
End Sub
También agregaremos algunos Label más para los resultados obtenidos, así como un botón.
Ahora en el evento Click del botón vamos a agregar tres variables que reemplazarán al monto y las dos divisas a reemplazar para usar el mismo enlace que obtuvimos líneas arriba. Además, vamos a obtener los valores del cambio y pasarlos a nuestros Label. Como ya en otro artículo he explicado como usar los valores de los elementos/objetos de la web, aquí simplemente los colocaré directamente. Entonces, el código quedará así:
Private Sub CmdCambio_Click()
Dim IE As Object
Dim MiMonto$, maCambiar$, mCambio$, MiURL$
If TxtMoneda = "" Or CmbCodigos = "" Or CmbCodigos2 = "" Then
MsgBox "No dejes campos en blanco", vbOKOnly, "Todo Sobre Excel"
TxtMoneda.SetFocus
Exit Sub
End If
Application.Cursor = xlWait
Set IE = CreateObject("InternetExplorer.Application")
Let MiMonto = TxtMoneda: Let maCambiar = CmbCodigos: Let mCambio = CmbCodigos2
Let MiURL = "https://www.xe.com/es/currencyconverter/convert/?Amount=" & MiMonto & "&From=" & CmbCodigos & "&To=" & CmbCodigos2
IE.Navigate MiURL
Do Until IE.ReadyState = 4
DoEvents
Loop
Label6 = IE.document.getElementsByClassName("converterresult-conversionTo")(0).innerText
Label7 = IE.document.getElementsByClassName("sc-EHOje lkcPkj")(0).innerText & _
vbNewLine & IE.document.getElementsByClassName("sc-EHOje lkcPkj")(1).innerText
IE.Quit
Application.Cursor = xlDefault
Set IE = Nothing
End Sub
Si todo quedó bien obtendremos un resultado de este estilo:
Y eso es todo por hoy, hasta la próxima.
.Abraham Valencia
hello, there is a way to change it to work in chrome. thank you
ResponderBorrar