Gonduana

Contenidos para traductores

  • Blog
  • Empieza por aquí
    • Encuesta: coger
    • Encuesta: ratón o mouse
    • Artículos más leídos
    • Vídeos más vistos
    • Gonduana en las redes sociales
    • ¿Quieres saber más sobre mí?
  • Recursos
    • Software para traductores
    • Hardware para traductores
    • Internet para traductores
    • WordPress para traductores
  • Sobre mí
  • Contacto

Macro VBA para convertir una memoria TMX en una tabla

Publicado el 12/abril/2015 por Jesús Prieto

convertir una memoria TMX en una tabla - macro VBACon este artículo seguimos con la serie iniciada con este primer artículo, en el que aprendimos a manejarnos con los comodines de Word con la excusa de tratar de convertir una memoria de traducción TMX a una sencilla tabla.

En un segundo artículo afinamos aún más los patrones de búsqueda y simplificamos el proceso, al menos el número de pasos, aunque conseguimos unos patrones de búsqueda monstruosamente largos.

Ahora, con algún pequeño cambio, vamos a aprovechar estos patrones de búsqueda con comodines para crear una macro en VBA (abreviatura de «Visual Basic for Applications»). Con esta macro conseguiremos la tabla a partir de la memoria TMX.

Por supuesto, la filosofía es que la creas una macro una vez y la puedes usar las veces que quieras.

¿Listo?

Índice

  • Material que puedes descargarte
  • Introducción a VBA
  • Diseño final de la macro VBA
  • Explicación de la macro VBA en Word
  • Abrir la memoria TMX en Word
  • Insertar la macro en un documento de Word
  • Conclusiones de la macro VBA para convertir una memoria TMX en una tabla

Material que puedes descargarte

Antes de empezar, por si tienes prisa y lo único que quieres es la macro convertir la memoria TMX a una tabla, te pongo aquí, al principio y muy clarito, lo que te puedes descargar:

  • El  documento con los 6 comodines empleados.
  • Una pequeña memoria TMX de prueba.
  • Por fin, la macro VBA en formato TXT.

Si era esto lo que querías y ya sabes cómo insertar el código VBA puedes dejar de leer el artículo, nada te retiene…

Ahora bien, si quieres saber los entresijos de esta macro en lenguaje VBA, sigue leyendo, y en el futuro podrás crear otras macros para otros fines.

Dame un pez, y me quitarás el hambre.
Enséñame a pescar, y nunca más pasaré hambre.

Introducción a VBA

Como en los dos artículos mencionados arriba, se trata de conseguir una sencilla tabla a partir de una memoria con formato TMX. El objetivo es el mismo, pero esta vez lo haremos con una macro VBA que emplea los comodines de Word. Te animo a que te descargues el listado de comodines necesarios y que lo tengas delante, para que sigas todo el artículo.

Por ejemplo, si quieres que Word sustituya todos los guión por guion, deberás usar esta macro en VBA dentro de Microsoft Word:

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "guión"
        .Replacement.Text = "guion"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

Vamos a ver por encima las líneas más importantes:

  • Las líneas 1 y 2 dicen que se busque y reemplace sin formato.
  • Las líneas 3 a 14 establecen los parámetros de búsqueda y reemplazo (coinciden con las casillas que hay en el cuadro de diálogo Buscar y Reemplazar de Microsoft Word; te animo a comprobarlo). Por ejemplo, en la línea 4 se dice que se busque la palabra guión; la línea 5, que se reemplace por guion; la línea 13 dice que no se empleen comodines.
  • La línea 15, por fin, realiza todos los reemplazos del documento, sin pedir confirmación y con los criterios que se han declarado antes.

Este código no utiliza comodines, pero como necesitaremos usarlos en todo el artículo, el código VBA que encuentra todos los gui?n y los sustituye por guion será (fíjate que ya hay comodines):

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "gui?n"
        .Replacement.Text = "guion"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

¿Ves cómo ha cambiado la línea 13 de False a True?

Pues bien, ya tenemos el módulo básico de reemplazos que utilizaremos en la macro VBA basada en comodines. Solo tendremos que repetirlo para cada uno de los reemplazos.

