如何使用MailMerge字段作为在Word中删除表行的条件?需要VBA代码

时间:2019-06-07 14:25:21

标签: excel vba ms-word mailmerge

创建帐单/信件:

这是一个Excel-to-Word-Bill-creation尝试,用于使工作流程自动化。

我已经使用MailMerge将Excel中的字段添加到Word表中。我在Word中有3个单独的表,每个表具有不同的行数。在第1到n-1行中,有4列,在第n行中,有2列。我想使用宏删除:

  1. 整个表,如果单元格(n,2)的值为0(“ n”-表的最后一行,“ 0”-值为“ 0.00”的MailMerge字段)。
  2. 如果单元格(i,4)的值为0(1 <“ i” 行。
    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字段定位单元格值,以使代码正常工作。整个代码将是一件很棒的事情。我认为解决方案很简单,但仍然遥不可及。 预先感谢!

1 个答案:

答案 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”;如果它们不是合并后包含的内容,请相应地编辑代码。