1

Этот макрос применяет дизайн таблицы ко всем таблицам в документе. Затем он применяет формат абзаца к таблицам. Когда есть только несколько таблиц (например, 20), это работает очень медленно.

Как я могу оптимизировать это?

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

Изменить: я забыл включить выравнивание первого столбца.

2 ответа2

2

Вы просматриваете таблицы, а затем просматриваете каждую ячейку в каждой таблице. Это займет время. Обращайтесь к диапазону как к единому объекту, а не к циклу по ячейкам.

Нечто подобное должно работать (при условии, что ваши объекты верны)

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

По сути это именно то (что работает точно)

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
-1

У меня была та же проблема: циклически проходить по ячейкам таблицы и устанавливать формат абзаца для каждой ячейки. Хотя я согласен с ответами выше, узким местом является не циклическое прохождение ячеек, а медленное, невероятно медленное форматирование абзаца. Я экспериментировал с изменением количества свойств формата абзаца, которые я установил в цикле. Установка свойства 1 была быстрой, но когда я увеличил количество свойств, которые я установил на 8, код vba становился все медленнее и медленнее; в 8 было очень медленно. Я думаю, что это всего лишь вопрос 2013 года.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .