WORDのVBAでかなり悩んだ!ユーザーフォームのテキストボックスからワードに文字列を入力する方法!

スポンサーリンク
050-VBA

へっぽこヘタレシステム管理者の管理人です。

さて、エクセルではマクロやVBAを弄ることは、たまにあるのですが・・・

今回は、ワードでVBAを組んで、ユーザーフォームからワード本文にテキストを送信する方法を実践してみたので、忘備録として掲載しておきます。

ワードは、社会人になってから25年くらい使っていますが・・・

マクロ付きの【拡張子docm】は、生まれて初めて使いました。

実際に使うことはあまりないとは思うのですが・・・

たまたま、仕事の関係で、作る事になったのですが・・・

エクセルのユーザーフォームとはかなり勝手が異なっており・・・

かなり苦戦しました。

イチバン苦労したのは、テキストの送信先の・・・

【Object】の指定方法が分からないというモノでした。

インターネットでもイロイロ検索したのですが、エクセルのVBAほど情報もあまり無いですし・・・

そもそもエクセルのVBAと記述が結構違う気がします。

これも慣れの問題なのかもしれませんが・・・

覚えておいて損をすることもないと・・・と思うことにします。

ワードにコンテンツコントロールとテキストボックスを配置する

まずは、テストとして、ワードに

  • コンテンツコントロール
  • テキストボックス

を配置します。

コンテンツコントロールの配置については【開発タブ】が必要となりますので・・・

あらかじめ、表示させておきましょう。

コンテンツコントロールには、プロパティで【タイトル】を設定しておきます。

テキストボックスは、適当に配置しておきます。

【Object】の記述方法が本文内とヘッダー内で異なりますので・・・

練習の為に、本文とヘッダー内の用法にテキストボックスを配置します。

ユーザーフォームを作る

次にユーザーフォームを【Visual Basic Editor】から適当に作ります。

テキストボックスを配置し・・・

コマンドボタンを貼り付けます。

スポンサーリンク

コマンドボタンにコードを設定する

次に、コマンドボタンにコードを設定します。

コードの詳細は次のとおりです。

本文のコンテンツコントロールにユーザーフォームのテキストボックスから文字列を入力する。

'コンテンツコントロールにフォームから文字列挿入
 
    Dim control As ContentControl
    
    'テンプレートのテキストコンテンツコントロールにフォームの値を代入

    For Each control In ActiveDocument.ContentControls

        'タグで処理する場合は、control.Tag

        Select Case control.Title

            'Caseの""内はWordテンプレートにあるテキストコンテンツコントロールのタイトル名

            Case "textA"
                control.Range.Text = Me.TextBox1.Text
                
            Case "textB"
                control.Range.Text = Me.TextBox2.Text
                
            Case "textC"
                control.Range.Text = Me.TextBox3.Text
                
         End Select
  
    Next
スポンサーリンク

コンテンツコントロールのタイトル名でオブジェクトを指定します。

次に・・・

ヘッダー内のテキストボックスに文字列を入力する記述する。

'ヘッダーのテキストボックスに文字列挿入

    
   Set A = ActiveDocument.Sections(1).Headers(1).Shapes(1).TextFrame.TextRange
    
     Debug.Print A.Text 'デバック用なのでなくてもOK
    
   A.Text = Me.TextBox4.Text

次の 【ヘッダー内のテキストボックスオブジェクトの指定】の記述が分からずに・・・

ActiveDocument.Sections(1).Headers(1).Shapes(1).TextFrame.TextRange

ブログランキングにご協力ください!
ブログランキング・にほんブログ村へ

かなり苦労しました。

Shapes(1) のカッコ内の数字は、テキストボックスの個数番号なのですが・・・

複数になるとこれが分からない・・・

テキストボックスのオブジェクト名を調べる方法があるのなら教えて欲しいですね。

次に・・・

本文内のテキストボックスに文字列を入力する記述する。

'本文内のテキストボックスに文字列挿入
    
    
   Set B = ActiveDocument.Shapes(1).TextFrame.TextRange

     Debug.Print B.Text 'なくてもOK
 
   B.Text = Me.TextBox5.Text
     
   
   
   Set C = ActiveDocument.Shapes(2).TextFrame.TextRange
     
    Debug.Print C.Text ’なくてもOK
   
  C.Text = Me.TextBox6.Text
    

ここもヘッダーの場合と記述の方法がことなりますので注意が必要です。

Shapes(2) のカッコ内の数字もテキストボックスによって変わりますが・・・

これも指定したいテキストボックスが何番か調べる方法がイマイチ分かりません。

最後に、実際に実行し思った通りに文字列が入力されるかテストします。

ファイルを開いたときにフォームを表示させる

さいごにファイル開いたときにフォームを自動で表示させる方法です。

【Visual Basic Editor】で標準モジュールを追加し・・・

Sub AutoOpen()

    UserForm1.Show

End Sub

と記述すればOKです。

マクロで指定することもできます。

ブログ開設に必要なドメイン取得、サーバーレンタル、ASPの登録等は、こちらのサイトから!

コメント

タイトルとURLをコピーしました