2016-06-10 14 views
1

Ich möchte ein Makro erstellen, um Zellen einer Tabelle automatisch zu formatieren. (In Wort 2013)Makro zum Formatieren von Zellen

Aufnahme gewünschte Aktion als Makro Ergebnisse dieser 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 

es wieder Rennen gilt Änderungen nur auf die erste Zelle (nicht überraschend, nachdem Sie den Code suchen).

Ich habe versucht, um es angemessen Schleife zu schreiben:

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

Aber seine Leistung ist sehr langsam, auch wenn ich von Screenupdating wechseln.

Gibt es einen besseren Weg, es mit einem Makro zu tun?

+0

Über wie langsam reden wir? –

+1

In einem mittleren Dokument (150 - 200 Seiten) für eine Tabelle von 200 Zellen dauert es cc 20-40 Sekunden, das gleiche manuell zu tun ist sofort getan. –

+0

Ändern Sie nur einige der Zellen in der Tabelle? Wenn die meisten Zellen dieselbe Auffüllung haben müssen, wäre es sinnvoll, die Zellenauffüllwerte für die gesamte Tabelle zu ändern (über Selection.Tables (1) .TopPadding usw.), dann einzelne Zellen, die sie benötigen, neu zu puffern, und wende wordwrap/fittext an alle Zellen an? Hier schien der letzte Prozess relativ schnell zu sein, aber vielleicht sind meine Testdaten zu einfach. Ansonsten war die einzige Geschwindigkeitsverbesserung, die ich machen konnte, signifikant, aber nicht massiv, erreicht, indem die gesamte Tabelle in ein neues Dokument kopiert wurde, das Layout dort modifiziert wurde und dann zurückkopiert wurde. –

Antwort

0

Da ich nicht alle Zellen in VBA auswählen konnte, besteht die Problemumgehung darin, ein temporäres Dokument zu erstellen, wo ich die Tabelle kopiere, dort formatiere und zurückkopiere.

-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

Es lohnt sich eine kleine Erklärung –

+0

Es ist nur der gleiche Code, was ich bereits in der Frage geschrieben. "Schleife darum herum ... Aber seine Leistung ist sehr langsam, selbst wenn ich Screenupdating umschalte." –

Verwandte Themen