1. はじめに
- 目的:ユーザー操作だけで用紙サイズ・向き・拡大率・カラー/モノクロ・両面印刷・印刷範囲を設定し、そのまま「プレビュー」または「印刷」できるフォームを作成
- メリット:標準ダイアログに頼らず、一度作ればプロジェクト横断で使い回し可能
2. フォーム設計概要
フォーム名:frmPrintSetting
主なコントロール
コントロール名 | 種類 | 説明 |
---|---|---|
cmbSize |
ComboBox | 用紙サイズ(A4/B5/A3…) |
cmbOrient |
ComboBox | 印刷の向き(縦/横) |
cmbColor |
ComboBox | カラー/白黒 |
txtZoom |
TextBox | 拡大率(%) |
spnZoom |
SpinButton | 拡大率用上下スピン |
chkPreview |
CheckBox | “印刷プレビューのみ” |
chkDuplex |
CheckBox | “両面印刷(対応機種)” |
txtRange |
TextBox | 印刷範囲(例:A1:R31 ) |
btnPrint |
CommandButton | 実行(プレビュー or 印刷) |
btnCancel |
CommandButton | キャンセル(フォームを閉じる) |
UserForm_Initialize で各リスト・キャプション・初期値を設定し、
spnZoom_Change
⇔txtZoom_Change
で数値を同期・バリデーションを行います。
3. モジュール構成(PrintModule.bas)
PrintModule.bas
'──────────────────────────────────
' フォーム表示
Sub ShowPrintForm()
frmPrintSetting.Show
End Sub
'──────────────────────────────────
' プリント設定反映 & 印刷実行
Sub SetPrintSettings( _
paperSize As String, _
orientation As String, _
zoomPercent As Long, _
previewOnly As Boolean, _
duplex As Boolean, _
colorMode As String, _
printRange As String)
With ActiveSheet.PageSetup
' ズーム設定
.Zoom = zoomPercent
.FitToPagesWide = False: .FitToPagesTall = False
' 向き設定
.Orientation = IIf(orientation = "縦", xlPortrait, xlLandscape)
' 用紙サイズ設定
Select Case paperSize
Case "A4": .PaperSize = xlPaperA4
Case "B5": .PaperSize = xlPaperB5
Case "A3": .PaperSize = xlPaperA3
' …追加可…
End Select
' カラー設定
.BlackAndWhite = (colorMode = "白黒")
' 両面印刷設定
If duplex Then .Duplex = xlDuplexLongEdge
' 印刷範囲設定
.PrintArea = IIf(printRange <> "", printRange, "")
End With
' プレビュー or 実印刷
If previewOnly Then
ActiveSheet.PrintPreview
Else
ActiveSheet.PrintOut
End If
End Sub
4. サンプルコード全文
(PrintModule.bas/frmPrintSetting.frm の完全版を GitHub Gist/添付ファイルリンクで掲載)
PrintModule.bas
Option Explicit
Private Sub btnCancel_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
lblSize.Caption = "サイズ"
cmbSize.AddItem "A4"
cmbSize.AddItem "B5"
cmbSize.AddItem "A3"
cmbSize.ListIndex = 0
lblOrient.Caption = "印刷の向き"
cmbOrient.AddItem "縦"
cmbOrient.AddItem "横"
cmbOrient.ListIndex = 0
lblColor.Caption = "色"
cmbColor.AddItem "カラー"
cmbColor.AddItem "白黒"
cmbColor.ListIndex = 0
lblZoom.Caption = "倍率"
txtZoom.value = "100"
spnZoom.Min = 10
spnZoom.Max = 400
spnZoom.value = 100
chkPreview.Caption = "印刷プレビューのみ"
chkDuplex.Caption = "両面印刷(対応機種)"
txtRange.value = "" ' 空欄時はシート全体
btnPrint.Caption = "印刷"
btnCancel.Caption = "キャンセル"
lblRange.Caption = "範囲指定"
End Sub
Private Sub btnPrint_Click()
Me.Hide
DoEvents
Call SetPrintSettings( _
cmbSize.value, cmbOrient.value, val(txtZoom.value), _
chkPreview.value, chkDuplex.value, cmbColor.value, txtRange.value _
)
End Sub
Private Sub spnZoom_Change()
txtZoom.value = spnZoom.value
End Sub
Private Sub txtZoom_Change()
If IsNumeric(txtZoom.value) Then
Dim val As Long
val = CLng(txtZoom.value)
If val >= spnZoom.Min And val <= spnZoom.Max Then
spnZoom.value = val
End If
End If
End Sub
5. 使い方 & 呼び出し例
' ボタンやメニューから…
Call ShowPrintForm
- フォームで各項目を選択
- 「印刷」ボタンで即実行 or プレビュー
- 「キャンセル」でフォーム終了
6. カスタマイズ例
7. まとめ & 今後の改善案
- まとめ:シンプルかつ汎用的なプリント設定フォームの実装手順を解説
- 改善案:レイヤー化したプリセット機能、社員名シートへの自動連携など