如何告诉我的宏只删除没有数据的列,从第二行读取。
我的情况:
我从外部工具生成报告,然后根据表格中的标记进行填充。我关心的有三列:"名称",总是填充,"年龄",有时是空的"输出"这通常是空的(我还没有发布视觉支持图片的声誉)。
我的宏目前删除了"输出"和"年龄"列,无论字段中是否有数据。
目前形式的宏:
Sub ColumnDelete()
Dim Tbl As Table, cel As Cell, i As Long, fEmpty As Boolean
With ActiveDocument
For Each Tbl In .Tables
For i = Tbl.Columns.Count To 1 Step -1
fEmpty = False
For Each cel In Tbl.Columns(i).Cells
If cel.Range.Text = "Output" & Chr(13) & Chr(7) Then
fEmpty = True
End If
If cel.Range.Text = "Age" & Chr(13) & Chr(7) Then
fEmpty = True
End If
Exit For
Next cel
If fEmpty = True Then Tbl.Columns(i).Delete
Next i
Next Tbl
End With
Set cel = Nothing: Set Tbl = Nothing
End Sub
我认为结合"输出"并且空表字符可以工作,但实际上看起来我错了。删除"输出"从脚本中导致完全没有动作。 e.g。
If cel.Range.Text = Chr(13) & Chr(7) Then
结合两者"输出"和"年龄"在一个"如果"循环导致" 13"错误。
答案 0 :(得分:0)
此代码将通过表查找,然后检查列以查看是否有任何值在除第一行之外的任何行中。如果未找到任何内容,则该列将被删除。
Option Explicit
Sub ColumnDelete()
Dim Tbl As Table, cel As Cell, i As Long, fEmpty As Boolean
With ActiveDocument
For Each Tbl In .Tables
'Debug.Print "--------------------------"
For i = Tbl.Columns.Count To 1 Step -1
'Debug.Print "Col: " & i
fEmpty = True
For Each cel In Tbl.Columns(i).Cells
'Debug.Print cel.Range.Text
If (cel.Range.Text <> Chr(13) & Chr(7)) And cel.Row.Index > 1 Then
fEmpty = False
End If
'Exit For
Next cel
If fEmpty = True Then
'Debug.Print "Delete Col: " & i
Tbl.Columns(i).Delete
End If
Next i
Next Tbl
End With
Set cel = Nothing: Set Tbl = Nothing
End Sub