Word VBAでフォームを表示&コマンドボタンでマクロを実行する方法

button

photo credit: Eva the Weaver 234 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Word VBAで入力を便利にするマクロの作り方を初心者向けということでお送りしています。

前回の記事はこちら。

Word VBAでWithステートメントを使って同一オブジェクトの表記をスッキリ書く方法
Word VBAで入力を便利するマクロの作り方を初心者向けにお伝えしています。今回は、Word VBAで同一オブジェクトの表記をまとめるWithステートメントの使い方です。これでプログラムをスッキリ書きます!

Withステートメントでスッキリ書く方法をお伝えしました。

さて、今回のテーマはフォームです。

動作イメージとして

  1. ショートカットキーでフォームが立ち上がり
  2. フォーム上のボタンを選択することで
  3. ボタンに対応した文字列を挿入する

という動作をさせていきたいと思います。

では、Word VBAでフォームとコマンドボタンを使用する方法、行ってみましょう!

スポンサーリンク

前回までのおさらいと今回のお題

前回までで作成したマクロはこちらです。

Sub insertText()

With Selection
    .InsertBefore "----- ここから -----" & vbCr
    .InsertAfter "----- ここまで -----" & vbCr
    .Paragraphs.First.Style = wdStyleNormal
    .Paragraphs.Last.Style = wdStyleNormal
End With

End Sub

選択範囲の前後に「—– ここから —–」~「—– ここまで —–」を挿入することができますが、新たなニーズが出てきてしまいました。

挿入する文字列が複数出てきたのです。

パターンとして

  • 「—– Point —–」~「—– ここまで —–」
  • 「—– Memo —–」~「—– ここまで —–」

この二種類が欲しくなっちゃいました。

それぞれのマクロをショートカットキーに登録をする方法もありますが、ショートカットキーがちょっともったいないし、覚えないといけません。

ですから、今回は上記二つのボタンをフォームに設置して、フォームの呼び出しをショートカットキーに割り当るという方針を取ります。

フォームを作成する

まずベースとなるフォームを作り方からです。

VBEのメニューから「挿入」→「ユーザーフォーム」を選択します。アクセスキーの AltIU でもOKです。

VBEからフォームを挿入

すると以下のようにユーザーフォーム「UserForm1」が作成されます。

VBEでフォームを挿入した

このフォームをプログラム内で呼ぶための名前として「オブジェクト名」と、フォームに表示するテキストのCaptionを設定していきます。

F4 キーで「プロパティウィンドウ」が開く、またはフォーカスが当たりますので、以下それぞれを編集していきます。

  • オブジェクト名:frmSelect
  • Caption:選択範囲の前後に文字列を挿入

VBEでフォームのプロパティを設定
これでひとまずベースとなるフォームは完成です。

ショートカットキーでフォームを呼び出す

続いて、このフォームをショートカットキーで呼び出すようにしておきましょう。

フォームオブジェクトは

UserFormオブジェクト.Show

で呼び出すことができます。

先ほど作成したフォームはオブジェクト名「frmSelect」という名前をつけましたね。ですから、呼び出すために以下プロシージャを作成します。

Sub formShow()

frmSelect.Show

End Sub

このプロシージャformShowをショートカットキーに割り当てればOKですね。今回も Alt + I に割り当てたいと思います。

方法は以下記事で解説をしています。

Word VBAで作成したマクロをショートカットキーに登録する方法
初心者向けにWord VBAで便利な文字入力をするマクロの作り方シリーズ。今回は文書入力しながらサクサク使うために、Word VBAで作ったマクロをショートカットキーに登録する方法をお伝えします!

既に登録してあるマクロに割り当てたいときは、前に登録している割り当てを削除してから、新たに割り当てるようにしてくださいね。

Wordでショートカットキーの割り当てを削除

Word文書の編集中に Alt + I キーで先ほど作成したフォームが表示されるようになります。

Wordのショートカットキーでフォームを表示

フォームにボタンを設置する

続いて、フォームにボタンを設置していきましょう。

プロジェクトエクスプローラー(左側のツリー上の画面、表示されていなければ Ctrl + R で表示)で、作成したフォーム「frmSelect」を選択します。

ツールボックスの中から「コマンドボタン」を選択すると、フォーム上にドラッグでボタンを配置できますので、適当な大きさで作りましょう。

VBEでフォームにコマンドボタンを設置

フォームと同様に、ボタンもプロパティを設定していきますので、F4 キーでプロパティウィンドウに移動下さい。

VBEでフォームのコマンドボタンのプロパティを設定

今回は、「Point」というボタンを作っていきたいので、設定項目は

  • オブジェクト名:btnPoint
  • Caption:Point

とします。フォント設定はクリックすると、以下「フォント」ウィンドウが開きますので、フォントの種類やサイズを好みに設定してください。

