2015-04-09 5 views
0

J'essaie de trouver tous les tirets qui sont seuls dans les cellules de la table et de les centrer. Ce que j'ai construit ci-dessous jusqu'ici centrera tous les tirets dans le document. Comment puis-je encapsuler ceci pour centrer seuls les tirets dans les cellules par eux-mêmes?Lors de la création d'une macro Word, comment rechercher un élément de texte spécifique dans une table à l'aide de Visual Basic?

Sub Macro9() 
    Selection.Find.ClearFormatting 
    Selection.Find.Replacement.ClearFormatting 
    With Selection.Find.Replacement.ParagraphFormat 
    .SpaceBeforeAuto = False 
    .SpaceAfterAuto = False 
    .Alignment = wdAlignParagraphCenter 
    End With 

    With Selection.Find 
    .Text = "-" 
    .Replacement.Text = "-" 
    .Forward = True 
    .Wrap = wdFindContinue 
    .Format = True 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchWildcards = False 
    .MatchSoundsLike = False 
    .MatchAllWordForms = False 
    End With 
    Selection.Find.Execute Replace:=wdReplaceAll 
End Sub 

Répondre

1

Puisque vous souhaitez limiter vos recherches à un seul tableau de bord dans une seule cellule, vous êtes mieux que de vérifier le contenu des cellules. Sinon, si vous utilisez .Find dans la plage d'une table, vous devrez vérifier toutes sortes de cas spéciaux pour vous assurer que le tiret "trouvé" est tout seul dans la cellule. Je pense que cela fonctionne assez efficacement:

Option Explicit 

Sub Macro9() 
    Dim tbl As Table 
    Dim tCell As Cell 
    Dim r, c As Integer 
    Dim cellContents As String 

    For Each tbl In ActiveDocument.Tables 
     For r = 1 To tbl.Rows.Count 
      For c = 1 To tbl.Columns.Count 
       Set tCell = tbl.Cell(r, c) 
       '--- trim the cell delimiter off the end, then whitespace 
       cellContents = Left(tCell.Range.Text, Len(tCell.Range.Text) - 2) 
       cellContents = Trim(cellContents) 
       If cellContents = "-" Then 
        tCell.Select 
        Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter 
       End If 
      Next c 
     Next r 
    Next tbl 

End Sub 
+0

Que pensez-vous de la réponse que j'ai trouvée? –

0

@PeterT qu'êtes-vous des pensées à ce sujet? (un collègue et je l'ai rassemblé)

Sub Macro1() 

Dim CurrentText As Range 
Selection.HomeKey Unit:=wdStory 
Selection.Find.ClearFormatting 
With Selection.Find 
    .Text = "-" 
    .Replacement.Text = "" 
    .Forward = True 
    .Wrap = wdFindContinue 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchWildcards = False 
    .MatchSoundsLike = False 
    .MatchAllWordForms = False 
End With 
Do While Selection.Find.Execute 

If Selection.Information(wdWithInTable) Then 
    Set CurrentText = Selection.Cells(1).Range 
    CurrentText.End = CurrentText.End - 1 
    If (CurrentText.Text = "-") And Not (Selection.Information(wdAlignParagraphCenter)) Then 
     Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter 
    End If 
    End If 
Loop  
End Sub 
+0

Bien que j'aie utilisé 'Find' avec succès dans le passé, j'avoue ne pas avoir de mojo de haut niveau pour ça. Votre macro fonctionne certainement bien et fait le travail - j'ai maintenant appris à propos de 'Selection.Information' qui sera très utile à l'avenir. Si vous souhaitez désélectionner le dernier tiret du document, ajoutez la ligne 'Selection.Collapse Direction: = wdCollapseEnd'. Bon travail. – PeterT