WordでテンプレートとVBAのフォームを使い書類の作成を楽にする

テキストコンテンツコントロールで入力する所をわかりやすくしていても、どうしても見落とすことがあります。そこで、さらにミスを減らすために、VBAでメニューフォームと入力用フォームを作成します。

  • フォーム用のファイルを【docm形式】で作成
  • メインメニュー用のフォームを作成
  • テンプレートにテキストコンテンツコントロールに値を入力するフォームを作成

以上の手順で作成していきます。

フォームは便利なのですが、起動時にフォームだけを表示するようにすると、エラーが起こりやすいようです。エラーへの対処は面倒なので、今回は初期設定のまま、フォーム以外にもリボンや白紙の文書が表示されたままにしています。

このファイルが完成したら、フォームに入力していくことにより、ミスを減らし早く簡単に、目的の書類を作成できるようになります。

VBAでフォームを作成

VisualBasicEditorを起動

Wordで新規ファイルを作成したら、【開発】>【VisualBasic】を選択し、VisualBasicEditorを起動します。

ユーザーフォームと標準モジュールを追加

【ユーザーフォーム】を2つ、【標準モジュール】を1つ追加します。

ユーザーフォームのプロパティ

【表示】>【プロパティウィンドウ】を選択し、プロパティウィンドウを表示します。

UserForm1とUserForm2のオブジェクト名とCaptionを変更します。

(オブジェクト名)Caption
UserForm1ContractFrom契約書作成
UserForm2MenuFormメインメニュー

標準モジュールのコード

【標準モジュール】の【Module1】を選択し、ファイルを開いたら自動的にメニューフォームが起動するように、コードを書き加えます。

Sub AutoOpen()
    MenuForm.Show vbModeless
End Sub

フォーム画面が起動中でも他の操作ができるように、Modelessで起動しています。

ModalとModeless

ModalとModelessはプロパティウィンドウでも設定できます。

【ShowModal】がTrue→Modal
【ShowModal】がFalse→Modeless

MenuFormの作成

【ラベル】と【コマンドボタン】を使い、メニュー画面を作成します。

【ツールボックス】が表示されていない場合は、上部の【表示】メニューから【ツールボックス】を選択します。

コマンドボタンのCaptionは契約書にしています。

コマンドボタン(契約書)のコード

作成したコマンドボタンをダブルクリックして、コードを追加します。

Private Sub CommandButton1_Click()
    ContractForm.Show vbModeless
End Sub

契約書と書かれたボタンをクリックしたら、ContractFromをModelessで起動するようにしています。

ContractFromの作成

【ラベル】【テキストボックス】【コマンドボタン】を使い、入力用のフォームを作成します。

変更の頻度が低い項目は、あらかじめ入力しておくと、書類を作成するときに入力する手間が省けます。

コマンドボタン(作成)のコード

以前作成した契約書のテンプレートを呼び出し、テキストコンテンツコントロールに値を代入していきます。

テキストコンテンツコントロールのタイトルで処理しています。タグで処理する場合は、【control.Title】を【control.Tag】にします。

Private Sub CommandButton1_Click()
    Dim myDoc As Document

    'テンプレートで新規ファイルを作成
    'テンプレートファイルの場所を指定してください
    Set myDoc = Documents.Add(Template:="C:\Users\dattesar\Documents\Office のカスタム テンプレート\dattesar.dotx")

    Dim control As ContentControl

    'テンプレートのテキストコンテンツコントロールにフォームの値を代入
    For Each control In ActiveDocument.ContentControls
        'タグで処理する場合は、control.Tag
        Select Case control.Title
            'Caseの""内はWordテンプレートにあるテキストコンテンツコントロールのタイトル名
            Case "名称"
                control.Range.Text = StrConv(Me.TextBox1.Text, vbUpperCase)     '大文字に変換

            Case "所在地"
                control.Range.Text = Me.TextBox2.Text

            Case "始期"
                control.Range.Text = Format(Me.TextBox3.Text, "yyyy年mm月dd日") '月日は必ず2桁表示(01月)

            Case "終期"
                control.Range.Text = Format(Me.TextBox4.Text, "yyyy年m月d日")   '1桁の月日は1桁表示(1月)

            Case "賃料"
                control.Range.Text = Format(Me.TextBox5.Text, "#,#")            '3桁区切りで表示

            Case "共益費"
                control.Range.Text = StrConv(Format(Me.TextBox6.Text, "#,#"), vbWide)   '半角を全角に変換
       
        End Select
    Next

    '作成したファイルを前面に
    Application.Activate

    '入力画面フォームを閉じる
    Unload ContractForm

End Sub

Format関数

日付の表示と数字の3桁区切りを使用しています。

yyyy西暦を4桁の数字で表示
mm月を2桁で表示(01-12)
dd日を2桁で表示(01-31)
m月を表示(1-12)
d日を表示(1-31)
#,#数字を3桁区切りで表示

StrConv関数

今回の書類の作成には、StrConv関数は必要ありませんでしたが、参考のために使用しています。

vbUpperCase大文字に変換
vbLowerCase小文字に変換
vbProperCase各単語の先頭の文字を大文字に変換
vbWide半角文字を全角文字に変換
vbNarrow全角文字を半角文字に変換
vbKatakanaひらがなをカタカナに変換
vbHiraganaカタカナをひらがなに変換

コマンドボタン(閉じる)のコード

Private Sub CommandButton2_Click()
    Unload ContractForm
End Sub

保存と動作確認

docm形式で保存

ここまで作成できたら、【Wordマクロ有効文書(*.docm)】形式で保存します。

コンテンツの有効化

docm形式のファイルは初回起動時にセキュリティの警告が出るので、【コンテンツの有効化】をクリックします。

フォームに値を入力

【名称】は大文字に変換、【始期】は2桁表示、【終期】は1桁表示、【賃料】は3桁区切り、【共益費】は3桁区切りで全角に変換されています。

フォームの値が空白の場合

テキストボックスに値を入力しないと、レイアウトが大きく崩れますが、これは、むしろメリットだと思います。契約書等重要な書類を見直すときには、レイアウトが大きく崩れている方が、ミスを発見しやすいためです。

読み取り専用

ファイルが完成したら、予期しない変更を防ぐためにファイルを【右クリック】>【プロパティ】から、【読み取り専用】にします。

メニューフォームに集約

  1. 書類のひな形を作成
  2. 書類作成時に変更しなければいけない所をテキストコンテンツコントロールにする
  3. テンプレートとして保存
  4. メニューフォームにコマンドボタンを追加
  5. 入力用のフォームを作成
  6. 入力用フォームからテキストコンテンツコントロールに値を代入

これを繰り返すことによって、メニューフォームから関連する書類を、その都度ひな形を探す手間なく、楽に作成できるようになります。また、テンプレートを使って書類を作成するので、ひな形を不意に変更してしまうこともありません。