2012-08-16 35 views
8

Summary:我的公司向客户发送信函,并希望我写一个宏以填写已设置的不同文本表单字段word文档,因为发送出去的不同字母之间的事物变化非常有限。我在Excel中完成了宏,但这是我第一次遇到ms字宏填写表格ms-word VBA /通过Word进行最有效的智能导航

问题:我很难通过ms-word找到有效的智能导航。我没有找到这篇文章,关于moving in different directions 这是真的和箭头键相同。希望深入了解导航Word文档的最佳方式。例如,我应该做一个循环移动到右边的空间,直到找到有意义的东西或者是否有更有效的方式?

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

在此先感谢!

+3

+ 1对于一个很好解释的问题。总之,您可以使用'.Find'或'For loops'或'GoTo'来浏览文档。如果你有表单字段,那么你根本不需要循环。我很好奇你为什么要将位置存储在一个变量中?您可以直接使用名称来处理内容控件。 – 2012-08-16 14:04:34

+0

@SiddharthRout我想我可以通过名称来引用组件,但不确定此语法。然而,我对将坐标存储在变量中的好奇心并不一定与此问题完全相关,尽管它可能有所帮助 – 2012-08-16 14:08:51

+1

以下是一个非常基本的示例:http:// stackoverflow。com/questions/10823874/with-a-word-contentcontrol-datepicker-how-do-i-get-the-value/10824117#10824117 – 2012-08-16 14:17:01

回答

5

最近的Windows版本的Word中至少有三种类型的表单字段 - 内容控制,“传统表单字段”和ActiveX表单字段。假设您正在处理旧版表单字段,您应该能够使用书签名称对FormFields集合进行索引,然后使用

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

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

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

简单,做了我想要的。 – 2012-08-16 17:06:18

2

您应该可以在需要转到的文档的各个位置创建书签。在现代Word中,这在“插入”选项卡的“链接”组中。然后你可以从VBA访问书签,并插入文本到他们这种代码:

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

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

+0

这真的很有帮助。其他人用这个表单字段和每个表单字段都在text1,text2,text3 ...等下面列出了书签,我将尝试引用这些书签(或者可能是按照Siddharth的说法命名的控件)。我会让你知道我想出了什么。谢谢dsolimano – 2012-08-16 14:14:32

7

要使用内容控件,您必须确保已设置控件的Title。如果需要,您也可以设置Tag。请参见快照

enter image description here

然后你就可以使用此代码更新内容控制或检索它的值

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 

当您运行的代码,这是它的外观

enter image description here

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

+0

感谢您的帮助和努力,很好的例子 – 2012-08-16 17:06:44

+0

我现在实际上使用了这个代码,因为我得到了一个使用内容控件而不是表单域的不同的信件文档。感谢:p – 2012-09-14 19:17:10