variable ultima todas tengan tamaƱo seleccionar rango quitar que para necesario mismo macro las hasta ello desde datos con como combinadas combinada celdas celda activa vba ms-word word-vba

vba - ultima - Eliminar un rango de una tabla con celdas combinadas



seleccionar rango variable vba (2)

Básicamente, lo que estoy tratando de lograr es esto: eliminar todas las filas de una tabla comenzando desde donde el cursor está en la tabla hasta el final de la tabla.

El problema es que esta tabla contiene celdas fusionadas verticalmente, así que cuando intento hacer algo como esto:

For i = Selection.Tables(1).Rows.Count To Selection.Cells(1).RowIndex Step -1 Selection.Tables(1).Rows(i).Delete Next

Se queja de que no se puede acceder a filas individuales porque la tabla contiene celdas combinadas verticalmente.

También intenté seleccionar primero el rango y luego eliminar la selección. Pero no pude obtener la definición de rango correcta; siempre se quejaba de que había un parámetro definido incorrectamente.


¿Las celdas de la mesa fusionadas no son solo un problema en la parte trasera con VBA? Word parece confundirse con el recuento de columnas y filas. El siguiente parece ser bastante robusto con cualquier combinación de celdas combinadas horizontal o verticalmente.

Sub DeleteRows() Selection.MoveDown Unit:=wdLine, Count:=(Selection.Tables(1).Rows.Count - Selection.Cells(1).RowIndex), Extend:=wdExtend Selection.Rows.Delete End Sub


Quería agregar una respuesta cuando intenté la solución CuberChase pero no funcionó con mi tabla:

Observe que he combinado filas verticalmente en las columnas 1, 2 y 5. Cuando implementé Selection.MoveDown con la intención de seleccionar todas las filas dentro de la fila principal "A3", no reconoció las filas internas en las columnas 3 y 4. En su lugar, seleccionó las filas padre "A4", "A5" y "A6" (el mismo formato que A3) sin seleccionar ninguna fila interna.

Esto es lo que tuve que hacer al final para eliminar con éxito las filas padre e hijo en mi tabla. Primero tuve que recopilar los índices de la primera celda de cada fila para eliminar en una matriz. Invertí mi matriz para trabajar desde abajo para no cambiar los índices en tiempo de ejecución.

Luego hice un bucle a través de mi matriz invertida, seleccionando el rango de celdas pertenecientes a cada fila principal y borrando las filas asociadas con mi selección.

table = ActiveDocument.Tables(1) For Each idx In ReverseArray cells_to_delete = ActiveDocument.Range(Start=table.Range.Cells(idx).Range.Start, End=table.Range.Cells(idx+*count_of_cells*).Range.End) cells_to_delete.Select Selection.Range.Rows.Delete Next idx

No tengo idea de si alguien más ha tenido un problema similar, pero pensé que pondría la respuesta aquí en caso de que alguien lo haga. :)