Dieses Makro wendet ein Tabellendesign auf alle Tabellen im Dokument an. Anschließend wendet es ein Absatzformat auf die Tabellen an. Wenn nur wenige Tabellen vorhanden sind (z. B. 20), läuft dies sehr langsam.
Wie kann ich es optimieren?
Sub Apply_tabledesign_to_all_tables()
'
' Apply_tabledesign_to_all_tables Macro
' Apply EVU table to all tables in document.
'
Application.ScreenUpdating = False
Dim tbl As Table
Dim ac_cell As Word.cell
For Each tbl In ActiveDocument.Tables
tbl.Style = "EVU"
For Each ac_cell In tbl.Range.Cells
ac_cell.Range.ParagraphFormat.Style = ActiveDocument.Styles("tabel")
Next
'Set the alignment for the first column
For k = 1 To tbl.Columns(1).Cells.Count
tbl.cell(k, 1).Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
Next k
Next
Application.ScreenUpdating = True
End Sub
Bearbeiten: Ich habe vergessen, die Ausrichtung der ersten Spalte einzubeziehen.
Antwort1
Sie durchlaufen Tabellen und dann jede Zelle in jeder Tabelle. Das wird einige Zeit in Anspruch nehmen. Adressieren Sie den Bereich als einzelnes Objekt, anstatt die Zellen zu durchlaufen.
So etwas sollte funktionieren (vorausgesetzt, Ihre Objekte sind korrekt)
Sub Macro2()
Dim tbl As Table
For Each tbl In ActiveDocument.Tables
tbl.Style = "EVU"
tbl.Range.ParagraphFormat.Style = ActiveDocument.Styles("tabel")
Next
End Sub
Im Wesentlichen ist es dies (was mit Sicherheit funktioniert)
Sub Macro2()
Dim tbl As Table
For Each tbl In ActiveDocument.Tables
tbl.Style = "Light Shading"
tbl.Range.ParagraphFormat.Style = "Heading 1"
Next
End Sub
Antwort2
Ein weiterer Trick, den ich implementieren musste, ist das Umschalten von der Seitenansicht zur fortlaufenden Ansicht, um die Neupaginierung zu blockieren. Der Sinn in diesem Fall ist: Word paginiert das gesamte Dokument bei jeder Änderung in den Registerkarten neu, auch wenn Sie die Bildschirmaktualisierung stoppen.
Ich kann die Neupaginierung wirksam blockieren, indem ich den aktuellen Seitenansichtsmodus in einer Variable speichere und direkt nach der Blockierung der Bildschirmaktualisierung eine kontinuierliche Ansicht erzwinge:
Dim ViewModeSave As Variant
Application.ScreenUpdating = False
ViewModeSave = Application.ActiveWindow.View.Type
Application.ActiveWindow.View.Type = Word.wdNormalView
Am Ende der Arbeiten müssen Sie die ursprünglichen Einstellungen wiederherstellen:
Application.Options.Pagination = True
Application.ScreenUpdating = True
Application.ActiveWindow.View.Type = ViewModeSave
Antwort3
Ich hatte das gleiche Problem, als ich durch die Zellen einer Tabelle schleifte und das Absatzformat jeder Zelle einstellte. Obwohl ich den obigen Antworten zustimme, ist nicht das Schleifen durch die Zellen der Engpass, sondern die Absatzformatierung, die langsam ist – unglaublich langsam. Ich habe experimentiert, indem ich die Anzahl der Absatzformateigenschaften geändert habe, die ich in der Schleife festgelegt habe. Das Festlegen von 1 Eigenschaft ging schnell, aber als ich die Anzahl der Eigenschaften auf 8 erhöhte, wurde der VBA-Code immer langsamer; bei 8 war er wirklich langsam. Ich denke, das ist nur ein Problem von Word 2013.