Un lector solicitaba ayuda para traducir los contenidos de nuestras celdas.. preguntando si existía alguna función en Excel que realzara tal acción.
Aunque no existe una función estándar que haga lo que necesitamos, buscando por la web encontré un código de una UDF (función personalizada) que adapté a la necesidad.
El código siguiente requiere la instalación de la Referencia: Microsoft Internet control, ya que vamos a emplear el traductor de Google, accediendo al formulario de esa web.
Al realizar una conexión a Internet, el proceso de traducción para cada celda se demora algo.. pero al menos tenemos una traducción válida (más o menos.. ya sabemos todos cómo funciona el traductor de Google...)
La función solo requiere dos argumentos. El primero la celda a traducir, y el segundo el código del idioma al que queremos traducirlo (por defecto está al español).
Más abajo en este post aparece una lista de los códigos identificados por Google.
Insertamos el código de la función en un módulo estándar de nuestro proyecto de VBA desde el editor de VB:
Para localizar el código HTML del elemento por Id podremos seleccionar el código traducido y presionar Inspeccionar elemento desde el navegador. En este caso sería:
Un ejemplo del uso de la función 'Traducir':
Finalmente dejo aquí el listado de los códigos de idioma de Google:
Aunque no existe una función estándar que haga lo que necesitamos, buscando por la web encontré un código de una UDF (función personalizada) que adapté a la necesidad.
El código siguiente requiere la instalación de la Referencia: Microsoft Internet control, ya que vamos a emplear el traductor de Google, accediendo al formulario de esa web.
Al realizar una conexión a Internet, el proceso de traducción para cada celda se demora algo.. pero al menos tenemos una traducción válida (más o menos.. ya sabemos todos cómo funciona el traductor de Google...)
La función solo requiere dos argumentos. El primero la celda a traducir, y el segundo el código del idioma al que queremos traducirlo (por defecto está al español).
Más abajo en este post aparece una lista de los códigos identificados por Google.
Insertamos el código de la función en un módulo estándar de nuestro proyecto de VBA desde el editor de VB:
Function Traducir(texto_a_traducir As String, Optional CodSalida As String = "es") As String 'Emplearemos el traductor de Google a través de Internet Explorer... 'OJO!!! MUY IMPORTANTE: Debe estar seleccionada la Referencia > Microsoft Internet Control Dim IE As Object, i As Long Dim IdiomaOriginal As String, IdiomaSalida As String Dim texto_traducido As String, Txt_Limpio 'Abrimos Internet Explorer Set IE = CreateObject("InternetExplorer.application") 'Elegimos el idioma original del texto a traducir 'lo dejamos en Auto para que el sistema detecte cuál es... IdiomaOriginal = "auto" 'Elegimos el idioma al que queremos traducirlo 'en este caso al español (es) Ver listado códigos de idioma en el post. IdiomaSalida = CodSalida 'hacemos invisible el navegador IE.Visible = False 'Abrimos la web del traductor de Google IE.navigate "http://translate.google.com/#" & IdiomaOriginal & "/" & IdiomaSalida & "/" & texto_a_traducir 'trabajamos sobre el traductor... 'ver también esta entrada del blog 'http://excelforo.blogspot.com.es/2014/10/vba-rellenando-un-formulario-web-html.html Do Until IE.ReadyState = 4 DoEvents Loop Application.Wait (Now + TimeValue("0:00:5")) Do Until IE.ReadyState = 4 DoEvents Loop 'Obtenemos el texto traducido del campo de Google 'Result_box' 'sería algo así: <span class="hps">texto traducido</span> 'y lo dejamos limpio del código o etiquetas de html 'además con Split conseguimos separarlo en una matriz de valores. Txt_Limpio = Split(Application.WorksheetFunction.Substitute(IE.Document.getElementById("result_box").innerHTML, "</SPAN>", ""), "<") 'en este paso recorremos los elementos de la matriz de elementos resultantes de la traducción 'y lo recomponemos en una frase (si fuera el caso) For j = LBound(Txt_Limpio) To UBound(Txt_Limpio) texto_traducido = texto_traducido & Right(Txt_Limpio(j), Len(Txt_Limpio(j)) - InStr(Txt_Limpio(j), ">")) Next 'cerramos Internet Explorer IE.Quit 'devolvemos el texto traducido a la hoja de cálculo Traducir = texto_traducido End Function
Para localizar el código HTML del elemento por Id podremos seleccionar el código traducido y presionar Inspeccionar elemento desde el navegador. En este caso sería:
Un ejemplo del uso de la función 'Traducir':
Finalmente dejo aquí el listado de los códigos de idioma de Google:
Buenos dias, muchas gracias por el codigo a la primera no me funciono pero despues de unos cambios menores funciona perfectamente. Los cambios fueron:
ResponderEliminar1. la pagina web me toco ponerle translate.google.es
2. Despues del loop puse un msgbox que dijera que se realizo la traducción de no ponerlo me sale en blanco el resultado
Nuevamente muchas gracias,
Gracias por el comentario Juan Pablo!
Eliminarla verdad es que el código subido estaba probado y funcionando...
No parece los cambios que has realizado sean sustanciales para un mejor funcionamiento... pero en todo caso, si con ellos lo has conseguido pues mejor :D
Un cordial saludo!!!
Hola, gracias por la función. Estoy aprendiendo algo de macros, y me ha resultado muy interesante.
EliminarAl no salirme a la primera, he seguido el primer paso de Juan Pablo y ha sido suficiente. Seguiré este blogs por lo que me aporta.
Un saludo.
;-)
EliminarSaludos
Hola buen día, me gustaría saber si aun funciona, he intentado pero no traduce la celda se queda #¡VALOR!
ResponderEliminarHola,
Eliminarya no son válidas las instrucciones de la web..
Google cambió su herramienta de traducción y cómo la gestionaba
habría que reescribir el código con las nuevas url de búsqueda y etiquetas html de recuperación
Saludos
gracias por responder, y puedes decirme que cambiar? es que no se de programación
EliminarTrataré de exponer los cambios en cuanto me sea posible
Eliminar;-)
Saludos
Hola, alguien que me ayude a obtener el nuevo código? Gracias
EliminarBuena tarde, La solución más cercana ha sido la descrita originalmente en éste blog, pero también me sale el mismo error de (#¡VALOR!), entiendo muy bien que las instrucciones ya no son válidas debido al cambio de la herramienta por parte de Google, agradecería mucho a quién pueda compartir el nuevo código para vincularlo a VBA y actualizar el complemento. Muchas Gracias.
ResponderEliminar