填写表格ms word VBA/通过word进行最有效的智能导航

填写表格ms word VBA/通过word进行最有效的智能导航,vba,ms-word,Vba,Ms Word,摘要:我的公司向客户发送信函,并希望我编写一个宏来填充word文档中设置的不同文本表单字段,因为发送的不同信函之间的内容变化非常有限。我在excel中使用过宏,但这是我第一次使用ms word宏 问题:我很难通过ms word找到有效、智能的导航。我确实找到了这篇关于 这和箭头键是一样的。希望能够深入了解浏览word文档的最佳方式。例如,我应该做一个循环移动到正确的1空间,直到我找到有意义的东西,还是有更有效的方法 问题:是否可以在变量中存储特定的表单位置,或者ms word是否没有坐标系 提前

摘要:我的公司向客户发送信函,并希望我编写一个宏来填充word文档中设置的不同文本表单字段,因为发送的不同信函之间的内容变化非常有限。我在excel中使用过宏,但这是我第一次使用ms word宏

问题:我很难通过ms word找到有效、智能的导航。我确实找到了这篇关于 这和箭头键是一样的。希望能够深入了解浏览word文档的最佳方式。例如,我应该做一个循环移动到正确的1空间,直到我找到有意义的东西,还是有更有效的方法

问题:是否可以在变量中存储特定的表单位置,或者ms word是否没有坐标系


提前谢谢

您应该能够在文档中需要访问的不同位置创建书签。在现代词汇中,它位于“链接”组的“插入”选项卡上。然后,您可以从VBA访问书签,并使用以下代码将文本插入其中:

ActiveDocument.Bookmarks("myBookmark").Range.InsertBefore "Inserted Text"

这有更多关于这项技术的数据。此外,还有一些关于书签对象的数据。

要使用内容控件,必须确保已设置控件的
标题。如果需要,还可以设置
标记。请参阅快照

然后可以使用此代码更新内容控件或检索其值

Sub Sample()
    Dim cc As ContentControl

    For Each cc In ActiveDocument.ContentControls
        If cc.Title = "MyTextBox1" Then
            cc.Range.Text = "Hello World!"
            Exit For
        End If
    Next cc
End Sub
当您运行代码时,它看起来就是这样


要获取控件的文本,可以使用
Debug.Print cc.Range.text

在最新Windows版本的Word内容控件中,至少有三种类型的表单字段,“旧表单字段”和ActiveX表单字段。假设您处理的是旧表单字段,您应该能够使用书签名称为FormFields集合编制索引,然后使用,例如

ActiveDocument.FormFields("Text1").Result = "mytextformfieldresult"

ActiveDocument.FormFields("DropDown1").Result = "mydropdownformfieldresult"

ActiveDocument.FormFields("Check1").Checkbox.Value = True

+一个解释得很好的问题。在word中,您可以使用
.Find
For loops
GoTo
在文档中导航。如果有表单字段,则根本不需要循环。我很好奇为什么要将位置存储在变量中?您可以使用内容控件的名称直接使用它们。@SiddharthRout我想我可能可以按名称引用组件,但不确定其语法。然而,我对在变量中存储坐标的好奇并不一定与这个问题完全相关,尽管它可能会有帮助。这里有一个非常基本的例子:另一个:和另一个:)@SiddharthRout也许是个愚蠢的问题,但是如果表单字段已经被命名,我如何定位表单字段的名称呢?如果我对表单字段使用书签,如下所示:
ActiveDocument.Bookmarks(“myBookmark”).Range.InsertBefore“Inserted Text”
有时文本插入表单字段之外,表单字段变得无用,这真的很有帮助。其他人用表单字段制作了这个文档,每个表单字段都在text1、text2、text3下列出了书签…等等,我将尝试引用这些书签(或者可能是Siddharth所说的按名称命名的控件)。我会让你知道我想到了什么。感谢dsolimanosimple,并做了我想做的事情。我现在实际上使用了这段代码,因为我得到了一个不同的信函文档,它使用内容控件而不是表单字段。谢谢:p