我是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]
我希望这个顺序颠倒过来,并且插入了上述格式。有关如何去做的任何指示?
答案 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和字符。
如果你正在读这篇文章,因为你也是新人,并试图学习该怎么做,check out how to record a macro.这是一个很好的第一步。记录宏,查看它生成的代码,并使用该代码指导您自己的开发。凉。