印刷設定したExcelシートをPDF化して保存&個人情報管理システムの仕上げ:Excelマクロ/VBAで始める業務自動化プログラミング入門(16)(2/3 ページ)
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。最終回は、個人情報管理システムの仕上げを行い、IsNumeric関数の使い方やExportAsFixedFormatメソッドで印刷設定したシートをPDF化して保存する方法を紹介します【Windows 10、Excel 2016に対応】。
「印刷とPDF実行」フォームの各コントロールの配置とプロパティの設定
いつもの手順でプロジェクトにUserForm4を追加する。UserForm4の[プロパティ]の[Caption]に「印刷とPDF実行フォーム」と指定する。
ツールボックスから表2のコントロールを配置する。「部数テキストボックス」のプロパティ[IMEMode]に「fmIMEModeOff」を指定して、英数文字の入力を可能にしておく。
1つ目の「ボタン」の[プロパティ]の[Caption]には「メニュー」と指定する。「ボタン」の表面の文字が「メニュー」に変わる。2つ目の「ボタン」の[プロパティ]の[Caption]には「印刷実行」と指定する。「ボタン」の表面の文字が「印刷実行」に変わる。3つ目の「ボタン」の[プロパティ]の[Caption]には「PDFに書き出す」と指定する。「ボタン」の表面の文字が「PDFに書き出す」に変わる。
コントロール | オブジェクト名 |
---|---|
オプションボタン | 印刷オプションボタン |
オプションボタン | PDFオプションボタン |
ラベル(印刷部数) | デフォルト |
テキストボックス | 部数テキストボックス |
ボタン | メニューボタン |
ボタン | 印刷ボタン |
ボタン | PDFボタン |
各コントロールの書式を設定してレイアウトすると図3のようになる。
プロジェクト内のUserForm4を選択して、マウスの右クリックで表示されるメニューから、「コードの表示」を選択する。
「印刷とPDF実行」フォームのマクロ
ここからは、「印刷とPDF実行」フォームのマクロを記述していく。
UserForm4がアクティブになったときの処理
まず、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オプション」ボタンがクリックされたときの処理
次は、「PDFオプション」ボタンがクリックされたときの処理だ(リスト7)。
Private Sub PDFオブションボタン_Click() PDFボタン.Enabled = True 部数テキストボックス.Enabled = False 印刷ボタン.Enabled = False End Sub
「PDFに書き出す」ボタンの使用を可能にする。その代わりに、「部数テキストボックス」と「印刷実行」ボタンの使用を不可とする。
数値かどうかを判定する「IsNumeric」関数の使い方(「印刷実行」ボタンがクリックされたときの処理)
次は、「印刷実行」ボタンがクリックされたときの処理だ(リスト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.
関連記事
- Excelマクロ/VBAリファレンス用途別・キーワード別一覧超まとめ
- ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する
Excelを通じて「ピボットテーブル」の基礎を学び、データ分析を実践するまでを習得する本連載。初回はピボットテーブルの基礎と、「どんなことができるのか」を解説する。 - どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。初回はデータベースの基本を理解し、Accessを使い始めてみよう。