1

下面的宏将输入字段标题,后跟字段值。If 语句应检查字段的值,如果大于 30,则给出实际值,否则为零。

如果它是真的,而不是出现的值,我只是得到我输入的实际文本,而不是它的值。

   Sub Macro1()
      Dim doc As Word.Document
      Dim dtField As Word.MailMergeDataField
      Dim sFieldName As String
      Dim sFieldActualName As String
      Dim j As Integer

      Set doc = ActiveDocument
      j = 1

      For Each dtField In doc.MailMerge.DataSource.DataFields

        sFieldActualName = doc.MailMerge.DataSource.FieldNames(j).Name
        sFieldName = dtField.Name
        Selection.TypeText Text:=sFieldActualName + ": "
'---------------------------------------------------------------------------
            doc.MailMerge.Fields.AddIf Range:=Selection.Range, MergeField:= _
                sFieldName, Comparison:=wdMergeIfGreaterThan,_
 CompareTo:="30", TrueText:="{MERGEFIELD sFieldName}", _
                FalseText:="0"
'---------------------------------------------------------------------------
        Selection.TypeParagraph
        j = j + 1

      Next

    End Sub

如果我需要澄清任何事情,请告诉我。

编辑:我从 excel 使用的示例数据

one   two   three   four    five
85    50     63      50      41
52    10     84      10      15
85    25     63      35      10
4

1 回答 1

1

据我所知,插入嵌套字段集的唯一方法是直接插入字段。嵌套字段很棘手 - 在互联网上有几种“外面”的方法。以下是我使用的。

在此变体中,最外面的字段插入了内部字段代码的占位符文本。占位符文本是带括号的字段代码(不是 Ctrl+F9 类型)。

GenerateNestedField外部字段与占位符字符串一起发送到函数。该函数在字段代码中定位占位符并在其位置插入实际字段。

我必须修改我的标准代码以处理您为 If 字段插入 MailMergeField 的事实。有必要将 MailMergeField 转换为常规 Word.Field,我通过选择插入的字段,然后获取 Fields 集合中的第一个字段来执行此操作。

Sub IfPlusMergeField()
    Dim doc As word.Document
    Dim sFieldCode As String, sFieldName As String
    Dim fldMerge As word.MailMergeField
    Dim fldIf As word.Field

    Set doc = ActiveDocument
    sFieldName = dt.FieldName
    sFieldCode = "{Mergefield " & sFieldName & "}"
    Set fldMerge = doc.MailMerge.Fields.AddIf(Range:=Selection.Range, _
                   MERGEFIELD:=sFieldName, Comparison:=wdMergeIfGreaterThan, _
                   CompareTo:="30", TrueText:=sFieldCode, _
                   FalseText:="0")
    fldMerge.Select
    Set fldIf = Selection.Fields(1)
    Debug.Print GenerateNestedField(fldIf, sFieldCode)
End Sub

'Returns the changed field code
Function GenerateNestedField(fldOuter As word.Field, _
                             sPlaceholder As String) As String

    Dim rngFld As word.Range, doc As word.Document
    Dim bFound As Boolean
    Dim sFieldCode As String

    Set doc = fldOuter.Parent

    Set rngFld = fldOuter.code
    rngFld.TextRetrievalMode.IncludeFieldCodes = True
    bFound = rngFld.Find.Execute(findText:=sPlaceholder)
    'Get the field code from the placeholder by removing the { }
    sFieldCode = Mid(sPlaceholder, 2, Len(sPlaceholder) - 2)
    If bFound Then
        doc.Fields.Add rngFld, word.WdFieldType.wdFieldEmpty, sFieldCode, False
    End If
    'Debug.Print fldOuter.code

    GenerateNestedField = fldOuter.code
End Function
于 2018-04-12T20:54:08.767 回答