いつもの手順でプロジェクトにUserForm4を追加する。UserForm4の[プロパティ]の[Caption]に「印刷とPDF実行フォーム」と指定する。
ツールボックスから表2のコントロールを配置する。「部数テキストボックス」のプロパティ[IMEMode]に「fmIMEModeOff」を指定して、英数文字の入力を可能にしておく。
1つ目の「ボタン」の[プロパティ]の[Caption]には「メニュー」と指定する。「ボタン」の表面の文字が「メニュー」に変わる。2つ目の「ボタン」の[プロパティ]の[Caption]には「印刷実行」と指定する。「ボタン」の表面の文字が「印刷実行」に変わる。3つ目の「ボタン」の[プロパティ]の[Caption]には「PDFに書き出す」と指定する。「ボタン」の表面の文字が「PDFに書き出す」に変わる。
コントロール | オブジェクト名 |
---|---|
オプションボタン | 印刷オプションボタン |
オプションボタン | PDFオプションボタン |
ラベル(印刷部数) | デフォルト |
テキストボックス | 部数テキストボックス |
ボタン | メニューボタン |
ボタン | 印刷ボタン |
ボタン | PDFボタン |
各コントロールの書式を設定してレイアウトすると図3のようになる。
プロジェクト内のUserForm4を選択して、マウスの右クリックで表示されるメニューから、「コードの表示」を選択する。
ここからは、「印刷とPDF実行」フォームのマクロを記述していく。
まず、UserForm4(「印刷とPDF実行」フォーム)がアクティブになったときの処理だ(リスト4)。
Private Sub UserForm_Activate() Worksheets("個人情報データ").Select End Sub
「個人情報データ」シートを選択して表示させる。必ず、印刷またはPDF化するシートをアクティブ化しておく必要があるので、注意してほしい。
次は、「メニュー」ボタンがクリックされたときの処理だ(リスト5)。
Private Sub メニューボタン_Click() Worksheets("メニュー").Select UserForm4.Hide End Sub
「メニュー」シートを選択して表示し、「印刷実行フォーム」であるUserForm4を隠す。
今回作成したVBAを、前回作成したメニューの「印刷設定」「印刷またはPDF化」の「角丸四角形」に登録する。これで、全てのメニューの項目をクリックすると、各フォームが表示されるようになる。
次は、「印刷オプション」ボタンがクリックされたときの処理だ(リスト6)。
Private Sub 印刷オプションボタン_Click() 部数テキストボックス.Enabled = True 印刷ボタン.Enabled = True PDFボタン.Enabled = False End Sub
使用不可となっていた、「部数テキストボックス」への値の入力を可能にし、「印刷実行」ボタンを使用可能にする。代わりに「PDFに書き出す」ボタンの使用は不可とする。
次は、「PDFオプション」ボタンがクリックされたときの処理だ(リスト7)。
Private Sub PDFオブションボタン_Click() PDFボタン.Enabled = True 部数テキストボックス.Enabled = False 印刷ボタン.Enabled = False End Sub
「PDFに書き出す」ボタンの使用を可能にする。その代わりに、「部数テキストボックス」と「印刷実行」ボタンの使用を不可とする。
次は、「印刷実行」ボタンがクリックされたときの処理だ(リスト8)。
Private Sub 印刷ボタン_Click() If 部数テキストボックス.Text = "" Or IsNumeric(部数テキストボックス.Text) = False Then MsgBox "印刷部数が入力されていないか、入力された値が不正です。" Exit Sub Else ActiveSheet.PrintOut copies:=部数テキストボックス.Text End If End Sub
「部数テキストボックス」に値が入力されていなかったり、入力された値がなかったりする場合は、警告メッセージを表示して処理を抜ける。
入力された値が数値かどうかの判定にはIsNumeric関数を使用する。数値の場合はTrue、それ以外はFalseを返す関数だ。
正常に部数が入力された場合は、PrintOutメソッドで、「部数テキストボックス」に入力された部数分の印刷を開始する。
Copyright © ITmedia, Inc. All Rights Reserved.