我正在尝试运行一个宏,该宏将检查所选表中第2列中是否有空单元格,如果有空单元格,则删除该行。
Sub DeleteEmptyRows()
Set Tbl = Selected.Tables(1)
With Tbl
noOfCol = Tbl.Range.Rows(1).Cells.Count
With .Range
For i = .Cells.Count To 1 Step -1
On Error Resume Next
If Len(.Cells(i).Range) = 2 Then
.Rows(.Cells(i).RowIndex).Delete
j = i Mod noOfCol
If j = 0 Then j = noOfCol
End If
Next i
End With
End With
End Sub
它确实很接近我想要的内容,但是我不确定如何在第2列中指定空白单元格。 我还尝试将noOfCol行更改为:
Selection.SetRange Selection.Tables(1).Rows(2).Cells(2).Range.Start, _
Selection.Tables(1).Rows.Last.Cells(2).Range.End
但这仍然会删除任何列为空的行。我需要它仅删除第2列为空的行。 谢谢
答案 0 :(得分:0)
使用列中的所有单元格是一个问题,因为无法为列设置Range
。 Range
必须是文档中连续的一组字符。尽管一列看上去是连续的,但在幕后实际上却不是。表格的字符从左上到右,从上到下(行)。
最接近的代码是选择列,然后在Selection
对象中工作。或循环行。
下面的代码示例演示了如何“循环行”-类似于问题中的代码使用的内容。此处的关键是将Table.Cells
用于循环,For
计数器指定行索引,而列号(2)指定列索引。
Sub ProcessColTwo()
Dim tbl As Word.Table
Dim nrRows As Long, ColToCheck As Long, i As Long
Dim cellRange As Word.Range
Set tbl = ActiveDocument.Tables(1)
nrRows = tbl.Rows.Count
ColToCheck = 2
For i = nrRows To 1 Step -1
Set cellRange = tbl.Cell(i, ColToCheck).Range
If Len(cellRange.text) = 2 Then
cellRange.Rows(1).Delete
End If
Next i
End Sub
下面是使用Selection
Sub ProcessColTwo()
Dim tbl As Word.Table
Dim ColToCheck As Long
Dim cel As Word.Cell
Set tbl = ActiveDocument.Tables(1)
ColToCheck = 2
tbl.Columns(ColToCheck).Select
For Each cel In Selection.Cells
If Len(cel.Range.text) = 2 Then
cel.Range.Rows(1).Delete
End If
Next
End Sub
答案 1 :(得分:0)
下面的代码用于邮件合并后的“每个页面” [我使用了嵌套循环(一个用于[TABLE],另一个用于空[CELLS])
所有代码[尊重:辛迪·梅斯特]
Sub ProcessColTwo()
Dim pg As Page
Dim tbl As Word.Table
Dim ColToCheck As Long
Dim cel As Word.Cell
For Each tbl In ActiveDocument.Tables
ColToCheck = 2
tbl.Columns(ColToCheck).Select
For Each cel In Selection.Cells
If Len(cel.Range.Text) = 2 Then
cel.Range.Rows(1).Delete
End If
Next
Next
End Sub