Diseño final de la macro VBA

Ya tenemos los dos bloques básicos para nuestra macro:

  • la estructura del módulo básico de la macro VBA de un reemplazo;
  • el listado de reemplazos necesarios para convertir una memoria de traducción TMX.

Ahora puedes llegar a la conclusión de que se trata solo de repetir este módulo tantas veces como comodines haya en dicho listado.

Pues bien la macro completa que convertirá una memoria TMX abierta en Word es la siguiente:

Sub MacroVBA_TMX_a_Tabla()
'Declaración de variables y constantes
Dim CadenaBuscar As String, CadenaBuscarReemplazarPor As String
Const cadenaTemporal As String = "¡Gonduana!"

    ' No actualizar pantalla de Word (hasta el final)
    Application.ScreenUpdating = False
'1.er reemplazo
    CadenaBuscar = "(*\<body\>^13)(*)( {1;}\</body\>^13\</tmx\>)"
    CadenaBuscarReemplazarPor = "\2"
    Call ReemplazarConComodines(CadenaBuscar, CadenaBuscarReemplazarPor)

'2.º reemplazo
    CadenaBuscar = " {1;}\<tu creationdate*\>^13"
    CadenaBuscarReemplazarPor = ""
    Call ReemplazarConComodines(CadenaBuscar, CadenaBuscarReemplazarPor)

'3.er reemplazo
    CadenaBuscar = " {1;}\<prop*/prop\>^13"
    CadenaBuscarReemplazarPor = ""
    Call ReemplazarConComodines(CadenaBuscar, CadenaBuscarReemplazarPor)

'4.º reemplazo (temporal)
    'Cambiar las tabulaciones que haya por la cadena temporal «¡Gonduana!», o la cadena que quieras
    CadenaBuscar = "^t"
    CadenaBuscarReemplazarPor = cadenaTemporal
    Call ReemplazarConComodines(CadenaBuscar, CadenaBuscarReemplazarPor)

'4.º reemplazo
    'Reemplazar comodines
    CadenaBuscar = "( {1;}\<tuv xml:lang=\""??-??\""\>^13 {1;}\<seg\>)(*)(\</seg\>^13 {1;}\</tuv\>^13 {1;}\<tuv xml:lang=\""??-??\""\>^13 {1;}\<seg\>)(*)(\</seg\>^13 {1;}\</tuv\>^13 {1;}\</tu\>)"
    CadenaBuscarReemplazarPor = "\2^t\4"
    Call ReemplazarConComodines(CadenaBuscar, CadenaBuscarReemplazarPor)

'5.º reemplazo
    CadenaBuscar = "\<?pt i*\>"
    CadenaBuscarReemplazarPor = ""
    Call ReemplazarConComodines(CadenaBuscar, CadenaBuscarReemplazarPor)

'6.º reemplazo
    CadenaBuscar = "\<ph */\>"
    CadenaBuscarReemplazarPor = ""
    Call ReemplazarConComodines(CadenaBuscar, CadenaBuscarReemplazarPor)

'6.º deshacer reemplazo temporal

    'Cambiar «Gonduana» por una tabulación
    CadenaBuscar = cadenaTemporal
    CadenaBuscarReemplazarPor = "^t"
    Call ReemplazarConComodines(CadenaBuscar, CadenaBuscarReemplazarPor)

    'Actualizar la pantalla de Word
    Application.ScreenUpdating = True

    MsgBox "Se ha terminado el proceso de reemplazo", vbOKOnly + vbInformation, "Proceso de reemplazo en Word"

End Sub

'Procedimiento para reemplazar las cadenas CadenaBuscar por CadenaBuscarReemplazarPor
Private Sub ReemplazarConComodines(CadenaBuscar As String, CadenaBuscarReemplazarPor As String)
    'Primero, poner el cursor al principio del documento Word
    Selection.HomeKey Unit:=wdStory

    'Reemplazar con comodines
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = CadenaBuscar
        .Replacement.Text = CadenaBuscarReemplazarPor
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Puedes copiar esta macro VBA y pegarla en Microsoft Word como se explica más abajo, y probarla en la memoria TMX de ejemplo o directamente en tu memoria.

