2015-03-26 1 views
1

Je champ de fusion dans mon document Word 2010 qui contient un contrôle de case à cocher qui est cochée ou non en fonction du contenu de la liste d'entrée.Comment trouver/remplacer un symbole avec un contrôle de case à cocher dans Word

{IF NOUVEAU = « NOUVEAU » « ☒ » « ☐ »} où les cases sont effectivement vérifier la boîte contrôle

Cependant, après le publipostage est terminé, le contrôle de la case à cocher est remplacé par un symbole pour la case cochée ou décochée, selon le cas. Par conséquent, il n'est plus possible de passer de coché à non coché dans le document final comme vous le feriez pour un contrôle de case à cocher.

Une question similaire a été asked here mais n'a pas été résolu (une réponse avec une solution ne fonctionne pas pour moi).

Je suis à la recherche d'un moyen simple de trouver le symbole enregistré ou non dans le document de sortie et le remplacer par une case à cocher contrôle des documents dans l'état approprié.

Je ne suis pas grand sur la programmation, mais si vous pouviez me diriger dans la bonne direction, je vais essayer de mon mieux. Je l'ai joué avec VB macros dans le passé (très amateur), donc j'essayé à nouveau et obtenu jusque-là comme une « preuve de concept »:

Sub Checkbox() 
' ChrW(9744) is unchecked box; 9746 is checked box 
    Selection.HomeKey Unit:=wdStory 
    Selection.Find.ClearFormatting 
    Selection.Find.Replacement.ClearFormatting 
    With Selection.Find 
     .Text = ChrW(9744) 
     .Replacement.Text = ChrW(9746) 
     .Forward = True 
     .Wrap = wdFindContinue 
     .Format = False 
     .MatchCase = False 
     .MatchWholeWord = False 
     .MatchWildcards = False 
     .MatchSoundsLike = False 
     .MatchAllWordForms = False 
    End With 
    Selection.Find.Execute Replace:=wdReplaceAll 
    Selection.HomeKey Unit:=wdStory 
End Sub 

J'ai aussi trouvé le moyen d'ajouter un contrôle de case à cocher :

Selection.Range.ContentControls.Add (wdContentControlCheckBox) 

Mais je ne l'ai pas compris comment se marier cette dernière partie de code dans la ligne « remplacer », ni comment définir la case à cocher comme cochée ou non, basée sur la recherche.

Merci pour l'aide.

Répondre

1

Vous pouvez effectuer les opérations suivantes:

Selection.Find.ClearFormatting 
Selection.Find.Replacement.ClearFormatting 
Do 
    With Selection.Find 
    .Text = ChrW(9744) ' ChrW(9746) 
    .Forward = True 
    .Wrap = wdFindStop 'wdFindContinue 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchWildcards = False 
    .MatchSoundsLike = False 
    .MatchAllWordForms = False 
    End With 
    If Selection.Find.Execute = False Then Exit Do 
    ' This adds the checkbox at the selected position 
    Set f = ActiveDocument.FormFields.Add(Range:=Selection.Range, _ 
             Type:=wdFieldFormCheckBox)  
    'f.CheckBox.Value = True ' Add this for checked checkboxes 
Loop 
+0

Merci pour l'édition – Apostolos

0

Pour Office 2010, un contrôle de case à cocher plus avancé est disponible qui prend en charge la mise en forme. Le code pour ce serait:

Selection.Find.ClearFormatting 
Selection.Find.Replacement.ClearFormatting 
Do 
    With Selection.Find 
    .Text = ChrW(9744) 
    .Forward = True 
    .Wrap = wdFindStop 'wdFindContinue 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchWildcards = False 
    .MatchSoundsLike = False 
    .MatchAllWordForms = False 
    End With 
    If Selection.Find.Execute = False Then Exit Do 
    ' This adds the checkbox at the selected position 
    Set f = Selection.Range.ContentControls.Add(wdContentControlCheckBox) 
    f.SetCheckedSymbol CharacterNumber:=254, Font _ 
     :="Wingdings" 
    f.SetUncheckedSymbol CharacterNumber:=168, _ 
     Font:="Wingdings" 
    f.Checked = False' Change this for checked checkboxes 
Loop