みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Word VBAで入力を便利にするマクロの作り方を初心者向けということでお送りしています。
前回の記事はこちら。
Withステートメントでスッキリ書く方法をお伝えしました。
さて、今回のテーマはフォームです。
動作イメージとして
- ショートカットキーでフォームが立ち上がり
- フォーム上のボタンを選択することで
- ボタンに対応した文字列を挿入する
という動作をさせていきたいと思います。
では、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のメニューから「挿入」→「ユーザーフォーム」を選択します。アクセスキーの Alt → I → U でもOKです。
すると以下のようにユーザーフォーム「UserForm1」が作成されます。
このフォームをプログラム内で呼ぶための名前として「オブジェクト名」と、フォームに表示するテキストのCaptionを設定していきます。
F4 キーで「プロパティウィンドウ」が開く、またはフォーカスが当たりますので、以下それぞれを編集していきます。
- オブジェクト名:frmSelect
- Caption:選択範囲の前後に文字列を挿入
ショートカットキーでフォームを呼び出す
続いて、このフォームをショートカットキーで呼び出すようにしておきましょう。
フォームオブジェクトは
で呼び出すことができます。
先ほど作成したフォームはオブジェクト名「frmSelect」という名前をつけましたね。ですから、呼び出すために以下プロシージャを作成します。
Sub formShow()
frmSelect.Show
End Sub
このプロシージャformShowをショートカットキーに割り当てればOKですね。今回も Alt + I に割り当てたいと思います。
方法は以下記事で解説をしています。
既に登録してあるマクロに割り当てたいときは、前に登録している割り当てを削除してから、新たに割り当てるようにしてくださいね。
Word文書の編集中に Alt + I キーで先ほど作成したフォームが表示されるようになります。
フォームにボタンを設置する
続いて、フォームにボタンを設置していきましょう。
プロジェクトエクスプローラー(左側のツリー上の画面、表示されていなければ Ctrl + R で表示)で、作成したフォーム「frmSelect」を選択します。
ツールボックスの中から「コマンドボタン」を選択すると、フォーム上にドラッグでボタンを配置できますので、適当な大きさで作りましょう。
フォームと同様に、ボタンもプロパティを設定していきますので、F4 キーでプロパティウィンドウに移動下さい。
今回は、「Point」というボタンを作っていきたいので、設定項目は
- オブジェクト名:btnPoint
- Caption:Point
とします。フォント設定はクリックすると、以下「フォント」ウィンドウが開きますので、フォントの種類やサイズを好みに設定してください。
今回は「Meiryo UI」の「12pt」に設定しました。
これで、現在のフォームは以下のようになります。
ここでボタン「Point」をダブルクリックすると、このボタンを押したときに動作するマクロとなる「Private Sub btnPoint_Click()」を編集できるようになりますので、以下のプログラムを入力しておきましょう。
Private Sub btnPoint_Click() insertText "----- Point -----" End Sub
引数を渡してSubプロシージャを呼び出すときは以下のように書きます。
上記の例では、これまでつくってきたプロシージャinsertTextに文字列「—– Point —–」を引数として渡す形で呼び出しています。
引数を渡してプロシージャを実行する
「Point」ボタンを押したら引数「—– Point —–」が渡されてinsertTextが呼び出されますので、引数を受け取れるように変更を加えましょう。
引数を受け取るSubプロシージャは以下のように記述します。
今回受け取る引数は文字列型ですので、データ型には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が編集できないという…正直、邪魔です。
ですので、InsertTextの最後の処理で、フォームを閉じる命令を入れましょう。
フォームを閉じる場合は、Unloadステートメントを使って
とします。
ですから、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
とすれば、以下のように同一フォームで複数テキストを選択できるようになります。
もちろん、もっとボタンを追加することもできます。便利ですよね!
次回は、このフォームをEscキーで閉じることができるようにしていきます。
どうぞお楽しみに!
連載目次:初心者向けWord VBAで文字入力をしてみよう
お仕事でよく使う文書作成ソフトWord。実は、WordでもVBAでプログラミングができるんです。本シリーズでは、初心者向けとしてWord VBAで文字入力をする方法をお伝えしていきます。- Word VBA入門の最初の一歩!マクロ作成準備の6つのステップ
- Word VBAでカーソル位置に文字を入力するとっても簡単なプログラム
- Word VBA初心者がまず押さえておくべき段落記号の入力方法
- Word VBAで選択範囲の前後に文字列で挿入するマクロを作る方法
- Word VBAで作成したマクロをショートカットキーに登録する方法
- Word VBAを使うなら知っておくべき「段落」の話とその操作方法
- Word VBAで選択範囲の最初の段落&最後の段落を取得する方法
- Word VBA初心者にちゃんと理解して欲しいスタイルとその設定をする方法
- Word VBAでWithステートメントを使って同一オブジェクトの表記をスッキリ書く方法
- Word VBAでフォームを表示&コマンドボタンでマクロを実行する方法
- Word VBAでフォームをEscキーで閉じるようにするテクニック