Explicación de la macro VBA en Word

Con esto, se habría conseguido el objetivo del artículo: tener la macro que convierte una memoria TMX en una sencilla tabla de un modo desatendido.

Ahora bien, si te pica la curiosidad, te preguntarás qué hace todo ese código.

Sigue leyendo, porque la respuesta la tendrás en las siguientes líneas:

  • La línea 1 es el nombre del subprocedimiento, en este caso MacroVBA_TMX_a_Tabla (puedes cambiar este nombre si te apetece a lo que quieras). Será el nombre de la macro que habrá que ejecutar desde Microsoft Word con la TMX abierta.
    Muy importante: te recuerdo que en función de tu configuración regional de tu sistema operativo Windows, es posible que tu separador de listas no sea mi punto y coma ;, sino la coma ,, por lo que es posible que tengas que cambiar esto en tu macro.
  • La líneas 2 de color verde es un comentario. Fíjate que los comentarios tienen un apostrofo al principio, y sirven solo para documentar para ti o para otros lo que hacen las siguientes líneas de código.
  • Las líneas 3 y 4 declaran unas variables que vamos a necesitar (CadenaBuscar y CadenaBuscarReemplazarPor) y define una constante (cadenaTemporal, que también puedes cambiar con tal de que estés seguro al 100% de que no existe en la memoria TMX)
  • La línea 7 (Application.ScreenUpdating = False) hace que no se actualice la pantalla de Word con los reemplazos que se vayan haciendo. El motivo de esta línea es acelerar la ejecución de la macro. Casi al final del código, en la línea 53, se activa la actualización de la pantalla de Word (para que veas los cambios implementados).
  • En la línea 9 se da un valor a la cadena de búsqueda CadenaBuscar del primer reemplazo. Puedes ver que es el primer comodín de búsqueda del listado que te puedes descargar.
  • En la línea 10 se da un valor a la cadena de reemplazo CadenaBuscarReemplazarPor, también del primer reemplazo. Puedes ver que es el comodín de reemplazo del listado que te puedes descargar.
  • La línea 11 llama a otro subprocedimiento, llamado ReemplazarConComodines, que realiza de verdad el reemplazo.
  • Las líneas 14 a 16 hacen lo propio con el 2.º reemplazo.
  • Las líneas 19 a 21 hacen lo propio con el 3.er reemplazo.
  • Las líneas 25 a 27 hacen un reemplazo temporal: reemplaza las tabulaciones que tiene el documento por una cadena temporal, la definida en la línea 4. En las líneas 48 a 50 desharemos este cambio temporal.
  • Las líneas 31 a 33 hacen lo propio con el 4.º reemplazo. Aquí, curiosamente, hemos tenido que duplicar cada comilla " del comodín de búsqueda para poderlo usarla en VBA. Como ves, es un comodín largo, largo… Por supuesto, no me saco de la manga esta monstruosidad de comodín. Si quieres ver cómo se ha diseñado este comodín, deberás leerte los artículos anteriores (los enlaces están al principio del artículo).
  • Las líneas 36 a 38 hacen lo propio con el 5.º reemplazo.
  • Las líneas 41 a 43 hacen lo propio con el 6.º reemplazo. Si has seguido los artículos que preceden a este, verás que entonces solo había 5 reemplazos. Ha habido que incluir este sexto reemplazo para que Word borre los elementos <ph> (abreviatura de la palabra inglesa placehorder).
  • Las líneas 48 a 50 deshacen el cambio temporal de las tabulaciones.
  • La línea 53 permite que la pantalla de Word actualice el contenido (ya se comentó que la línea 7 desactivó la actualización para que la macro se ejecutara más rápidamente).
  • La línea 55 emplea la función MsgBox para mostrar un cuadro informativo de que se ha terminado con todos los reemplazos.
  • Las líneas 60 a 80 son el subprocedimiento llamado ReemplazarConComodines, que realiza el reemplazo. Si no he contado mal, se llama un total de 8 veces a este subprocedimiento: 6 para los comodines, 1 vez más para el cambio temporal de tabulaciones y 1 más para deshacer este último cambio. Básicamente es el bloque básico comentado al principio del artículo, excepto que se ha añadido la línea 63 para que Word sitúe el cursor al principio del documento (arriba a la izquierda) antes de realizar el reemplazo. Este era un requisito de estos comodines, si no, es posible que no funcionen los reemplazos como queremos (ya lo vimos en los artículos anteriores).

