2016-06-10 1 views
1

Je souhaite créer automatiquement une macro pour formater les cellules d'une table. (En Mot 2013)macro pour définir le formatage des cellules

Enregistrement action souhaitée comme un macro ce code:

With Selection.Cells(1) 
     .TopPadding = CentimetersToPoints(0) 
     .BottomPadding = CentimetersToPoints(0) 
     .LeftPadding = CentimetersToPoints(0.19) 
     .RightPadding = CentimetersToPoints(0.19) 
     .WordWrap = True 
     .FitText = False 
    End With 

Son exécution applique à nouveau que les modifications à la première cellule (pas surprenant après avoir regardé le code).

J'ai essayé d'écrire la boucle appropriée autour:

For Each c in Selection.Cells 
    .... 
Next c 

Mais sa performance est très lent, même si je passe de Screenupdating.

Existe-t-il une meilleure façon de le faire avec une macro?

+0

À quel point parlons-nous lentement? –

+1

Dans un document moyen (150 - 200 pages) pour une table de 200 cellules, il faut cc 20-40 secondes, faire la même chose manuellement est fait immédiatement. –

+0

Modifiez-vous seulement certaines cellules de la table? Si la plupart des cellules doivent avoir le même remplissage, est-il sensé de modifier les valeurs de remplissage de la cellule pour toute la table (via Selection.Tables (1) .TopPadding etc.) puis de recadrer les cellules individuelles qui en ont besoin, et appliquer wordwrap/fittext à toutes les cellules? Ici, ce dernier processus a semblé être relativement rapide, mais peut-être que mes données de test sont trop simples. Sinon, la seule amélioration de vitesse que je pouvais faire était significative, mais pas massive, réalisée en copiant toute la table à un nouveau document, en modifiant la disposition là, puis en la recopiant. –

Répondre

0

Comme je n'étais pas en mesure de sélectionner toutes les cellules dans VBA, la solution de contournement consiste à créer un document temporaire à l'endroit où je copie la table, formatez-la et copiez-la.

-1
Sub NimitTest02() 
    Dim oTbl As Table 
    Dim oCell As Cell 
    Dim i As Integer 
    Set oTbl = ActiveDocument.Tables(1) 
For i = 1 To ActiveDocument.Tables(1).Columns.Count 
    For Each oRow In oTbl.Rows 
    Set oCell = oRow.Cells(i) 
     oCell.Select 
    With Selection.Cells(1) 
     .TopPadding = CentimetersToPoints(0) 
     .BottomPadding = CentimetersToPoints(0) 
     .LeftPadding = CentimetersToPoints(0.19) 
     .RightPadding = CentimetersToPoints(0.19) 
     .WordWrap = True 
     .FitText = False 
    End With 
    Next 
Next 
End Sub 
+2

Ça vaut une petite explication –

+0

C'est juste le même code que j'ai déjà posté dans la question. "boucle autour d'elle ... Mais ses performances sont très lentes, même si je passe de Screenupdating." –