当我在VBA中读取它们的值时,如何阻止Word选择每个FormField?

Kap*_*ani 5 vba ms-word word-vba

我在Word 2013中有一个模板文档,用户填写了大量的Legacy Text FormFields.在文档的最后,我添加了一个按钮,将答案编译成没有格式化的字符串,然后将其复制到剪贴板.

可以工作,但是在读取每个FormField时,Word文档会在每个文本字段和文档末尾之间来回跳过.这在视觉上令人担​​忧.有没有办法收集每个FormField的值而不用Word将光标/焦点移动到每个字段时读取?

以下是代码示例:

Private Sub cmdCreateNote_Click()

    Call cmdClearNote_Click

    Dim ff As FormFields
    Set ff = ActiveDocument.FormFields

    Dim Output As String
    Output = ff("ddReviewType").Result & vbCrLf

    If ff("chFacInfo").Result Then
        Dim FacInfo
        FacInfo = Array("Field1: ", _
            "Field2: ", _
            "Field3: ", _
            "Field4: ", _
            "Field5: ")

        Output = Output & "FIRST SECTION" & vbCrLf

        For Index = 1 To 5
            If ff("chFacInfo" & Index).Result Then
                Output = Output & FacInfo(Index - 1) & ff("txFacInfo" & Index).Result & vbCrLf
            End If
        Next

        Output = Output & vbCrLf
    End If

    Dim FORange As Range
    Set FORange = ActiveDocument.Bookmarks("FinalOutput").Range
    FORange.Text = Output
    ActiveDocument.Bookmarks.Add "FinalOutput", FORange

    Selection.GoTo What:=wdGoToBookmark, Name:="FinalOutput"
    Selection.Copy

End Sub
Run Code Online (Sandbox Code Playgroud)

看来每次我访问ActiveDocument.FormFields(x).Result时,文档焦点都会转到该元素,然后再次回到文档的末尾.

有什么指针吗?

Ada*_*ips 5

使用Bookmark对象而不是FormField. 这将允许您在不更改屏幕焦点的情况下访问属性。有关如何执行此操作的详细信息,请参阅在 Word 2013 VBA 脚本抑制不需要的跳跃/滚动的答案。

ActiveDocument.Bookmarks("myFieldName").Range.Fields(1).Result
Run Code Online (Sandbox Code Playgroud)


Oll*_*ren -1

发表评论作为答案,因为它有效!

尝试Application.ScreenUpdating = False在浏览 FormFields 之前,然后将其设置为True之后,以尽量减少屏幕更新。