如何用vba操作word域以及域代码?

在word vba中域对象为Field对象,所有域的集合为Fields对象。

word 域可以在域代码和域结果之间切换显示。

域代码可以使用Field对象的Code属性来访问,它将返回一个Range对象,代表一个域代码{}字符之间的所有内容。

以下vba代码举例了如何输出文档中的所有域代码:

Sub QQ1722187970()
    Word.Application.ScreenUpdating = False
    Dim oField As Field
    Dim oDoc As Document
    Dim oRng As Range
    Set oDoc = Word.ActiveDocument
    With oDoc
        For Each oField In .Fields
            With oField
                Set oRng = .Code
                Debug.Print oRng.Text
            End With
        Next
    End With
 Word.Application.ScreenUpdating = True
End Sub

域的结果可以使用Result属性,它也将返回一个Range对象,代表的是域代码的显示结果。

以下vba代码举例了如何输出文档中的所有域结果:

Sub QQ1722187970()
    Word.Application.ScreenUpdating = False
    Dim oField As Field
    Dim oDoc As Document
    Dim oRng As Range
    Set oDoc = Word.ActiveDocument
    With oDoc
        For Each oField In .Fields
            With oField
                Set oRng = .Result
                Debug.Print oRng.Text
            End With
        Next
    End With
 Word.Application.ScreenUpdating = True
End Sub

为了不让域代码的结果自动更新,可以设置Locked属性为True,将域锁定。

以下vba代码举例了如何将文档中的所有域锁定,使其不自动更新:

Sub QQ1722187970()
    Word.Application.ScreenUpdating = False
    Dim oField As Field
    Dim oDoc As Document
    Dim oRng As Range
    Set oDoc = Word.ActiveDocument
    With oDoc
        For Each oField In .Fields
            With oField
                .Locked = True
            End With
        Next
    End With
 Word.Application.ScreenUpdating = True
End Sub

在word文档中可以插入各种域,域可以有相应的域类型,访问Type属性可以返回域的类型,域类型可以详见域类型清单

除了域类型,还可以通过Kind属性返回域的链接类型,域的链接类型有以下四种:

Name Value Description
wdFieldKindCold 3 A field that does not have a result, for example, an Index Entry (XE), Table of Contents Entry (TC), or Private field.
wdFieldKindHot 1 A field that’s automatically updated each time it is displayed or each time the page is reformatted, but which can also be manually updated (for example, INCLUDEPICTURE or FORMDROPDOWN).
wdFieldKindNone 0 An invalid field (for example, a pair of field characters with nothing inside).
wdFieldKindWarm 2 A field that can be updated and has a result. This type includes fields that are automatically updated when the source changes and fields that can be manually updated (for example, DATE or INCLUDETEXT).

如以下代码举例演示了如何删除所有的空域或者无效的域,也就是只有{}符号,里面没有其它内容的:

Sub QQ1722187970()
    Word.Application.ScreenUpdating = False
    Dim oField As Field
    Dim oDoc As Document
    Dim oRng As Range
    Set oDoc = Word.ActiveDocument
    With oDoc
        For Each oField In .Fields
            With oField
              If .Kind = wdFieldKindNone Then
                .Delete
              End If
            End With
        Next
    End With
 Word.Application.ScreenUpdating = True
End Sub

在Field对象中有一个方法是最重要的方法,这个方法是Unlink方法。如果word文档中有很多域,现在想要把所有的域都替换为以域结果显示的静态文本,也就是不再使用域,就可以使用Unlink方法将所有域转换为不含域代码的结果文本。

如以下代码举例演示了如何将所有的SEQ域转换为静态的文本:

Sub QQ1722187970()
    Word.Application.ScreenUpdating = False
    Dim oField As Field
    Dim oDoc As Document
    Dim oRng As Range
    Set oDoc = Word.ActiveDocument
    With oDoc
        For Each oField In .Fields
            With oField
               If .Type = wdFieldSequence Then
                .Unlink
            End If
            End With
        Next
    End With
 Word.Application.ScreenUpdating = True
End Sub

如果要更新具体的某个域结果,可以使用Update方法。

如果要一次性更新或者解除关联所有的域,可以使用Fields对象的Update方法和Unlink方法。

如以下代码举例演示了如何将文档中的所有域更新并转换为静态文本:

Sub QQ1722187970()
    Word.Application.ScreenUpdating = False
    Dim oField As Field
    Dim oDoc As Document
    Set oDoc = Word.ActiveDocument
    With oDoc
        .Fields.Update
        .Fields.Unlink
    End With
    Word.Application.ScreenUpdating = True
End Sub

 

       

发表评论