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时,文档焦点都会转到该元素,然后再次回到文档的末尾.
有什么指针吗?
使用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
之后,以尽量减少屏幕更新。