スポンサーリンク

050-VBA

WORDの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の登録等は、こちらのサイトから!

スポンサーリンク
スポンサーリンク

-050-VBA

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

Accessでユーザー定義関数を作る!基本はエクセルの場合と同じ方法でOK!

エクセル【EXCEL】でユーザー定義関数は、よく使いますが・・・ そういえば、アクセス【ACCESS】では、使った事がないなと思い・・・ 作り方を整理してみました。 基本はEXCELの場合と同じ 試し …

EXCELのVBAを使ってCSVファイルを開く!エンコードの指定も!

へっぽこヘタレシステム管理者の管理人です。 さて、昨日に引き続き・・・ ある部署からエクセルのマクロの作成を依頼され・・・ その過程で、いくつか部品を作ったので忘備録として掲載します。 スポンサーリン …

MS-Access【アクセス】・VBA・レポートのデータソースを動的に変更する方法!

へっぽこヘタレシステム管理者の管理人です。 さて、非課税世帯等に対する臨時特別給付金(非課税世帯の10万円)が年末に決まり・・・ 管理人が勤務するお役所でも1月末~2月初旬までには・・・ 対象世帯に確 …

接続先のポートの状況をコマンドで確認する方法!test-netconnection・telnet!

へっぽこヘタレシステム管理者の管理人です。 さて、システム管理をしていると・・・ たまにですが、ネットワーク関連で接続先のポートが接続できるかどうかを確認する必要が出てきます。 あまり使うことはないの …

Access・アクセス・VBA・サブフォームを別のフォームから更新する方法!

へっぽこヘタレシステム管理人の管理者です。 アクセスでシステムを作っていると・・・ アクティブなフォームから別のフォームのサブフォームの内容を更新したい場合が出てきます。 別のフォーム全体を更新するコ …

スポンサーリンク
スポンサーリンク
スポンサーリンク