Abrir la memoria TMX en Word

Con la macro ya diseñada, tenemos que abrir en Word la memoria TMX de una manera que nos convenga. Te comento la forma que uso, aunque no sé si es la mejor:

  • Abres el archivo TMX con el Bloc de notas.
  • Seleccionas todo el contenido (CTRL+E) y lo copias (CTRL+C).
  • Cambias a Word, y ahí pegas el contenido del portapapeles (CTRL+V).

Si lo has hecho así, verás tu documento de Word con el contenido mostrado arriba.

Si ves que falta información, es que lo has abierto de otra manera, y Word reconoce automáticamente el formato de archivo como un XML y te lo presenta algo más limpio. Si es así, da marcha atrás y sigue mi procedimiento, por favor.

Un detalle técnico: Microsoft Word tiene un límite para los documentos que puede abrir. En concreto, el mayor archivo de solo texto que puede abrir es de 32 MB. Es una cifra muy pequeña, es verdad, pero basta para poder abrir una memoria con un par de cientos miles de unidades de traducción. Este es el límite de la memoria TMX que puedes convertir con el procedimiento indicado en este artículo.
Por si acaso te lo preguntas: sí, todos hemos visto documentos de Word mucho mayores que estos 32 MB, pero Word los puede abrir porque tienen poco texto, aunque gráficos muy grandes. Aun así, el máximo tamaño absoluto es de 512 MB.
Si intentas abrir un documento demasiado grande por uno u otro motivo, recibirás un mensaje de error de Word de este estilo:

Mensaje de error de Word - archivo demasiado grande

Insertar la macro en un documento de Word

Para añadir la macro VBA al documento recién creado, abre el Editor de Visual Basic para Aplicaciones; para ello, selecciona la ficha Programador  y pulsar el botón Visual Basic (o bien emplea el atajo de teclado ALT+F11 ). Ya en el Editor, crea un nuevo módulo:

Programador - Visual Basic - Insertar módulo

y ahí pegas el texto anterior (en la figura, solo es un ejemplo de código VBA):

Módulo con VBA pegado

Vuelve a Word y usa el atajo ALT+F8 para abrir el cuadro de diálogo Macros y así poder ejecutar la macro que hemos llamado MacroVBA_TMX_a_Tabla.

Conclusiones de la macro VBA para convertir una memoria TMX en una tabla

Hemos conseguido una macro escrita en VBA que puedes aprovechar para ejecutarla dentro de Microsoft Word.

Es la forma más rápida de conseguir la tabla a partir del archivo TMX.

¿Cómo de rápido?

En memorias pequeñas, la macro se ejecuta de forma instantánea; en una memoria más grade de 50.000 unidades puede tardar algo de 15 minutos. Lo que tarde en sí da un poco igual, porque se prepara enseguida, y se deja ejecutándose sin problemas.

Recuerda que normalmente:

Una macro se diseña una vez
y se ejecuta muchas veces.

Nada más, espero que hayas disfrutado como yo en este recorrido de expresiones regulares y comodines.

¿Hemos terminado con los comodines y las expresiones regulares?

Algo muy dentro de mí dice que no…

🙂

 

 

Entradas relacionadas

Si te ha gustado el artículo, además de compartirlo en tus redes sociales,

Share on twitter
Share on linkedin
Share on facebook
Share on google
Share on pocket

puedes leer otros artículos de Gonduana del mismo estilo:

Macro de VBA para pegar sin formato en Word

2/agosto/2020

Al hilo del artículo anterior del blog, algunos me habéis comentado que sería interesante tener también la macro de VBA para pegar sin formato en

Leer el artículo »
Macro de AutoHotkey para pegar sin formato en Word

