連載
» 2016年10月31日 05時00分 公開

印刷設定したExcelシートをPDF化して保存&個人情報管理システムの仕上げExcelマクロ/VBAで始める業務自動化プログラミング入門(16)(2/3 ページ)

[薬師寺国安,PROJECT KySS]

「印刷とPDF実行」フォームの各コントロールの配置とプロパティの設定

 いつもの手順でプロジェクトにUserForm4を追加する。UserForm4の[プロパティ]の[Caption]に「印刷とPDF実行フォーム」と指定する。

 ツールボックスから表2のコントロールを配置する。「部数テキストボックス」のプロパティ[IMEMode]に「fmIMEModeOff」を指定して、英数文字の入力を可能にしておく。

 1つ目の「ボタン」の[プロパティ]の[Caption]には「メニュー」と指定する。「ボタン」の表面の文字が「メニュー」に変わる。2つ目の「ボタン」の[プロパティ]の[Caption]には「印刷実行」と指定する。「ボタン」の表面の文字が「印刷実行」に変わる。3つ目の「ボタン」の[プロパティ]の[Caption]には「PDFに書き出す」と指定する。「ボタン」の表面の文字が「PDFに書き出す」に変わる。

表2 配置するコントロール
コントロール オブジェクト名
オプションボタン 印刷オプションボタン
オプションボタン PDFオプションボタン
ラベル(印刷部数) デフォルト
テキストボックス 部数テキストボックス
ボタン メニューボタン
ボタン 印刷ボタン
ボタン PDFボタン

 各コントロールの書式を設定してレイアウトすると図3のようになる。

図3 各コントロールをレイアウトした

 プロジェクト内のUserForm4を選択して、マウスの右クリックで表示されるメニューから、「コードの表示」を選択する。

「印刷とPDF実行」フォームのマクロ

 ここからは、「印刷とPDF実行」フォームのマクロを記述していく。

UserForm4がアクティブになったときの処理

 まず、UserForm4(「印刷とPDF実行」フォーム)がアクティブになったときの処理だ(リスト4)。

Private Sub UserForm_Activate()
  Worksheets("個人情報データ").Select
End Sub
リスト4 UserForm4がアクティブになったときの処理

 「個人情報データ」シートを選択して表示させる。必ず、印刷またはPDF化するシートをアクティブ化しておく必要があるので、注意してほしい。

「メニュー」ボタンがクリックされたときの処理

 次は、「メニュー」ボタンがクリックされたときの処理だ(リスト5)。

Private Sub メニューボタン_Click()
  Worksheets("メニュー").Select
  UserForm4.Hide
End Sub
リスト5 「メニュー」ボタンがクリックされたときの処理

 「メニュー」シートを選択して表示し、「印刷実行フォーム」であるUserForm4を隠す。

 今回作成したVBAを、前回作成したメニューの「印刷設定」「印刷またはPDF化」の「角丸四角形」に登録する。これで、全てのメニューの項目をクリックすると、各フォームが表示されるようになる。

「印刷オプション」ボタンがクリックされたときの処理

 次は、「印刷オプション」ボタンがクリックされたときの処理だ(リスト6)。

Private Sub 印刷オプションボタン_Click()
  部数テキストボックス.Enabled = True
  印刷ボタン.Enabled = True
  PDFボタン.Enabled = False
End Sub
リスト6 「印刷オプション」ボタンがクリックされたときの処理

 使用不可となっていた、「部数テキストボックス」への値の入力を可能にし、「印刷実行」ボタンを使用可能にする。代わりに「PDFに書き出す」ボタンの使用は不可とする。

「PDFオプション」ボタンがクリックされたときの処理

 次は、「PDFオプション」ボタンがクリックされたときの処理だ(リスト7)。

Private Sub PDFオブションボタン_Click()
  PDFボタン.Enabled = True
  部数テキストボックス.Enabled = False
  印刷ボタン.Enabled = False
End Sub
リスト7 「PDFオプション」ボタンがクリックされたときの処理

 「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
リスト8 「印刷実行」ボタンがクリックされたときの処理

 「部数テキストボックス」に値が入力されていなかったり、入力された値がなかったりする場合は、警告メッセージを表示して処理を抜ける。

 入力された値が数値かどうかの判定にはIsNumeric関数を使用する。数値の場合はTrue、それ以外はFalseを返す関数だ。

 正常に部数が入力された場合は、PrintOutメソッドで、「部数テキストボックス」に入力された部数分の印刷を開始する。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。