VBA Word:在指定位置插入文本表单字段

时间:2013-06-13 08:08:05

标签: forms ms-word word-vba bookmarks

我是vba的新手并开发一个文档,提示用户从组合框列表中选择可变数量的值。选择值后,我想将它们按顺序插入到文档本身作为文本表单字段。让我告诉你我一般是如何努力让它发挥作用。

首先,用户选择值:

 [a]
 [b]
 [c]

然后选择“确定”按钮。然后,我试图将这些选定的值添加到从书签开始的word文档中。应插入值“a”,后跟空格字符,后跟空白文本表单字段,后跟两个回车符。最后,结果看起来像这样:

 [bookmark]
 [a]'_'[blank_a]'^p'
 '^p'
 [b]'_'[blank_b]'^p'
 '^p'
 [c]'_'[blank_c]'^p'
 '^p'

其中[bookmark]是不可见书签,'_'是空格,'^ p'是回车符。目前我的代码如下:

 Dim myRange As Range
 Set myRange = ActiveDocument.Range(Start:=ActiveDocument.Bookmarks("START").Range.Start, _
 End:=ActiveDocument.Bookmarks("END").Range.End)

 For i = 1 To NUMBER_OF_RESPONSES
     Selection.FormFields.Add(myRange, wdFieldFormTextInput).Name = "question_" & i
     Selection.FormFields.Add(myRange, wdFieldFormTextInput).Result = "response_" & i
 Next i

当然,没有插入文字空格或回车,因为我还没弄明白怎么做。该代码的结果如下:

 [START][blank_c][c][blank_b][b][blank_a][a][END]

我希望这个顺序颠倒过来,并且插入了上述格式。有关如何去做的任何指示?

2 个答案:

答案 0 :(得分:2)

我不确定我是否错过了什么,但为什么不依靠简单的段落而不是书签?在这里,你有一个代码做你想要的和任何其他事情(你可以修改段落的范围,以执行你想要的复杂动作)。

Dim curRange As Range
Dim start_i As Integer
Dim end_i As Integer
Dim NUMBER_OF_RESPONSES As Integer
NUMBER_OF_RESPONSES = 3
start_i = NUMBER_OF_RESPONSES + 1 '0
end_i = 1 'NUMBER_OF_RESPONSES

Set curParagraph = ActiveDocument.Paragraphs.First

curParagraph.Range.Text = "[START]"
i = start_i
Do
    If (start_i < end_i) Then
        i = i + 1
    Else
        i = i - 1
    End If

    Set curParagraph = curParagraph.Range.Paragraphs.Add
    curParagraph.Range.Text = "[question_" & i & "][" & "response_" & i & "]"
Loop While (i <> end_i)

Set curParagraph = curParagraph.Range.Paragraphs.Add
curParagraph.Range.Text = "[END]"

答案 1 :(得分:1)

解决方案

现在我对提出问题感到愚蠢。解决方案非常简单。

 ActiveDocument.Bookmarks("START").Select

 For i = 1 To NUMBER_OF_RESPONSES
     Selection.Font.Size = 11
     Selection.Font.Bold = True
     Selection.FormFields.Add(Range:=Selection.Range, Type:=wdFieldFormTextInput) _
         .Name = "question_" & i
     Selection.Font.Bold = False
     Selection.TypeText Text:=" "
     Selection.FormFields.Add(Range:=Selection.Range, Type:=wdFieldFormTextInput) _
         .Name = "response_" & i
     Selection.TypeParagraph
     Selection.TypeParagraph
 Next i

所以真正的问题是将光标放在正确的位置:

 ActiveDocument.Bookmarks("START").Select

从那里我可以使用Selection来插入所需的FormFields和字符。

This link was pretty helpful.

如果你正在读这篇文章,因为你也是新人,并试图学习该怎么做,check out how to record a macro.这是一个很好的第一步。记录宏,查看它生成的代码,并使用该代码指导您自己的开发。凉。