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:

  1. Cambie todas las variaciones de «siempre que» a minúsculas.

  2. Busque «. Siempre que» (punto, espacio, «siempre que») y reemplácelo con «. Siempre que» (las mayúsculas adecuadas).

  3. 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.