Comment puis-je remplacer un Microsoft Word style de caractère au sein d'une plage/la sélection dans VBA?

Je suis en train de travailler sur un modèle Word 2007 avec une macro qui permet d'appliquer des styles de caractères pour le texte sélectionné. Il semble que la fonctionnalité recherche/remplacement serait un bon endroit pour commencer, mais je crois que j'ai trouvé un bug/limitation qui empêche la macro de travail comme souhaité.

Voici mon code vba:

Sub restyleSelection()
    Dim r As Range
    Set r = Selection.Range
    With r.Find
        .Style = ActiveDocument.Styles("Default Paragraph Font")
        .Text = ""
        .Replacement.Text = ""
        .Replacement.Style = ActiveDocument.Styles("Emphasis")
        .Forward = True
        .Wrap = wdFindStop
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute Replace:=wdReplaceAll
    End With
End Sub

Si je crée un document de test qui contient quelques paragraphes et de sélectionner quelques mots dans un des paragraphes, puis exécutez la macro, la "Accent" le style est appliqué non seulement à la sélection, mais au-delà de la fin de la sélection à la fin du document.

Ce comportement est le même à l'aide de l'interface outil de recherche/remplacement.

Ma question est: Comment puis-je surmonter ce bug/limitation et d'appliquer le style de caractère SEULEMENT au sein de la sélection/plage?

Un peu plus d'informations:

Ce que j'ai vraiment besoin de la macro à faire est d'appliquer certaines mises en forme à l'ensemble de la sélection tout en maintenant le caractère existant styles dans la sélection. Par exemple, si le texte contient le caractère Audacieux de style, le caractère en Italique style, et le reste est de Paragraphe par Défaut de la Police, la macro doit remplacer le Gras par "Révisé Bold", remplacer "Italique" avec "Révisée en Italique", et de remplacer "de Paragraphe par Défaut de la Police" avec "Révisé". De cette façon, lorsque j'utilise le compagnon macro "défaire" l'action de cette macro, le caractère original de styles (Gras, Italique, Paragraphe par Défaut de la Police) peut être remplacé.

RÉSOLU:

Voici la solution, je suis finalement arrivé à:

Sub applyNewRevisedText
    Dim r As Range          ' Create a new Range object
    Set r = Selection.Range ' Assign the current selection to the Range
    Dim rng As Range
    For Each rng In r.Words
        Set rngStyle = rng.Style
        Select Case rngStyle
        Case "Bold"
            rng.Style = ActiveDocument.Styles("New/Revised Text Bold")
        Case "Italic"
            rng.Style = ActiveDocument.Styles("New/Revised Text Emphasis")
        Case Else
            rng.Style = ActiveDocument.Styles("New/Revised Text")
        End Select
    Next rng
End Sub

OriginalL'auteur PaulBurton0 | 2012-01-05