Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA更新Word中合并字段的值_Vba_Ms Word_Mergefield - Fatal编程技术网

使用VBA更新Word中合并字段的值

使用VBA更新Word中合并字段的值,vba,ms-word,mergefield,Vba,Ms Word,Mergefield,我需要下载一个word文档并编辑它包含的字段,以使用表单中的输入数据生成最终文档 word文档包含许多我需要用新值更新的MERGEFIELD和条件。 我尝试循环遍历字段,当mergefield属于我的有效字段列表时,替换该值;但它不适用于条件所包含的合并字段 简单来说,它可以工作: 这是一个很好的例子{MERGEFIELD HerrnFrau}{MERGEFIELD Titel}{MERGEFIELD Nachname} 对于条件不: {IF{MERGEFIELD property}=“yes”

我需要下载一个word文档并编辑它包含的字段,以使用表单中的输入数据生成最终文档

word文档包含许多我需要用新值更新的
MERGEFIELD
和条件。 我尝试循环遍历字段,当
mergefield
属于我的有效字段列表时,替换该值;但它不适用于条件所包含的合并字段

简单来说,它可以工作:

这是一个很好的例子{MERGEFIELD HerrnFrau}{MERGEFIELD Titel}{MERGEFIELD Nachname}

对于条件不:

{IF{MERGEFIELD property}=“yes”{MERGEFIELD HerrnFrau}


更新文档字段以正确更新条件内容的正确方法是什么?

删除整个IF字段并在其位置插入数据。但请注意,这种方法不是使用合并字段的正确方法,并且由于某种原因,在您对该字段执行任何操作之前,应先更新字段文档在代码完成后,使用
result.text
写入的值将丢失。最好完全删除字段,并将内容作为静态文本写入它们所在的位置。更好的做法是,因为代码无疑可以将您试图写入{MERGEFIELD property}的内容写入其中,为什么不直接在代码中进行测试,并将整个条件字符串写入文档?使用书签比合并字段更有意义。
Dim objWord As Word.Application
Dim objDoc As Word.document
Dim objField As Word.field
Dim idx As Integer

Dim idxField As Long
idxField = 1
With objDoc
    For Each objField In .Fields
        ' Special case
        If objField.Code = " MERGEFIELD hlp_Abs2 " Then
            idx = GetIndexValue(objField.Code, AllFields)
            objField.result.text = "1"
        Else
            ' Check array with field names
            If IsInArray(objField.Code, AllFields) Then
                idx = GetIndexValue(objField.Code, AllFields)
                objField.result.text = AllValues(idx)
            End If
        End If

    Next objField
End With