Definir ancho de columnas de tablas Word mediante código VBA
Liloj
-
yg_be Mensajes publicados 23437 Fecha de registro Estado Colaborador Última intervención -
yg_be Mensajes publicados 23437 Fecha de registro Estado Colaborador Última intervención -
Sí, es posible. Aquí tienes un código VBA que ajusta las anchuras de las columnas para todos los cuadros de tabla en un documento de Word seleccionado, aplicando las medidas que indicas, y fusionando la primera fila de cada tabla:
Sub AjustarColumnasTablaSeleccionadas()
Dim tbl As Table
Dim i As Integer
Dim targetWidth(1 To 5) As Single
Dim firstRowMerged As Boolean
' Dimensiones en centímetros
' Convertir a puntos (1 cm = 28.3465 puntos)
targetWidth(1) = 1.7 * 28.3465
targetWidth(2) = 1.6 * 28.3465
targetWidth(3) = 1.0 * 28.3465
targetWidth(4) = 3.0 * 28.3465
targetWidth(5) = 1.8 * 28.3465
' Normalmente la primera fila no está fusionada; si se desea fusionar
' la primera fila de cada tabla, se ajusta en el bucle.
For Each tbl In ActiveDocument.Tables
' Asegurarse de que la tabla tiene al menos 5 columnas
If tbl.Columns.Count >= 5 Then
' Fusionar la primera fila entre las columnas 1 a 5 (si se desea)
With tbl.Rows(1)
.Cells(1).Merge MergeTo:=.Cells(5)
End With
' Establecer anchos de columna (columna 1 a 5)
For i = 1 To 5
tbl.Columns(i).Width = targetWidth(i)
Next i
End If
Next tbl
End Sub
Notas:
- El código fusiona la primera fila de cada tabla de la forma: celda(1) a celda(5) de la fila 1.
- Las anchuras se fijan en centímetros tal como indicas: 1,7 cm, 1,6 cm, 1 cm, 3 cm y 1,8 cm.
- El valor de conversión a puntos se usa para establecer el ancho; Word maneja puntos internamente.
- Si no quieres fusionar la primera fila, elimina la sección de Merge.
Para usar:
1) Abre Word, pulsa Alt+F11 para abrir el Editor de VBA.
2) Inserta un módulo nuevo y pega el código.
3) Cierra el editor y ejecuta la macro AjustarColumnasTablaSeleccionadas desde Macros.
Si necesitas que la macro opere solo en tablas seleccionadas o en rangos específicos, dímelo y te adapto el código.
Sub AjustarColumnasTablaSeleccionadas()
Dim tbl As Table
Dim i As Integer
Dim targetWidth(1 To 5) As Single
Dim firstRowMerged As Boolean
' Dimensiones en centímetros
' Convertir a puntos (1 cm = 28.3465 puntos)
targetWidth(1) = 1.7 * 28.3465
targetWidth(2) = 1.6 * 28.3465
targetWidth(3) = 1.0 * 28.3465
targetWidth(4) = 3.0 * 28.3465
targetWidth(5) = 1.8 * 28.3465
' Normalmente la primera fila no está fusionada; si se desea fusionar
' la primera fila de cada tabla, se ajusta en el bucle.
For Each tbl In ActiveDocument.Tables
' Asegurarse de que la tabla tiene al menos 5 columnas
If tbl.Columns.Count >= 5 Then
' Fusionar la primera fila entre las columnas 1 a 5 (si se desea)
With tbl.Rows(1)
.Cells(1).Merge MergeTo:=.Cells(5)
End With
' Establecer anchos de columna (columna 1 a 5)
For i = 1 To 5
tbl.Columns(i).Width = targetWidth(i)
Next i
End If
Next tbl
End Sub
Notas:
- El código fusiona la primera fila de cada tabla de la forma: celda(1) a celda(5) de la fila 1.
- Las anchuras se fijan en centímetros tal como indicas: 1,7 cm, 1,6 cm, 1 cm, 3 cm y 1,8 cm.
- El valor de conversión a puntos se usa para establecer el ancho; Word maneja puntos internamente.
- Si no quieres fusionar la primera fila, elimina la sección de Merge.
Para usar:
1) Abre Word, pulsa Alt+F11 para abrir el Editor de VBA.
2) Inserta un módulo nuevo y pega el código.
3) Cierra el editor y ejecuta la macro AjustarColumnasTablaSeleccionadas desde Macros.
Si necesitas que la macro opere solo en tablas seleccionadas o en rangos específicos, dímelo y te adapto el código.
7 respuestas
-
yg_be Mensajes publicados 23437 Fecha de registro Estado Colaborador Última intervención Embajador 1 588
hola, creo que puedes descubrir fácilmente cómo hacer eso grabando, en Word, una macro mientras manipulas los anchos de columna. -
Hola,
Entonces lo intenté, pero con el grabador de macros en Word no logro seleccionar elemento tras elemento y hacer las manipulaciones; me parece que con el modo automático no se puede hacer lo que quiero :(
Es por eso que busco un código en Visual Basic, pensaba que me las arreglaría ya que uso VBA con Excel con regularidad ... pero me quedo atascado :-S-
¿Has obtenido una macro? Allí verás código VBA del que podrás inspirarte para modificar tu código VBA en Excel.
- Sub Format_colonnes()
' Format tbl
For Each colonne In ActiveDocument.Tables_
.Columns(1).Width = CentimetersToPoints(1.7)
.Columns(2).Width = CentimetersToPoints(1.6)
.Columns(3).Width = CentimetersToPoints(1)
.Columns(4).Width = CentimetersToPoints(3)
.Columns(5).Width = CentimetersToPoints(1.8)
Next
End Sub
-
-
Bien, no funciona, debo haberme equivocado en algún lugar, me da: error de compilación, referencia incorrecta o no calificada
He estado dándole vueltas pero no logro entenderlo.-
¿Puedes compartir tu código e indicar en qué línea ocurre el error? gracias por usar las etiquetas de código: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
-
-
Lo siento por mi respuesta tardía, tenía urgencias que atender :-S
Espero que mi uso de las etiquetas sea correcto.
Sin línea indicada, es solo anotado error de compilación: se esperaba una función o variable
Es la primera vez que veo este código de error, es lo que me hace pensar que probablemente me equivoqué en la sintaxis del código
¡Gracias de nuevo por tu ayuda!
Sub Format_colonnes() ' ' Format tbl For Each colonne In ActiveDocument.Tables_ .Columns(1).Width = CentimetersToPoints(1.7) .Columns(2).Width = CentimetersToPoints(1.6) .Columns(3).Width = CentimetersToPoints(1) .Columns(4).Width = CentimetersToPoints(3) .Columns(5).Width = CentimetersToPoints(1.8) Next End Sub
-
debería haber una línea resaltada en el momento en que ocurre el error.
probaría más bien:option explicit Sub Format_colonnes() ' ' Formato tbl dim tb as table For Each tb In ActiveDocument.Tables tb.Columns(1).Width = CentimetersToPoints(1.7) tb.Columns(2).Width = CentimetersToPoints(1.6) tb.Columns(3).Width = CentimetersToPoints(1) tb.Columns(4).Width = CentimetersToPoints(3) tb.Columns(5).Width = CentimetersToPoints(1.8) Next tb End Sub
-
-
esta vez sí tengo una línea subrayada... código de error '5992' en la línea siguiente:
tb.Columns(1).Width = CentimetersToPoints(1.7)
no logro entender... -
No se pueden acceder a columnas individuales de esta colección porque la tabla tiene celdas de diferentes anchuras.
-
Me equivoqué, mis primeras líneas estaban fusionadas :-s pero he solucionado fácilmente ese problema gracias a tu comentario.
¡Muchas gracias por tu ayuda!
Tengo un pequeño problema más con VBA pero Excel, ¿debería abrir un nuevo hilo/post o continuar en este?
¡En cualquier caso, muchas gracias de nuevo!