Detección del comienzo de una oración en una macro (Microsoft Word)
Shelley está desarrollando una macro que cambia todas las permutaciones de mayúsculas de «siempre que» («Siempre que», «Siempre que», etc.)
a minúsculas. Eso es bastante fácil de hacer, pero si la frase comienza una oración, la «P» debe escribirse en mayúscula. Shelley se pregunta si hay una forma, en una macro, de saber si una frase como «siempre que» esté al principio de una oración.
Hay un par de formas en las que puede hacer esto. En primer lugar, puede utilizar Buscar y reemplazar para realizar búsquedas y reemplazos sucesivos. La macro podría hacer lo siguiente:
-
Cambie todas las variaciones de «siempre que» a minúsculas.
-
Busque «. Siempre que» (punto, espacio, «siempre que») y reemplácelo con «. Siempre que» (las mayúsculas adecuadas).
-
Repita la búsqueda y reemplace en el paso 2 utilizando otros signos de puntuación al final de la oración, como un signo de exclamación, un signo de interrogación o cualquiera de esos signos de puntuación seguidos de una comilla.
Dado que esto se hace en una macro, el proceso debería ser muy rápido.
Aquí hay un ejemplo de uno que podría hacer el trabajo:
Sub ChangeCase1() Dim vFindText As Variant Dim vReplaceText As Variant Dim orng As Range Dim i As Long vFindText = Array(". provided that", _ "! provided that", _ "? provided that", _ "."" provided that", _ "!"" provided that", _ "?"" provided that") vReplaceText = Array(". Provided that", _ "! Provided that", _ "? Provided that", _ "."" Provided that", _ "!"" Provided that", _ "?"" Provided that") ' Set all occurrences to lowercase Set orng = ActiveDocument.Range With orng.Find .ClearFormatting .Replacement.ClearFormatting Do While .Execute(FindText:="provided that", _ Forward:=True, _ Wrap:=wdFindStop) = True orng.Select orng = "provided that" orng.Collapse wdCollapseEnd Loop End With ' Account for end-of-sentence For i = 0 To UBound(vFindText) Set orng = ActiveDocument.Range With orng.Find .ClearFormatting .Replacement.ClearFormatting Do While .Execute(FindText:=vFindText(i), _ MatchCase:=True, _ Forward:=True, _ Wrap:=wdFindStop) = True orng.Select orng = vReplaceText(i) orng.Collapse wdCollapseEnd Loop End With Next End Sub
Una deficiencia de este enfoque es que no permite que «siempre que» ocurra al principio de un párrafo. La macro podría modificarse para que tenga en cuenta esos casos, pero sería más compleja.
Sin embargo, hay un enfoque diferente que puede utilizar. Éste se basa en una configuración bastante esotérica para la propiedad Case: wdTitleSentence. Esta configuración cambia todos los caracteres (con una notable excepción) a minúsculas y si la frase está al principio de una oración, cambiará el primer carácter a mayúsculas. Así es como puedes usarlo en una macro:
Sub ChangeCase2() With Selection.Find .ClearFormatting .Wrap = wdFindContinue .Forward = True .Format = True .MatchCase = False .MatchWildcards = False .Text = "provided that" .Execute While .Found Selection.Range.Case = wdLowerCase Selection.Range.Case = wdTitleSentence Selection.Collapse Direction:=wdCollapseEnd .Execute Wend End With End Sub
Tenga en cuenta que dentro del ciclo While hay dos asignaciones realizadas a la propiedad Case. El primero establece la selección (lo que se encontró) en minúsculas y el segundo lo establece en mayúsculas y minúsculas para una oración. La configuración de minúsculas se hace específica para manejar la «única excepción notable»
Mencioné: si el texto «SIEMPRE» está al principio de una oración, la configuración de wdTitleSentence no lo cambiará, por alguna razón, a «Siempre que lo haga». Sin embargo, cambiará «siempre que» (que «PROPORCIONADO que» se convierte después de ponerlo en minúsculas) a «Siempre que» sin ningún problema.
_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 (13398) se aplica a Microsoft Word 2007, 2010 y 2013.