Este artículo se lo debo a José Luis Posadilla, un traductor a quien no tengo el gusto de conocer en persona, pero que en este artículo me dio la idea para cambiar el idioma en Word de todos los cuadros de texto, automáticamente, por supuesto, mediante una macro VBA.
En ese artículo del año pasado se trataba de cambiar el idioma de todos los cuadros de texto de una presentación de PowerPoint, y José Luis escribió un comentario en el que decía usar una macro VBA que hacía lo mismo, pero en Microsoft Word.
Le pregunté si no le importaba compartir su macro, él accedió, así que aquí la tienes, con algún cambio.
Gracias, José Luis, por la idea; y a los demás, que la disfrutéis…
Planteamiento del problema
Imagínate que tienes un documento de Word, escrito en inglés:
Como ves, tiene tanto texto corrido como cajas o cuadros de texto.
Y que lo traduces a español:
¿Te fijaste en el subrayado curvilíneo de color rojo o verde debajo de las palabras en español?
Este subrayado de color rojo sale porque el idioma de tu texto traducido sigue siendo inglés, y es evidente que Word no tiene esas palabras españolas en su diccionario de inglés.
Cambiar el idioma del texto corrido en Word
Es posible que Word detecte automáticamente el texto corrido como español, y desaparezcan los subrayados en rojo, pero no lo hará con los cuadros de texto.
De todas formas, es muy fácil cambiar el idioma del texto corrido: simplemente, selecciónalo con el ratón, y pulsa el botón que está en la barra de estado de Word (parte inferior izquierda):
Como ves, el idioma actual del texto seleccionado es inglés de Estados Unidos.
Para cambiarlo, simplemente selecciona Español en el cuadro de diálogo Idioma que se abre:
Ahora, en la barra de estado de Word te aparecerá Español:
Nota: para el artículo he elegido Español (alfabetización internacional), pero puedes elegir otro idioma, como Español (México) o Español (Argentina), etc. Más abajo, vuelvo sobre esto…
Solo con este sencillo paso desaparece el subrayado rojo del texto corrido, pero, ¿qué hay del texto dentro de los cuadros de texto?
¡Sigue con el molesto subrayado!
🙁
Desde mi punto de vista, no has terminado aún tu trabajo, porque:
- Antes de entregar tu traducción al cliente, deberías pasar el corrector ortográfico y gramatical, y para eso, el texto no puede estar configurado como inglés.
- Un documento con todo ese subrayado hace daño a la vista; bueno, quizás exagero un poco, pero estarás de acuerdo en que es molesto, ¿verdad? En más, estoy convencido de que entregar un trabajo así es arriesgarse a que tu cliente se lo tome mal…
Pero no te preocupes, porque hay una forma automática de terminar al 100% tu trabajo y que tu cliente se enamore de ti para siempre (no no exagero).
Sigue leyendo, por favor, que entramos en materia.
Cambio manual de idioma
Una forma de cambiar el idioma de un cuadro de texto sería:
- seleccionar el cuadro de texto con el ratón (una tarea que a veces no es fácil);
- cambiar el idioma a Español (según el mismo procedimiento indicado arriba).
No es complicado, pero si hay muchos cuadros de texto, deberías repetir este procedimiento para cada cuadro de texto, y ¡esto puede ser una labor muy, muy ingrata!
Afortunadamente, tenemos las macros, ya sabes, esas cosas que las escribes una vez, y las puedes ejecutar las veces que quieras.
Macro VBA para cambiar el idioma de todos los cuadros de texto
Como manualmente es una labor de chinos, veamos cómo hacerlo con una macro, en concreto, con una macro escrita en VBA, un lenguaje de programación que funciona en las aplicaciones del paquete ofimático Microsoft Office.
Es posible que puedas hacer una macro parecida para las aplicaciones LibreOffice, pero sinceramente, lo desconozco…
La primera macro que cambia automáticamente el idioma de los cuadros de texto es:
Sub CambiarIdiomaCajasDeTextoWord() Dim forma As Shape 'Desmarcar la casilla "Detectar idioma automáticamente" Application.CheckLanguage = False For Each forma In ActiveDocument.Shapes If forma.Type = msoTextBox Then forma.Select Selection.LanguageID = 3082 'Marcar la casilla "No revisar la ortografía ni la gramática" Selection.NoProofing = False End If Next forma End Sub
Descárgate esta primera macro.
- La línea 1 es el nombre de la función CambiarIdiomaCajasDeTextoWord, que es la que deberás ejecutar dentro de Word para que te cambie automáticamente todos los cuadro de texto al idioma que quieras.
- La línea 2 declara la variable forma de tipo Shape.
- La línea 4 marca la casilla Detectar idioma automáticamente del cuadro de diálogo Idioma. Tienes arriba una captura de este cuadro de diálogo.
- La línea 6 va pasando por todas las formas que haya en el documento de Word.
- La línea 7 comprueba si la forma es un cuadro de texto. Si es así, sigue con la línea 8; si no es un cuadro de texto, se pasa a la siguiente forma del documento.
- La línea 8 selecciona el cuadro de texto.
El corazón de la macro es la línea 9: Selection.LanguageID = 3082
Lo que hace esta línea 9 es asignar un código de idioma al cuadro de texto. El código 3082 corresponde al español (alfabetización internacional).
- La línea 12 marca la casilla No revisar la ortografía ni la gramática del cuadro de diálogo Idioma (ya sabes que lo tienes arriba).
Si necesitas otro idioma, te voy a dar dos enlaces para que encuentres el código de tu idioma:
- http://msdn.microsoft.com/es-es/goglobal/bb964664.aspx
- https://msdn.microsoft.com/en-us/library/microsoft.office.core.msolanguageid.aspx
Si abres el primer enlace pues ver que el código 3082 corresponde con Español (alfabetización internacional), o que 2058 corresponde a Español (México). Solo tienes que cambiar tu macro con el numerito de tu idioma.
Fácil, ¿verdad?
Si abres el segundo enlace ves identificadores de idioma, pero al final es lo mismo: por ejemplo, la constate msoLanguageIDSpanishModernSort corresponde a Español (alfabetización internacional), o msoLanguageIDMexicanSpanish corresponde a Español (México).
En la anterior macro VBA, podrías sustituir 3082 por msoLanguageIDSpanishModernSort y funcionaría exactamente igual.
Vale, pues de una u otra forma, ya puedes saber el numerito o el identificador que necesitas.
Bien, pues esto te da una idea de cómo funciona básicamente la macro para cambiar el idioma en Word.
Ahora, te daré la macro definitiva.
Macro VBA avanzada
La macro anterior funciona sin problemas, pero si quieres adornarla un poco más, aquí tienes otra macro:
' https://www.gonduana.com/cambiar-el-idioma-en-word-texto-corrido-cuadros-de-texto/ Sub CambiarIdiomaCajasDeTextoWord() Dim forma As Shape Dim cadena As String Dim contador As Integer Dim HoraInicio As Double, HoraFinal As Double 'Guarda la hora de inicio de la macro VBA en la variable "HoraInicio" HoraInicio = Timer 'Puesta a cer de la variable contador contador = 0 'Desmarcar la casilla "Detectar idioma automáticamente" Application.CheckLanguage = False For Each forma In ActiveDocument.Shapes If forma.Type = msoTextBox Then forma.Select Selection.LanguageID = 3082 'Marcar la casilla "No revisar la ortografía ni la gramática" Selection.NoProofing = False 'Incrementar el contador de cuadros texto contador = contador + 1 End If Next forma 'Guarda la hora final de la macro VBA en la variable "HoraFinal" HoraFinal = Timer 'Cadena de texto que nos mostrará al final 'con el tiempo que ha tardado 'y el número de cuadros de texto cambiados de idioma cadena = "Terminado el cambio de idioma." & Chr(10) & Chr(10) _ & "Ejecutado en: " & HoraFinal - HoraInicio & " segundos" _ & Chr(10) & Chr(10) _ & "Cuadros de texto cambiados: " & contador MsgBox (cadena) End Sub
Comparada con la anterior, esta macro simplemente te avisa de que ha terminado y te muestra un mensaje informativo con:
- el tiempo que ha tardado;
- el número de cuadros de texto que ha cambiado.
Hice una prueba con un documento de 162 cuadros de texto, y esta macro los cambió todos en 11 segundos.
Como prueba, aquí tienes la captura de pantalla:
Nota importante: al igual que la macro para cambiar el idioma en PowerPoint, esta macro tampoco funcionará en los cuadros de texto que estén agrupados; se los saltará y cambiará solo los cuadros de texto que estén desagrupados.
Si tienes una idea de cómo mejorar este aspecto, no dudes que estaríamos todos muy contentos de que lo compartieras…
🙂
Preparar y ejecutar la macro
Si ya sabes cómo ejecutar macros, puedes saltarte esta sección; si no, te propongo un procedimiento para:
- preparar la macro;
- ejecutar la macro.
1.- Preparar la macro
Primero copia el código de la macro al Portapapeles de Windows (CTRL+C). Ya sabes que tienes el código arriba (puedes elegir entre el básico y el avanzado).
Después abre la cinta Programador de Microsoft Word y pulsa el botón Visual Basic:
Se abrirá ahora el Editor de Visual Basic para Aplicaciones:
Selecciona ahora la plantilla Normal a el panel izquierda. Haz doble clic sobre ThisDocument y pega la macro (CTRL+V) copiada antes en el documento que se abre a la derecha. Antes de salir, no olvides guardar con el botón de siempre (o con el atajo CTRL+S).
A partir de ahora, ya tienes preparada esta macro para cambiar el idioma de los cuadros de texto en cualquier momento.
2.- Ejecutar la macro
Para ejecutar la macro, en cualquier momento que la necesites, abre la cinta Programador de Microsoft Word y pulsa el botón Macros:
(o bien pulsa el atajo de teclado ALT+F8), para que se muestre el siguiente cuadro de diálogo:
En este cuadro de diálogo:
- en la lista Macros en, asegúrate de que seleccionas la plantilla Normal (donde está tu macro para cambiar el idioma);
- en Nombre de macro, asegúrate de que tienes seleccionada la macro llamada CambiarIdiomaCajasDeTextoWord (ten en cuenta, que en tu plantilla Normal puedes tener muchas macros);
- pulsa el botón Ejecutar;
- Al cabo de unos segundos, depende del número de cuadros de texto que tenga el documento, la macro terminará.
¡Y ya está!
Fácil, ¿verdad?
Nota sobre este procedimiento: Es buena idea guardar en la plantilla Normal las macros que vayas creando o encontrando por internet. La mala noticia es que no es nada raro que se dañe esta plantilla Normal (por motivos que desconozco, pero ciertamente sucede demasiado a menudo). Cuando sucede esto, perderás todo lo que tengas ahí guardado (estilos, macros, etc.). Por este motivo, te recomiendo tener las macros en un archivo TXT que haga las veces de copia de seguridad.
Si algún día se te daña la plantilla Normal (no se sabe cuándo, pero sucederá, eso no lo dudes), Word te avisará de ello y colocará automáticamente una plantilla Normal sin nada dentro; o sea, que habrás perdido todo lo que había dentro, pero ya sabes que en un minuto puedes volver a pegar las macros que tenías guardadas en la copia de seguridad.
Avisado estás…
Conclusiones de la macro VBA para cambiar el idioma en Word
Has visto lo fácil que es utilizar la macro para cambiar el idioma en Word de todos lo cuadros de texto del documento.
Es un proceso muy rápido, y en cuestión de segundos, la macro te hace algo que podrías tardar varios minutos si lo haces a mano.
Además, tienes la ventaja de que la macro no se salta ningún cuadro de texto y lo hace sin fallos.
A ver, me preguntan que cómo sería la macro que cambia también el idioma en el texto corrido, para que la macro cambie el idioma automáticamente tanto los cuadros de texto como el texto corrido.
Pues bien, sería cuestión de añadir estas 3 líneas al código anterior:
Selection.WholeStory
Selection.LanguageID = 3082
Selection.NoProofing = False
Por ejemplo, se puede insertar después de la línea: Application.CheckLanguage = False
- La primera línea selecciona todo el texto corrido del documento. Equivale al atajo de teclado CTRL+E (o CTRL+A, si tienes la versión inglesa de Word).
- La segunda línea de código cambia el idioma de la selección, es decir, todo el texto corrido, a español de España.
- La tercera línea ya la explicamos arriba, en el artículo.
Gracias Jesús, funciona perfectamente. Eres un as !!
José Luis
😉
Era fácil…
Me ha gustado muchísimo el que haya compartido este conocimiento porque tengo problemas para traducir otro idioma diferente del español. Soy analfabeta en el asunto. He seguido sus pasos pero no me funciona ni en Word o Powerpoint 2013. Qué me aconseja?
Hola, Nacy:
En este enlace tienes los códigos que necesitas para todos los idiomas.
https://support.office.com/es-es/article/C%C3%B3digos-de-idioma-de-los-archivos-de-un-idioma-espec%C3%ADfico-16102229-37c5-4ad5-92b1-0438f6304114
¡Suerte!
… Jesús Prieto …
Hola Jesús, ¿cómo estás? Acabo de conocer tu blog y me ha parecido maravilloso. Soy traductora Freelance desde hace 5 años y durante este tiempo he desarrollado mi propia lista de herramientas de word que nos ayudan mucho a ahorrar tiempo durante la traducción pero todavía me falta mucho por aprender. Intenté usar la macro para cambiar el idioma de los cuadros te texto y no me funcionó, me sale el siguiente aviso: Compile error:Method or data member not found. AL hacer clic en OK, me marca con una flecha amarilla la primera línea de los comandos: Sub CambiarIdiomaCajasDeTextoWord(). La verdad es que nunca he hecho ninguna macro y estoy muy perdida. Además utilizo una laptop Mac que siempre tienen algunos problemas de incompatibilidad.
Muchas gracias por tu ayuda, Luisa D´Angelo
Hola, Luisa:
No sé el motivo de que no te funcione la macro. Lo cierto es que otros comentarios del artículo dicen lo mismo: que no les funciona.
Quizás sea algo de Office para Mac, pero de verdad que lo desconozco y no lo puedo comprobar porque no tengo un Mac…
Un abrazo.
… Jesús Prieto …
Jesús, hoy he descubierto tu página (buscando un uso profundo de comodines de Word), y me ha parecido muy esclarecedora y muy bien documentada.
En "pago" 😉 a tu esmero en la redacción de los artículos, resuelvo tu duda sobre como solucionar el problema con los shapes agrupados, en este documento:
Básicamente es la función CrawlShapes la que soluciona la papeleta.
Por mi parte, estoy intentando hacer las traducciones directamente desde el Excel sin llamar a las API de Ggle ni abrir instancia de exploradores o por HttpRequest,... recurriendo a Word por entre medias. No lo he visto documentado en ningún sitio, tras andar consultando al buscador.
Si consigo hacerlo funcionar (tengo problemas haciendo que cambie el idioma de la selección) ya publicaré la respuesta a este mensaje.
Un saludo
me autorespondo... como bobo entendí que Office era capaz de traducir textos mediante VBA, cuando lo que se explica en este artículo (y en todos los artículos que he consultado) es que sólo se cambia el LENGUAJE DEL DOCUMENTO u OBJETO en cuestión (la traducción hay que hacerla a parte o mediante el botón propio del menú de Office), para que no proteste por problemas de idioma.
No era capaz de activar un supuesto cambio en los textos, hasta que me he dado cuenta que el método .LanguageID no hace referencia a la función de traducción que sí está implementada en Office... pero que no queda expuesta con el grabador de macros ni consigo documentación para ejecutarlo de forma automatizada.
Al menos en este Blog se especifica cláramente que es "cambio del idioma", porque en la mayoría de consultas que explican esto mismo, abusan de la expresión "traducción", llevando a engaño.
Conclusión, que la única solución que hasta ahora encuentro son macros para realizar consultas mediante las API de Google o de Bing.
Una ruina de exploración :(, pero algo se aprende
Saludos
Hola, Enrique:
Gracias por la función CrawlShapes, la probaré a ver qué tal…
Sobre lo que estás buscando, traducir en Excel, lo he visto alguna vez, aunque ahora no lo encuentro. Creo recordar que lo traducía con Bing.
Una posibilidad que supongo que ya has visto es:
https://excelsignum.com/2016/11/26/funcion-para-traducir-texto-en-nuestra-hoja-excel/
Para traducir textos, utiliza VBA de Excel y aprovecha la funcionalidad COM de Internet Explorer y los servicios web de Google Translate (sin su API, que sería de pago). Aunque utiliza un navegador para traducir, no lo abre (uno de tus requisitos), no sé si te habías dado cuenta… Sí que es necesario tener instalado Internet Explorer en el PC, que es lo habitual todavía.
P.S.: No lo he probado nunca, pero creo recordar que con algo que se llama Google Translator Kit (o algo parecido) se pueden traducir documentos de Word. Quizás puedas aprovecharlo para traducir en Excel…
No sé si respondo a tu búsqueda, pero ahí la tienes. ¡Suerte!
A lo tonto estoy escribiendo un nuevo artículo de traducción automática. 🙂
… Jesús Prieto …