Wordでコントロールツールボックスのコントロールを複数個並べて、コントロール名を変数で切り替えたいと思っています。
例えば、テキストボックスを3つ並べた時、以下のように「i」を変数にしてFor文でまわしたいです。
【例】
TextBox1
TextBox2
TextBox3
↓
For i=1 to 3
TextBox「i」= ・・・(A)
Next i
Excelであれば、(A)の部分は、以下のようにOLEObjectsを使えば実現できますが、Wordではコンパイルエラーが出てしまいます。
Dim strName As String
For i=1 to 3
strName = "TextBox" & i
Me.OLEObjects(strName).Object・・・
next i
どのようにすればよいのか、ご教授いただけると幸いです。
お願いします。
訂正:
OleObject が、TextBox だけではないので、ClassType を分岐に加えました。
Sub Test2R()
Dim b As MsoShapeType
Dim shp As Variant
Dim i As Integer
i = i + 1
For Each shp In ThisDocument.Shapes
If shp.Type = msoOLEControlObject Then
If shp.OLEFormat.ClassType = "Forms.TextBox.1" Then
shp.OLEFormat.Object.Text = Chr(64 + i) 'ABCにしてみました。
i = i + 1
If i >26 Then Exit For
End If
End If
Next
End Sub
p.s. しかし、Word 2003 と Word 2007 とは、こういう違いがあるとは思いませんでした。
こんばんは。
>Image1~Image20やCommonDialogは出てくるのに、TextBoxはありません。
こちらで試してみてください。
こんどは、Word2003で試してみました。
Sub Test2()
Dim b As MsoShapeType
Dim shp As Variant
Dim i As Integer
i = i + 1
For Each shp In ThisDocument.Shapes
If shp.Type = msoOLEControlObject Then
shp.OLEFormat.Object.Text = i
i = i + 1
End If
Next
End Sub
いずれは、どれかに当たりますね。(^^;
こんにちは。
Excelのコードでも、
>For i=1 to 3
>strName = "TextBox" & i
>Me.OLEObjects(strName).Object・・・
>next i
ループするとき、コントロールツール側は、キメウチ的にはあまり書きませんね。TextBox の数がわかっていることが条件ですから。
フォームツール側の時に、そのような書き方になるのは、フォーム側は、コントロール配列のようなスタイルで、きちんと数が取れるからからですね。
さて、Wordの場合、Wordのバージョンは、Word 2003 ですから、コンテンツコントロールはサポートされていないはずです。私は、だいたい、以下のような書き方をしていますが、数が、明示的になっているなら、もちろん、"TextBox" & iでも、構わないと思います。
Document の中のコントロールツール等のコレクションの名称は、InlineShapesと言います。現在は、Word 2007 でチェックしていますが、もし不具合があれば、Word 2003 で再チェックします。
Sub Test1()
Dim obj As Variant
Dim i As Integer
i = 1
For Each obj In ThisDocument.InlineShapes
If obj.OLEFormat.Object.Name Like "TextBox#*" Then
obj.OLEFormat.Object.Text = i '数字を表示
i = i + 1
End If
Next
End Sub
こんな風でどうでしょうか。
For i = 1 To ActiveDocument.ContentControls.Count
If ActiveDocument.ContentControls.Item(i).Type = wdContentControlText Then
MsgBox ActiveDocument.ContentControls.Item(i).Range.Text
End If
Next i
お礼
ありがとうございます。 テキストボックスも取得できました。 ただ、今回の「Shapes」では、CommonDialogとImageコントロールは取得できないようです。 なので、例えば、ImageとTextBoxを両方取得するときは、「InlineShapes」と「Shapes」とを組み合わせる必要がありそうです。 教えていただいた方法で、色々と応用ができそうなので、本当に助かりました。 ありがとうございました。