1

私はvbaが初めてで、ユーザーにコンボボックスリストから可変数の値を選択するように求めるドキュメントを開発しています。値を選択したら、ドキュメント自体にテキストフォームフィールドとして順番に挿入したいと思います。私が一般的にそれを機能させようとしている方法をお見せしましょう。

まず、ユーザーは値を選択します。

 [a]
 [b]
 [c]

そして「OK」ボタンを選択する。次に、これらの選択した値をブックマークから始まる単語文書に追加しようとしています。値 "a" を挿入し、その後に空白文字、空白のテキスト フォーム フィールド、2 つのキャリッジ リターンを挿入する必要があります。最終的に、結果は次のようになります。

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

[ブックマーク] は非表示のブックマーク、'_' はスペース、'^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]

この順序を逆にして、前述のフォーマットが挿入されるようにしたいと思います。それを行う方法についての指針はありますか?

4

2 に答える 2

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]"
于 2013-06-13T11:00:07.397 に答える