Por que essa macro de palavra simples é tão lenta?

1

Esta macro aplica um tabledesign a todas as tabelas no documento. Em seguida, aplica um formato de parágrafo às tabelas. Quando há apenas algumas tabelas (por exemplo, 20), isso é muito lento.

Como posso otimizá-lo?

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

Editar: esqueci de incluir o alinhamento da primeira coluna.

    
por Andreas 07.12.2015 / 15:04

2 respostas

2

Você está circulando por tabelas e, em seguida, faz um loop por cada célula de cada tabela. Isso levará tempo. Enderece o intervalo como um único objeto em vez de percorrer as células.

Algo como isso deve funcionar (supondo que seus objetos estejam corretos)

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

Essencialmente é isso (o que funciona com certeza)

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
    
por 07.12.2015 / 15:28
-1

Eu tive o mesmo problema, percorrendo células em uma tabela e definindo o formato de parágrafo de cada célula. Embora eu concorde com as respostas acima, não é o loop através das células que é o gargalo, é na verdade a formatação do parágrafo que é lenta - incrivelmente lenta. Eu experimentei minha alteração do número de propriedades de formato de parágrafo que eu configurei no loop. A configuração da propriedade 1 foi rápida, mas à medida que aumentava o número de propriedades que defini para 8, o código vba ficou mais lento e mais lento; às 8 foi muito lento. Eu acho que é apenas uma palavra de 2013.

    
por 30.12.2016 / 12:31