Esta macro aplica un diseño de tabla a todas las tablas del documento. Luego aplica un formato de párrafo a las tablas. Cuando hay sólo unas pocas mesas (por ejemplo, 20), esto funciona muy lento.
¿Cómo puedo optimizarlo?
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: olvidé incluir la alineación de la primera columna.
Respuesta1
Estás recorriendo las tablas y luego recorriendo cada celda de cada tabla. Eso llevará tiempo. Aborde el rango como un solo objeto en lugar de recorrer las celdas.
Algo como esto debería funcionar (suponiendo que sus objetos sean correctos)
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
Básicamente es esto (que funciona con seguridad)
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
Respuesta2
Otro truco que tuve que implementar es cambiar de vista de página a vista continua para bloquear la repaginación. El punto en este caso es: Word vuelve a paginar todo el documento para cada modificación en pestañas, incluso si detiene la actualización de la pantalla.
Mi forma de bloquear efectivamente la repaginación es guardar el modo de vista de la página actual en una variable y forzar la vista continua justo después del bloqueo de la actualización de la pantalla:
Dim ViewModeSave As Variant
Application.ScreenUpdating = False
ViewModeSave = Application.ActiveWindow.View.Type
Application.ActiveWindow.View.Type = Word.wdNormalView
Al finalizar el trabajo, hay que recuperar la configuración original:
Application.Options.Pagination = True
Application.ScreenUpdating = True
Application.ActiveWindow.View.Type = ViewModeSave
Respuesta3
Tuve el mismo problema al recorrer las celdas de una tabla y configurar el formato de párrafo de cada celda. Aunque estoy de acuerdo con las respuestas anteriores, el cuello de botella no es el bucle a través de las celdas, sino que en realidad es el formato del párrafo el que es lento, increíblemente lento. Experimenté alterando la cantidad de propiedades de formato de párrafo que configuré en el bucle. Configurar 1 propiedad fue rápido, pero a medida que aumenté la cantidad de propiedades que configuré a 8, el código vba se volvió cada vez más lento; a las 8 era muy lento. Creo que es sólo una cuestión de palabra de 2013.