業務効率化したい人向けのワードマクロ初心者講座(ファイル選択フォーム, キー操作保存, 単語置換, 連想配列, テーブル情報読み込み)の第一回講座です。
まずは、以下のようなマクロを適用するWordファイルを選択して、マクロ処理を開始する事ができるフォームを作成します。
ワードマクロは、テンプレートという形でワードに組み込まない限り、マクロを記述してあるワードマクロファイル(拡張子はdocm)に対してしか、マクロを実行することができません。
でも、実行しているマクロの中で、他のワードファイルを開いたり、他のワードファイルに対して処理を行うことはできます。
そこで、簡単に、他のワードファイルに対してワードマクロを使っていろんな処理を行うことができるように、上記のようなフォームを使うのです。
この方法はかなり便利ですので、いろんなマクロを作るときに、利用してください。
それでは、講義を始めていきましょう。
第一回:ファイル選択フォームをつくろう
手順1:新しいワードマクロファイルを作成
「ファイル→新規→白紙の文書」からマクロ作成用に新しいワード文書を作成します。
すぐに一度保存しておきましょう。
このワードファイルにはマクロを記録するため、ファイルの種類を「Wordマクロ有効文書(*.docm)にしておきます。
手順2:VBE(ワードマクロの開発環境)を開く
マクロを記述するために、VBEを開きましょう。
メニューの「開発→Visual Basic」で起動することができます。
以下のようにVBEというマクロの開発環境が起動します。
もし、メニューに「開発」タブがない場合、記事「オフィスの自動化。操作の記録やマクロを使う「開発」タブの表示の仕方」を参考に表示させてください。
また、「Alt+F11」キーを押してもVBEを起動することができます。
VBEの使い方はこれから講座の中で説明していきますが、詳しく知りたい場合、
ワードマクロ:Visual Basic EditorでVBAを表示
ワードマクロ:VBEに表示されるプロジェクトとモジュールとは?
ワードマクロ:VBEでキー操作を記録したマクロを実行してみましょう
などの記事でも説明していますので、見てみてください。
手順3:フォームの作成
それでは、フォームを作成していきましょう。
手順3-1:空のフォームを作成
まず、VBEのプロジェクトビューから、プロジェクト名を右クリックします。
次に、出てくるコンテキストメニューで、「挿入→ユーザーフォーム」をクリックします。
すると、下図の用にとりあえず何も配置されていないフォームが作成されます。
もし、ツールボックスが表示されていない場合、VBEのメニュー「表示→ツールボックス」をクリックすると表示されます。
手順3-2:フォーム名を変更
まず、作成したばかりのフォームの名前を変更しておきます。
「プロジェクト」ビューのフォームを右クリックし、「オブジェクトの表示」をクリックします。
すると、「プロパティ」ビューにこのフォームのプロパティ(設定)が表示されますので、
フォームの名前(オブジェクト名)に、「frm_fileselect」、
タイトルバー表示(Caption)に、「ファイル名を指定して実行」
と設定しましょう。
すると、下図のように右側のフォームの表示が変わります。
手順3-3:フォーム起動する処理を追加
ここで、作ったばかりのフォームを起動してみましょう。
フォームを起動する処理を追加します。
まず、処理を記述する標準モジュールを作ります。「プロジェクト」ビューのプロジェクトを右クリックして、「挿入→標準モジュール」をクリックします。
標準モジュールの中に、「Module1」というモジュールが作られました。
右側には、中が空っぽのModule1が表示されています。表示されていない場合、「プロジェクト」ビューのModule1 をダブルクリックすると、表示されます。
Module1にフォームを起動するマクロを記述していきます。
下図のように記述してください。
1 2 3 4 5 6 |
Option Explicit 'ファイル指定して実行するフォームの表示 Public Sub 単語変換マクロGUI() frm_fileselect.Show End Sub |
コードの説明をしていきます。
1 |
Option Explicit |
これは、変数は、宣言してから使うようにするオプションです。
このオプションがないと、いつでも変数を使い始められて便利なのですが、変数名をうち間違違えたとこに気づかず、マクロが変な動作をしてしまう事があるため、このオプションを使うようにしましょう。
1 |
'ファイル指定して実行するフォームの表示 |
「'(シングルクォーテーション)」以降はコメントです。つまりマクロとしてはなんの動作もしないので、マクロのコードが何をしているのか理解しやすくするため、人が読むようにコメントを入れましょう。
1 2 3 |
Public Sub 単語変換マクロGUI() frm_fileselect.Show End Sub |
Sub はサブルーチンプロシージャといって、マクロの処理ひとかたまりとなります。
Public は、Sub を修飾する語句でモジュールの外からも実行できるという意味になります。マクロとして実行するサブルーチンは、Public である必要があります。
その他には、Private という修飾語があり、これは、同じModule内からしか、呼び出すことができないサブルーチンになります。
サブルーチンの名前は、「単語変換マクロGUI」で、そのままマクロ名となります。
記事「ワードマクロ:基礎(プロシージャ、ステートメント、データと変数の式)」にサブルーチンについての記述があります。
サブルーチンの中は、ステートメント(命令)が一つだけあって、先程作ったフォーム「frm_fileselect」のShow というメソッドを呼び出しています。
フォームを「表示する」っていう意味になります。
入力すると、下図のようになります。
VBEの三角アイコンの再生ボタン(正確にはSub/ユーザフォームの実行ボタン)を押すと、マクロを実行することができます。
VBEの再生ボタンを押したとき、カーソルがマクロとして実行可能なサブルーチンの場合は、そのまま実行されます。上図で「単語変換マクロGUI」の中にカーソルがある場合は、下図のようにフォームが起動します。
もし、修飾子 Privateがサブルーチンについていたり、サブルーチンに引数があったり、サブルーチンの外にカーソルがある場合は、実行するサブルーチンを選択する画面が表示されます。
その場合、下図のように「マクロ」ウィンドウで、マクロを選択して「実行」ボタンを押すと、マクロを実行できます。
手順3-4:テキストボックス、ボタン、説明ラベルを配置
ここからは、フォームの中を作っていきます。
ファイル名を表示するテキストボックス、ファイル選択ボタン、処理実行ボタンと、その説明ラベルを配置していきます。
フォームの大きさを変更
まず、フォームの右下をつまんで、フォームの幅を大きくします。
テキストボックスの配置
テキストボックスの名称を変更します。
ボタンの配置
同様に、ボタンを配置します。
ボタン名とキャプション(表示する文字)を設定します。
ボタン1:
ボタン名(オブジェクト名) → btn_select
文字(Caption) → 選択
ボタン2:
ボタン名(オブジェクト名) → btn_exe
文字(Caption) → 実行
説明ラベルの配置
レイアウト(配置)の最後に、ラベルを追加します。
ツールボックスから「ラベル」をクリックしてフォーム内に配置します。
そして、「プロパティ」のCaptionに、テキストボックスの説明として「ファイルの選択」と入力します。
手順3-5:ファイル選択ボタンの動作を作成
ここまでで見た目完成ですが、今は、ボタンを押してもなんの動作もしません。
これから「選択」ボタンを押してファイルを選択できるようにします。
まず、ツールボックスで「オブジェクトの選択」を選んで、処理を実装したい「選択」ボタンを右クリック。
コンテキストメニューで「コードの表示」をクリックします。
すると、下図のように、
btn_select_Click() というサブルーチンが作成されています。
このサブルーチンは、btn_select という名前のボタンがクリックされたときに実行されるサブルーチンになります。
そしてクリックだとか、ダブルクリックだとかかの動作を「イベント」と呼ぶため、このようなサブルーチンを「イベントハンドラ」と読んだりします。
ハンドラは処理するものと言う意味で、この場合、クリックというイベントを処理するサブルーチンということです。
さて、このイベントハンドラの中に、以下のようなコードを書きましょう。
コードの説明は、コメントを多めに入れて行っています。
大まかにやっていることといえば、
メッセージボックス MsgBox でほんとにファイル選択するかを問い合わせしていることと、
ファイルダイアログ(FileDialog)を使って、ファイル選択を行っていること、
です。
Exit Sub というステートメント(命令)は、サブルーチンの実行をその場で終了するという意味です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
'wordファイルの選択ボタン Private Sub btn_select_Click() 'メッセージボックスで、問い合わせをします。 If MsgBox("ファイルを選択します", vbYesNo) = vbNo Then 'いいえをクリックしたときは、処理を終了します。 Exit Sub End If 'ファイル選択するダイアログを使用します。 'ファイルダイアログの変数を準備 Dim fdlg As FileDialog '変数にダイアログの実体を作って代入します。 '引数のmsoFileDialogOpenは、「ファイルを開く」ダイアログ形式です Set fdlg = Application.FileDialog(msoFileDialogOpen) 'フォルダ、あるいはファイルを一時的にいれる変数です Dim str_folder As String 'すでに選択済みのファイル名を初期ファイルとしてセット str_folder = tbx_file.Text If str_folder = "" Then 'ファイル名が選択されてなかった場合は、マクロファイルのパスをセット '※ThisDocument は、このマクロが定義されているWordファイルのことです str_folder = ThisDocument.Path End If 'ファイルダイアログの初期ファイル名に代入します fdlg.InitialFileName = str_folder 'ファイルダイアログは複数のファイル選択禁止とします fdlg.AllowMultiSelect = False '拡張子のフィルターをセットします。 fdlg.Filters.Clear 'フィルター設定をクリアして fdlg.Filters.Add "Word Document", "*.docx;*.doc" 'docx, doc ファイルだけ表示 fdlg.FilterIndex = 1 '最初に選択されるフィルターの番号 1個しかないので 1 If fdlg.Show Then 'Show でファイルダイアログを表示します 'ファイルダイアログで「開く」をクリックして選択したとき Show の戻り値がTrue 'このときはテキストボックスに選択した結果を更新します。 tbx_file.Text = fdlg.SelectedItems(1) 'SelectedItems(1)に選択したファイル名が入っています。 End If End Sub |
コードを追加したら、ちゃんと動くかテストしてみましょう。
作成したイベントハンドラ(btn_select_Click) の中にカーソルがある状態で、「Sub/ユーザーフォームの実行」ボタンを押すと、フォームを起動することができますが、せっかくなので、先程作成した「単語変換マクロGUI」マクロからフォームを起動してみましょう。
「選択」ボタンを押すと、まずはMsgBoxが開いてほんとにファイル選択するか確認します。
ファイルダイアログが開くので、Wordファイルを選択して「開く」で開きます。
選択した結果が、テキストボックスに入力されます。
手順3-6:処理実行ボタンの動作を作成
最後に、「実行」ボタンを押したときのイベントハンドラを実装します。
先ほどと同様に、「実行」ボタンを右クリックして「コードの表示」をクリクします。
すると、Sub btn_exe_Click() というイベントハンドラが作成されます。
サブルーチン「btn_select_Click」の中に下のようなコードを実装していきます。
先ほどと同様にコメントで詳しく解説していきます。
大まかにやっている処理としては、
- tbx_file にちゃんと実在するファイルが選択されているかをチェック、
- tbx_fileに記述してあるファイルを開いて、そのファイルを引数として「マクロ本体」というサブルーチンを呼び出します。
をしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
'実行ボタン処理 Private Sub btn_exe_Click() 'ファイルの存在確認してから実行処理を呼び出す 'dir関数は、存在すればファイル名を返す Dim str_test As String str_test = Dir(tbx_file.Text) If tbx_file.Text = "" Or str_test = "" Then MsgBox "ファイルがありません。ファイルを指定してください" Exit Sub End If '選択したWordファイルを開きます Dim doc As Document 'ファイルを管理する変数 Set doc = Documents.Open(tbx_file.Text) 'Wordファイルを開いて docに代入します マクロ本体 doc ' doc を引数として 「マクロ本体」というサブルーチンを呼び出します。 End Sub |
手順3-7:プロシージャ「マクロ本体」の作成
最後に「マクロ本体」というマクロのプロシージャを記述します。この「マクロ本体」がまさに、このマクロ全体で処理したい内容を記述していくプロシージャになります。
上のコードで、呼び出し部が、
1 |
マクロ本体 doc |
となっているように、この処理は引数付きで定義します。また、フォームの処理ではないので、Module1 に作ります。
「プロジェクト」ビューで標準モジュールの下の「Module1」をダブルクリック、あるいは右クリックして「コードの表示」をクリックします。
右側にコードが表示されます。下のコードを 「単語変換マクロGUI」サブルーチンの下に記述してください。
1 2 3 4 5 6 7 8 |
'マクロ本体 Public Sub マクロ本体(doc As Document) If MsgBox(doc.Name & " を処理します。", vbOKCancel, "単語変換マクロ") = vbCancel Then Exit Sub End If 'ここから処理を書いていきます。 End Sub |
下図のようになります。
動かしてみよう
さて、それでは実行してみましょう。
ファイルを選んで「実行」を押すと、下図のように選んだWordファイルのファイル名を表示して処理してよいかたずねるメッセージボックスが開きます。
まだ、処理を書いていないため、「OK」を押しても「キャンセル」を押しても処理が終わります。
最後に
これで、Wordファイルを作成するフォームの作成は完成です。次回、フォームのボタンを押したときに、処理を行う仕組みを作っていきます。
ワードマクロ初心者講座:
業務効率化したい人向けのワードマクロ初心者講座(ファイル選択フォーム, キー操作保存, 単語置換, 連想配列, テーブル情報読み込み)
第1回:ワードマクロでファイル選択フォームをつくろう(フォーム, ファイルダイアログの使い方)
第2回:添字に文字列を使える連想配列で対になった情報を管理しよう
第3回:キー操作の保存からマクロを作成し単語の置換処理を作ろう
第4回(最終回):ワードマクロでテーブル(表)に書いた単語変換マクロの設定を読み取ろう
コメント