Mary usa bastante macros para agregar texto a sus documentos. El problema es que si el texto agregado contiene apóstrofos, estos se agregan al texto como «directos» en lugar de «inteligentes». Ella indica que tiene la configuración de Autoformato mientras escribe que le dice a Word que use comillas tipográficas en lugar de comillas rectas, pero eso no afecta el texto insertado por mis macros.

Cuando inserta texto en un documento utilizando una macro en lugar de escribir, Word maneja el texto de manera diferente en cada caso. El texto que escribe se procesa a medida que se ingresa cada carácter. El texto que inserta una macro se trata más como texto que se pega en un documento. Por lo tanto, si escribe «este es mi texto», Word lo procesa después de todos y cada uno de los caracteres. Eso significa que hay tiempo para que el programa verifique Autoformato y Autocorrección y todas las demás cosas que hace Word para procesar texto.

Cuando usa una macro para ingresar el mismo texto, se inserta como un bloque, como si lo hubiera pegado en su lugar. Esto significa que cualquier carácter en el medio del texto (como comillas o apóstrofos) que habría sido procesado por Autoformato no se «captura» ni se procesa. Esto significa que las comillas rectas no se cambian a comillas tipográficas si están incluidas en el texto que inserta su macro.

Hay un par de formas en las que puede abordar una solución a esto. La primera es tener su macro, después de insertar todo su texto, realice una operación de búsqueda y reemplazo para reemplazar todas las comillas con comillas y apóstrofos con apóstrofes. Esto puede sonar extraño, pero si tiene Autoformato mientras escribe configurado para usar comillas tipográficas, la operación de buscar y reemplazar terminará cambiando las comillas rectas a comillas tipográficas.

Este enfoque es el camino a seguir si su macro insertó mucho texto en el documento. Si está insertando fragmentos de texto más pequeños, entonces es más fácil asegurarse de que la macro esté insertando los códigos ASCII correctos para las comillas tipográficas para empezar. Los códigos ASCII para una cotización regular son 34, pero una cotización de apertura inteligente tiene un código de 147 y una cotización de cierre es 148. Existen diferencias similares en los códigos utilizados para los apóstrofes. Si usa la función Chr para insertar el carácter adecuado, siempre tendrá las comillas que desee.

Una forma de hacerlo es usar un código similar al siguiente cerca del comienzo de su macro:

If Options.AutoFormatAsYouTypeReplaceQuotes = True Then     sAposOpen = Chr(145)

sAposClose = Chr(146)

sQuoteOpen = Chr(147)

sQuoteClose = Chr(148)

Else     sAposOpen = Chr(39)

sAposClose = Chr(39)

sQuoteOpen = Chr(34)

sQuoteClose = Chr(34)

End If

Este código comprueba si la configuración de Autoformato mientras escribe está activada para las comillas tipográficas. Si es así, las cuatro variables se establecen en los códigos ASCII adecuados para las comillas tipográficas. Si no está activado, las variables se establecen en los códigos adecuados para comillas rectas. Luego, puede usar estas variables en su macro mientras ensambla e inserta texto.

Por ejemplo, si desea insertar el texto «la casa de mi hermano está al final de la calle», puede insertarlo de esta manera:

sMyString = "my brother" & sAposClose & "s house is down the street"

Selection.InsertAfter " " & sMyString

Si encuentra este enfoque molesto (romper sus cadenas de esta manera), entonces hay otra opción. Puede crear su propia función que realice los reemplazos adecuados en sus cadenas a la vez.

El siguiente par de macros hará bien el trabajo:

Function RepQuotes(sRaw As String) As String     Dim sTemp As String     Dim sAposOpen As String     Dim sAposClose As String     Dim sQuoteOpen As String     Dim sQuoteClose As String

If Options.AutoFormatAsYouTypeReplaceQuotes = True Then         sAposOpen = Chr(145)

sAposClose = Chr(146)

sQuoteOpen = Chr(147)

sQuoteClose = Chr(148)

Else         sAposOpen = Chr(39)

sAposClose = Chr(39)

sQuoteOpen = Chr(34)

sQuoteClose = Chr(34)

End If

sTemp = RepText(sRaw, " " & Chr(39), sAposOpen)

sTemp = RepText(sTemp, Chr(39), sAposClose)

sTemp = RepText(sTemp, " " & Chr(34), sQuoteOpen)

sTemp = RepText(sTemp, Chr(34), sQuoteClose)

RepQuotes = sTemp End Function
Function RepText(sIn As String, sFind As String, sRep As String) As String     Dim x As Integer

x = InStr(sIn, sFind)

y = 1     While x > 0         sIn = Left(sIn, x - 1) & sRep & Mid(sIn, x + Len(sFind))

y = x + Len(sRep)

x = InStr(y, sIn, sFind)

Wend     RepText = sIn End Function

Lo que debe hacer es construir sus cadenas de texto de forma normal y luego pasarlas a través de la macro RepQuotes. La macro determina las cotizaciones adecuadas a utilizar y luego realiza las conversiones. Determina si una cita es una cita inicial o una cita final en el texto si hay un espacio antes de la cita o no. Si lo hay, se supone que es una cotización de apertura; si no es así, es una cita de cierre.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios WordTips), he preparado una página especial que incluye información útil.

link: / wordribbon-WordTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

WordTips es su fuente de formación rentable en Microsoft Word.

(Microsoft Word es el software de procesamiento de texto más popular del mundo). Este consejo (3363) se aplica a Microsoft Word 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Word (Word 2007 y más tarde) aquí:

link: / wordribbon-Adding_Smart_Quotes_through_Macro_Text [Adición de citas inteligentes mediante macro texto].