VBEでコマンドボタンのフォントを設定

今回は「Meiryo UI」の「12pt」に設定しました。

これで、現在のフォームは以下のようになります。

VBEでフォームにボタンを設置した

ここでボタン「Point」をダブルクリックすると、このボタンを押したときに動作するマクロとなる「Private Sub btnPoint_Click()」を編集できるようになりますので、以下のプログラムを入力しておきましょう。

Private Sub btnPoint_Click()

insertText "----- Point -----"

End Sub

引数を渡してSubプロシージャを呼び出すときは以下のように書きます。

プロシージャ名 引数

上記の例では、これまでつくってきたプロシージャinsertTextに文字列「—– Point —–」を引数として渡す形で呼び出しています。

引数を渡してプロシージャを実行する

「Point」ボタンを押したら引数「—– Point —–」が渡されてinsertTextが呼び出されますので、引数を受け取れるように変更を加えましょう。

引数を受け取るSubプロシージャは以下のように記述します。

Sub プロシージャ名(ByVal 変数名 As データ型)

今回受け取る引数は文字列型ですので、データ型にはString、変数名はstrとして以下のように書き換えます。

Sub insertText(ByVal str As String)

With Selection
    .InsertBefore str & vbCr
    .InsertAfter "----- ここまで -----" & vbCr
    .Paragraphs.First.Style = wdStyleNormal
    .Paragraphs.Last.Style = wdStyleNormal
End With

End Sub

InsertBeforeにて受け取ったstrを使用した段落を挿入するという形ですね。

Unloadステートメントでフォームを閉じる

ここまでの動作を確認してみましょう。

Word文書で Alt + I キーでしたね。

Wordでボタンつきのフォームを呼び出す

無事に目的の文字列は挿入されていますが、フォームがずっと表示されっぱなし…しかも、閉じないとWordが編集できないという…正直、邪魔です。

ですので、InsertTextの最後の処理で、フォームを閉じる命令を入れましょう。

フォームを閉じる場合は、Unloadステートメントを使って

Unload Formオブジェクト

とします。

ですから、InsertTextを以下のように変更すればよいですね。

Sub insertText(ByVal str As String)

With Selection
    .InsertBefore str & vbCr
    .InsertAfter "----- ここまで -----" & vbCr
    .Paragraphs.First.Style = wdStyleNormal
    .Paragraphs.Last.Style = wdStyleNormal
End With

Unload frmSelect

End Sub

まとめ

Word VBAでフォームとコマンドボタンを使用する方法についてお伝えしました。

  • フォームの設置
  • フォームの呼び出し
  • コマンドボタンの設置
  • コマンドボタンを押下したときのプロシージャ作成
  • 引数を渡してプロシージャを呼び出し
  • フォームを閉じる

と、内容盛りだくさんでした。

例えば、もう一つフォーム上にコマンドボタン「Memo」(オブジェクト名はbtnMemo)を設置して、それを押下したときのプロシージャを

Private Sub btnMemo_Click()

insertText "----- Memo -----"

End Sub

とすれば、以下のように同一フォームで複数テキストを選択できるようになります。

Wordのショートカットキーでフォームを呼び出す

もちろん、もっとボタンを追加することもできます。便利ですよね!

次回は、このフォームをEscキーで閉じることができるようにしていきます。

Word VBAでフォームをEscキーで閉じるようにするテクニック
Word VBAで入力を便利にするフォームを使ったツールを作成しました。今回はWord VBAで表示したフォームをEscキーで閉じるようにするテクニックをお伝えします。これで、キーボードだけで操作できます。

どうぞお楽しみに!

連載目次:初心者向けWord VBAで文字入力をしてみよう

お仕事でよく使う文書作成ソフトWord。実は、WordでもVBAでプログラミングができるんです。本シリーズでは、初心者向けとしてWord VBAで文字入力をする方法をお伝えしていきます。
  1. Word VBA入門の最初の一歩!マクロ作成準備の6つのステップ
  2. Word VBAでカーソル位置に文字を入力するとっても簡単なプログラム
  3. Word VBA初心者がまず押さえておくべき段落記号の入力方法
  4. Word VBAで選択範囲の前後に文字列で挿入するマクロを作る方法
  5. Word VBAで作成したマクロをショートカットキーに登録する方法
  6. Word VBAを使うなら知っておくべき「段落」の話とその操作方法
  7. Word VBAで選択範囲の最初の段落&最後の段落を取得する方法
  8. Word VBA初心者にちゃんと理解して欲しいスタイルとその設定をする方法
  9. Word VBAでWithステートメントを使って同一オブジェクトの表記をスッキリ書く方法
  10. Word VBAでフォームを表示&コマンドボタンでマクロを実行する方法
  11. Word VBAでフォームをEscキーで閉じるようにするテクニック
タイトルとURLをコピーしました