Rilevamento dell’inizio di una frase in una macro (Microsoft Word)
Shelley sta sviluppando una macro che cambia tutte le permutazioni di maiuscole di “a condizione che” (“a condizione che”, “a condizione che”, ecc.)
in minuscolo. È abbastanza facile da fare, ma se la frase inizia una frase, la “P” dovrebbe essere maiuscola. Shelley si chiede se ci sia un modo, in una macro, per dire se una frase come “purché” sia all’inizio di una frase.
Ci sono un paio di modi per farlo. Innanzitutto, puoi utilizzare Trova e sostituisci per eseguire ricerche e sostituzioni successive. La macro potrebbe fare quanto segue:
-
Cambia tutte le varianti di “purché” in minuscolo.
-
Cerca “. Purché” (punto, spazio, “purché”) e sostituiscilo con “. Purché” (lettere maiuscole corrette).
-
Ripeti la ricerca e sostituisci nel passaggio 2 utilizzando altri segni di punteggiatura di fine frase come un punto esclamativo, un punto interrogativo o uno di quei segni di punteggiatura seguiti da virgolette.
Poiché ciò viene eseguito in una macro, il processo dovrebbe essere molto rapido.
Ecco un esempio di quello che potrebbe fare il lavoro:
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
Un difetto di questo approccio è che non consente di “ammesso che” si verifichi all’inizio di un paragrafo. La macro potrebbe essere modificata per tener conto di tali istanze, ma sarebbe più complessa.
Tuttavia, è possibile utilizzare un approccio diverso. Questo si basa su un’impostazione piuttosto esoterica per la proprietà Case: wdTitleSentence. Questa impostazione cambia tutti i caratteri (con una notevole eccezione) in minuscolo e se la frase è all’inizio di una frase cambierà il primo carattere in maiuscolo. Ecco come potresti usarlo in 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
Notare che all’interno del ciclo While sono presenti due assegnazioni alla proprietà Case. Il primo imposta la selezione (ciò che è stato trovato) in minuscolo e il secondo lo imposta in maiuscolo per una frase. L’impostazione delle lettere minuscole è specifica per gestire “una notevole eccezione”
Ho accennato: se il testo “FORNITO” è all’inizio di una frase, l’impostazione wdTitleSentence non la cambierà, per qualche motivo, in “purché”. Tuttavia, cambierà “purché” (che “FORNITO” diventa dopo averlo impostato in minuscolo) in “purché” senza problemi.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti WordTips), ho preparato una pagina speciale che include informazioni utili.
WordTips è la tua fonte di formazione economica su Microsoft Word.
(Microsoft Word è il software di elaborazione testi più popolare al mondo.) Questo suggerimento (13398) si applica a Microsoft Word 2007, 2010 e 2013.