Come posso sostituire tutte le interruzioni in una selezione in Word usando VBA?


5

Ho selezionato una parte di un documento e ora voglio sostituire tutte le interruzioni di pagina e sezione del manuale (quest'ultima di tutti i tipi, come la pagina successiva anche, pagina successiva irregolare, pagina successiva, continua, colonna) all'interno di quella selezione .

Ho provato a registrare una macro usando parole avanzate cerca / sostituisci cercando [^ m ^ b], ma non ha funzionato (non ho trovato nulla in un documento che avevo spammato con le pause per i test).

Così ho provato a gestire le interruzioni di sezione e di pagina separatamente, prima selezionando, quindi sostituendo un tipo, selezionando di nuovo, sostituendo l'altro tipo. In questo modo, la seconda ricerca (per interruzioni di sezione) per qualche motivo ha toccato anche una parte del documento prima della selezione.

Tuttavia, come posso cercare le interruzioni di sezione speciali? L'interfaccia utente di ricerca avanzata non ha alcuna possibilità di cercarli in modo specifico, ma la normale ricerca dell'interruzione di sezione non trova tutto. Inoltre, suppongo che ci sia un modo per fare tutto in una volta.

Un aggiornamento, ora sto provando le interruzioni di sezione separatamente. La macro seguente sostituisce tutte le interruzioni di sezione, ma fa qualcosa di strano e di sbagliato. Ho quattro interruzioni di sezione, tutte di tipo continuo prima della selezione, quindi un'interruzione di tipo di pagina successiva e una interruzione di sezione di tipo pari nella selezione. Dopo aver eseguito una macro per sostituire le interruzioni di sezione, l'ultima interruzione di sezione prima che la selezione passi da tipo continuo a tipo pari pagina.

La mia macro:

Sub break2()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "^b"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = False
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchKashida = False
    .MatchDiacritics = False
    .MatchAlefHamza = False
    .MatchControl = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Potresti semplicemente trovare e sostituire i codici ASCII per l'alimentazione di riga, ecc.?
Raystafarian,

Risposte:


3

Questo semplice codice rimuove tutte le interruzioni. Ne rimane solo uno, il che non è comune: "Interruzione a capo automatico". Se vuoi che anche quello venga rimosso, aggiungi semplicemente "^l"i Array()parametri. Ma tieni presente che "^l"corrisponderà anche a "Interruzione di riga". Ad ogni modo, non hai menzionato Text Wrap Breaks e non è così comune, quindi penso che non sia un problema. Spero che possa aiutare qualcuno;)

Sub Delete_all_breaks_from_selection()
Dim arr() As Variant
Dim i As Byte

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
'"^b" - Selection Breaks, "^m" - Page Break, "^n" - Column Break
arr = Array("^b", "^m", "^n")
    For i = LBound(arr) To UBound(arr)
        With Selection.Find
            .Text = arr(i)
            .Replacement.Text = ""
        End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Next
End Sub
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.