2017-10-20 22 views
0

J'ai un document Word avec une table de 3 colonnes et un nombre inconnu de lignes et J'ai besoin d'un macro qui peut rechercher la chaîne "Sum" dans la colonne 1.Utilisez une macro pour rechercher une table dans Word pour trouver une chaîne spécifique dans une cellule, puis définir une typographie sur une autre cellule dans la même ligne

Si une correspondance exacte est trouvée, la macro doit définir la typographie des deux cellules restantes dans la ligne à deux typographies différentes à partir de Word et supprimer également la chaîne " Somme "dans la cellule 1.

La table peut contenir plusieurs instances de la chaîne" sum "mais elles seront toujours dans la première colonne.

Le code que j'ai essayé, et je m'excuse pour mon manque de compétences de codage, mais je n'ai fait cela que pour la semaine, fonctionne bien jusqu'à la première instance de "somme", puis se ferme juste.

J'utilise ce code:

Sub FindSum() 

Dim oTbl As Table 
Dim oRow As Row 

Set myRange = ActiveDocument.Content 

    For Each oTbl In ActiveDocument.Tables 
     For Each oRow In oTbl.Rows 
      Selection.Find.Execute FindText:="Sum", ReplaceWith:="" 
      If Selection.Find.Found = True Then 
       Selection.MoveRight Unit:=wdCell 
       Selection.Style = ActiveDocument.Styles("Titel") 
       Selection.MoveRight Unit:=wdCell 
       Selection.Style = ActiveDocument.Styles("Citat") 
      End If 
     Next 
    Next 
End Sub 

J'espère que vous pouvez me aider.

+0

pas à pas le code en utilisant la touche F8 du clavier (appuyez sur plusieurs fois) .... redimensionne la fenêtre de l'éditeur et le document afin que vous puissiez voir les deux. .... cela devrait vous permettre de savoir comment le programme circule. – jsotola

Répondre

0

cela semble travailler

ne tient pas compte « Somme » en dehors des tables

testé avec deux tables

Option Explicit 

Sub FindSum() 

    Dim oTbl As Table 
    Dim stT As Long, enT As Long 
    Dim stS As Long, enS As Long 

    With Selection.Find    ' the settings remain until changed 
     .Text = "Sum" 
     .Replacement.Text = "" 
     .Forward = True 
     .Wrap = wdFindContinue 
    End With 

    For Each oTbl In ActiveDocument.Tables 

     oTbl.Columns(1).Select      ' not sure if this is required 

     Do While Selection.Find.Execute 

      stT = oTbl.Range.Start     ' table range 
      enT = oTbl.Range.End 

      stS = Selection.Range.Start    ' found text range 
      enS = Selection.Range.End 

      If stS < stT Or enS > enT Then Exit Do ' text found inside table ??? 

      Selection.Collapse wdCollapseStart 
      Selection.Find.Execute Replace:=wdReplaceOne 

      Selection.MoveRight Unit:=wdCell 
      Selection.Style = wdStyleTitle   ' original code was invalid 
      Selection.MoveRight Unit:=wdCell 
      Selection.Style = wdStyleHeading3 
     Loop 
     Selection.Collapse wdCollapseEnd 
    Next 
End Sub 
+0

Merci beaucoup. Cela a fonctionné comme un charme. –