2017-10-13 2 views
0

J'ai un problème lorsqu'il y a des espaces aléatoires dans un document Word qui n'ont pas la même police de format et j'essaie de trouver un moyen de changer la police à la police qui l'entoure.Mise à jour de la correspondance de type de police Word vb

J'ai trouvé quelques VB que je l'ai testé qui sélectionne le texte et le remplace par du texte en couleur:

Sub ChangeFont() 
    With ActiveDocument.Content.Find 
     .ClearFormatting 
     .Text = " " 

     Dim fontName As String 
     fontName = "Calibri" 

     With .Replacement 
     .ClearFormatting 
     .Font.Name = fontName 
     End With 
     .Forward = True 
     .Wrap = wdFindContinue 
     .Format = True 
     .MatchCase = False 
     .MatchWholeWord = False 
     .MatchWildcards = False 
     .MatchSoundsLike = False 
     .MatchAllWordForms = False 
     .Execute Replace:=wdReplaceAll 
    End With 
End Sub 

Maintenant, je suis en train de trouver un moyen de au lieu de remplacer le texte de la police et la couleur, obtenir la police du caractère avant et appliquer la police qui existe sur ce personnage. Y at-il un moyen d'obtenir la valeur d'index et juste tirer le nom de la police dans la commande de remplacement? Y a-t-il un moyen plus facile de faire cela? Idéalement, je voudrais faire cela en PowerShell mais le code ci-dessus fonctionne en VB mais quand j'ai essayé de l'adapter, j'ai clairement foiré quelque chose alors j'essaie juste de faire du code fonctionnel avant de l'adapter. .. C'est le powershell j'ai essayé de construire:

$app = New-Object -ComObject Word.application 
$app.Visible = $True 
$doc = $app.Documents.Open($FileName,$null) #Open FileName, ConfirmConversions , ReadOnly -1 = MSOTrue 

$Content = $doc.Content.Find 
$Content.ClearFormatting 
$Content.Text = " " 

$Content.Replacement.ClearFormatting 
$Content.Replacement.Text = "TEST" 
$Content.Replacement.Font.Name = "Georgia" 

$Content.Forward = -1 #true 
$Content.Wrap = 1 #wdFindContinue 
$Content.Format = -1 
$Content.MatchCase = 0 #false 
$Content.MatchWholeWord = 0 
$Content.MatchWildcards = 0 
$Content.MatchSoundsLike = 0 
$Content.MatchAllWordForms = 0 
$Content.Execute.Replace("2") #wdReplaceAll 


$doc.Close() | out-null 
$app.Quit() | out-null 
+0

Je suppose que vous avez une mauvaise étiquette. VB.NET n'est pas VBA – Plutonix

+0

Yup, faute de frappe. Je préfère faire ça en PowerShell de toute façon mais j'essaie juste de comprendre comment le faire en premier – Jewtus

Répondre

1

il n'y a pas besoin de remplacer quoi que ce soit, juste trouver chaque espace, et il la police est d'être celle du caractère avant sa police.

$Word = New-Object -ComObject Word.Application 
$Doc = $Word.Documents.Open($FilePath) 
$DocFind = $Doc.Content.Find 
Do{ 
    $DocFind.ClearFormatting() 
    $DocFind.Text = " " 
    $NextSpace = $DocFind.Execute() 

    $DocFind.Parent.Font = $DocFind.Parent.Previous(1,1).Font 

}Until(!$NextSpace) 

qui trouve le premier espace dans le document, et définit sa police à ce que la police était du caractère avant, alors il essaie de trouver l'espace suivant. Il le fait jusqu'à ce qu'il ne puisse pas trouver un autre espace.

+0

PARFAIT !! Merci. C'est tellement plus simple. – Jewtus