这是一个Excel-to-Word-Bill-creation尝试,用于使工作流程自动化。
我已经使用MailMerge将Excel中的字段添加到Word表中。我在Word中有3个单独的表,每个表具有不同的行数。在第1到n-1行中,有4列,在第n行中,有2列。我想使用宏删除:
Sub DeleteEmptyTablerowsandcolumns()
Application.ScreenUpdating = False
Dim Tbl As Table, cel As Cell, i As Long, n As Long
With ActiveDocument
For Each Tbl In .Tables
n = Tbl.Rows.Count
m = Tbl.Range.Rows(n).Cells.Count
If (Tbl.Cell(n, 2).Range.Text = "0.00") Then
Tbl.Delete
Selection.TypeBackspace
Else: For i = n - 1 To 2 Step -1
If Len(Tbl.Cell(i, 4).Range.Text) <= 2 Then
Tbl.Rows(i).Delete
End If
Next i
End If
Next Tbl
End With
Application.ScreenUpdating = True
End Sub
现在,我无法使用MailMerge字段定位单元格值,以使代码正常工作。整个代码将是一件很棒的事情。我认为解决方案很简单,但仍然遥不可及。 预先感谢!
答案 0 :(得分:0)
您可以推断您正在使用mailmerge,但如果是这样,则一旦合并完成,输出中将没有任何mergefields。因此,您仍在查找mergefields的事实表明您最多在进行邮件合并预览。请尝试以下操作,这将完成合并,然后进行必要的处理。您可以按照明显的方式手动运行代码,也可以选择“完成并合并”>“编辑单个文档”。
Sub MailMergeToDoc()
Application.ScreenUpdating = False
Dim Tbl As Table, r As Long
ActiveDocument.MailMerge.Execute
For Each Tbl In ActiveDocument.Tables
With Tbl
If Split(.Range.Cells(.Range.Cells.Count).Range, vbCr)(0) = "0.00" Then
.Delete
Else
For r = .Rows.Count - 1 To 2 Step -1
If Split(.Cell(r, 4).Range.Text, vbCr)(0) = "0.00" Then .Rows(r).Delete
Next r
End If
End With
Next Tbl
Application.ScreenUpdating = True
End Sub
按照编码,宏假定要测试的单元格包含“ 0.00”;如果它们不是合并后包含的内容,请相应地编辑代码。