vba - 如果单元格为空,Word 宏从表中删除行
问题描述
我正在尝试运行一个宏,它将检查选定表中第 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 列为空的行。谢谢
解决方案
使用列中的所有单元格是一个问题,因为无法将 a 设置Range
为列。ARange
必须是文档中的连续字符集。虽然一列看起来是连续的,但在幕后它的内容实际上并不是。表格的字符从左上到右,从上到下(行)。
最接近的代码是选择列然后在Selection
对象中工作。或循环行。
以下代码示例演示了如何“循环行” - 类似于问题中的代码使用的内容。这里的关键是使用Table.Cells
for 循环,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
推荐阅读
- machine-learning - Azure ML 自定义映像标记和注册表
- configuration - Windows 上的 Snort 配置
- laravel - Laravel API 得到空白响应
- .net - 带有 libusbdotnet 依赖项的 Linux 上的 dotnet
- python - 避免使用相同的变量命名不同的异步任务,以防止无法停止的任务
- elasticsearch - JHipster:Elasticsearch:.yo-rc.json 设置
- javascript - 带有Javascript函数的Django项目什么都不做
- vue.js - this.$emit 与 this.$root.$emit,vuejs 中的最佳实践
- apollo - Apollo 轮询查询覆盖缓存
- javascript - 为什么 React useEffect 依赖似乎被忽略了?