Esta macro aplica um design de tabela a todas as tabelas do documento. Em seguida, aplica um formato de parágrafo às tabelas. Quando há apenas algumas tabelas (por exemplo, 20), o processo é 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.
Responder1
Você está percorrendo tabelas e, em seguida, percorrendo cada célula de cada tabela. Isso levará tempo. Aborde o intervalo como um único objeto em vez de percorrer as células.
Algo assim deve funcionar (assumindo 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 (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
Responder2
Outro truque que tive que implementar foi mudar da visualização de página para visualização contínua para bloquear a repaginação. O ponto neste caso é: o Word repagina todo o documento para cada modificação nas guias, mesmo se você interromper a atualização da tela.
Minha maneira de bloquear efetivamente a repaginação é salvar o modo de visualização da página atual em uma var e forçar a visualização contínua logo após o bloqueio da atualização da tela:
Dim ViewModeSave As Variant
Application.ScreenUpdating = False
ViewModeSave = Application.ActiveWindow.View.Type
Application.ActiveWindow.View.Type = Word.wdNormalView
Ao final do trabalho, é necessário recuperar as configurações originais:
Application.Options.Pagination = True
Application.ScreenUpdating = True
Application.ActiveWindow.View.Type = ViewModeSave
Responder3
Eu tive o mesmo problema, percorrendo as células de uma tabela e definindo o formato do parágrafo de cada célula. Embora eu concorde com as respostas acima, não é o loop pelas células que é o gargalo; na verdade, é a formatação do parágrafo que é lenta - incrivelmente lenta. Experimentei alterar o número de propriedades de formato de parágrafo que defini no loop. Definir 1 propriedade foi rápido, mas conforme aumentei o número de propriedades defini para 8, o código vba ficou cada vez mais lento; às 8 foi muito lento. Acho que é apenas uma questão de palavra de 2013.