Macro de AutoHotkey para pegar sin formato en Word

16/julio/2020

Hoy en LinkedIn he leído un artículo de How-To Geek que recomienda usar el atajo de teclado  CTRL + MAYÚS + V  para pegar sin formato en muchas aplicaciones.

Leer el artículo »
Comodines en Excel

Los comodines de Excel

19/noviembre/2019

¿Quién ha dicho que no hay comodines en Excel? Si ya conoces la utilidad de los comodines de Word, tienes que conocer también los comodines

Leer el artículo »
Macros de Word para ordinales

Mis macros de Word para ordinales (Marisa E Schieda)

11/noviembre/2019

Este artículo es el segundo programado de Marisa E. Schieda, una correctora y bloguera argentina que quiere compartir contigo sus macros de Word para ordinales.

Leer el artículo »
Macros de Word para las abreviaturas de número

Mis macros de Word para abreviaturas de “número”

10/noviembre/2019

Este artículo es de Marisa E. Schieda, una correctora y bloguera argentina que quiere compartir contigo sus macros de Word para abreviaturas de «número», cuya

Leer el artículo »
Cómo exportar las entradas de Autocorrección a otro ordenador

Cómo exportar las entradas de Autocorrección a otro ordenador

22/septiembre/2019

Seguramente alguna vez has querido exportar las entradas de Autocorrección para poder llevártelas a otro ordenador. ¿Quieres saber cómo?

Leer el artículo »
Jesús Prieto

Jesús Prieto

Querido traductor: quiero compartir contigo muchas cosas que podrás aprovechar como profesional: desde herramientas especiales hasta técnicas comerciales; desde estrategias de marketing hasta trucos de productividad personal; desde cómo diseñar tu marca personal hasta novedades de impuestos.
Todos los artículos

Publicado en: macros, productividad Etiquetado como: comodines, TM, VBA, Word

Entrada sin comentarios

Comentar Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Jesús Prieto

Jesús Prieto 2015

Sobre mí

Lo más visto…

Artículos más leídos de Gonduana
Vídeos más vistos de Gonduana
Gonduana en las redes sociales

Últimos artículos

  • Cómo escribir letras griegas con AutoHotkey
  • Macro de VBA para pegar sin formato en Word
  • Macro de AutoHotkey para pegar sin formato en Word
  • Extranjerismos en el ajedrez
  • Cómo buscar en el diccionario de la RAE con AutoHotkey
  • Los comodines de Excel
  • Novedades en el buscador de la RAE
  • Mis macros de Word para ordinales (Marisa E Schieda)
  • Mis macros de Word para abreviaturas de “número”
  • Los 10 principios del comercial

Nube de etiquetas

anglicismos AutoHotkey comodines copias de seguridad correo español Excel foto fórmulas geografía geometría GTD historia imagen impagos impuestos InDesign libros marca matemáticas mouse MT ortografía Outlook parábolas PHP poesía power PowerPoint RAE ratón regex sector tarifas teclado tipografía TM Trados Studio VBA vídeo webinarios Word WordPress XML zoología

Categorías

  • adaptación (3)
  • blog (10)
  • comercial (24)
  • contabilidad (2)
  • español (5)
  • etimología (4)
  • fiscalidad (2)
  • hardware (3)
  • macros (42)
  • marketing (8)
  • noticias (4)
  • productividad (42)
  • seguridad (5)
  • social (9)
  • software (41)
  • TAO (39)
  • terminología (9)
  • traducción automática (2)
  • traducción literaria (1)
  • tradumática (38)
  • vídeo (17)
Buscar en Gonduana
Política de privacidad
Política de cookies
Aviso legal
Creative Commons

Licencia Creative Commons

Blog de Gonduana: recursos para traductores

Esta web usa cookies
Es cansino, sí, pero la ley europea me obliga a avisarte que este blog, como casi el 100%, usa cookies para recabar datos. ¿Estás de acuerdo con mi Política de cookies? Vale Rechazar Más información
Política de cookies

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are as essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Necessary
Siempre activado
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
GUARDAR Y ACEPTAR