2017-08-12 1 views
0

J'ai plusieurs documents Word à modifier chaque semaine qui contiennent des tableaux allant de 1 x 6 à 6 x 10 po. Toutes les cellules de toutes les tables contiennent du texte, certaines cellules contiennent du texte en gras, certaines cellules ont un formatage mixte (gras et standard) et le reste des cellules est standard. J'essaye de trouver le code pour une macro pour changer la couleur de fond dans chaque cellule qui contient le texte en gras, même si elle contient également le texte standard. Ceci est assez simple et j'ai été capable de trouver plusieurs solutions différentes pour cela, mais je rencontre le problème suivant dans tous les exemples de code que j'ai essayés. Tous les exemples que j'ai essayés changeront la couleur d'arrière-plan dans toutes les cellules contenant seulement le texte en gras, mais ignoreront les cellules avec le formatage mélangé (gras et standartd). J'ai essayé plusieurs façons de contourner ce problème, mais je n'ai pas les connaissances nécessaires pour résoudre le problème.Comment mettre en forme des cellules de tableau dans MS Word en fonction du format du texte dans chaque cellule individuelle

Voici un échantillon du code que je utilise:

Sub Fill_Bold_Cell() 

Dim myCell 
For Each myCell In Selection.Tables(1).Range.Cells 

    If myCell.Range.Font.Bold = True Then 

     myCell.Range.Shading.BackgroundPatternColor = -603923969 

    End If 
Next myCell 

End Sub 

Toute aide à ce problème est grandement appréciée.

Répondre

0

Cette paire de procédures devrait faire le travail.

Sub Fill_Bold_Cell() 

    Dim Tbl As Table 
    Dim myCell 

    For Each Tbl In ActiveDocument.Tables 
     For Each myCell In Tbl.Range.Cells 
      If FindBold(myCell.Range) Then 
       myCell.Range.Shading.BackgroundPatternColor = -603923969 
      End If 
     Next myCell 
    Next Tbl 
End Sub 

Private Function FindBold(Rng As Range) As Boolean 

    With Rng.Find 
     .ClearFormatting 
     .Font.Bold = True 
     .Text = "" 
     .Format = True 
     .Forward = True 
     .Wrap = wdFindStop 
     .Execute 
     FindBold = .Found 
    End With 
End Function 

Comme vous le voyez, j'ai gardé votre code presque inchangé. La partie critique qui vous posait un problème a été déplacée dans une fonction distincte. En passant, la partie qui est bonne n'est pas contaminée par la partie qui ne l'est pas.

+0

Merci beaucoup pour votre aide. Cela a très bien fonctionné pour mes fins. –