今回の封筒宛名印刷エクセルの作り方は、
封筒の宛名印字の範囲指定を、アクティブセルのRangeオブジェクトを利用して行います。
範囲指定として、テキストボックスやInputBoxへ範囲入力する方法は取りません。
こんにちは、じゅんぱ店長(@junpa33)です。
その前に、先回の記事を確認されたいという場合は、こちら↓になります。
単独印刷のマルチページにコマンドボタンを設置。変数でセルサイズを自由に変更
このエクセルソフト完成品をフリーダウンロードするにはこちら↓の記事からです。
無料DL!封筒宛名印刷エクセルソフト ダウンロードと取り扱い説明。
封筒宛名印刷についての記事はこちらです。
コンテンツ
アクティブセルを利用した連続印刷範囲指定の考え方
今回作成する「連続印刷」ページはこのようになります。
- 設置しているマルチページに「連続印刷」ページを設置します。
- 「連続印刷」ページに必要なコントロールを配置します。
- ユーザーフォームモジュールにコントロールのコードを記述
- ボタンから呼び出されるプロシージャーをModule4に記述する。
今回のテーマのコード作成のポイントは
印刷の範囲指定を簡単に設定できるようにする。簡単に範囲を修正・変更できるようにすることです。
- 印刷の始点終点の指定方法はアクティブセルのRangeオブジェクトを利用する。
- 昇順・降順を考えたコード組み立てを行う。
- 印刷のためのコードは、単独印刷での「単独印刷」プロシージャーを利用します。
宛名印刷ユーザーフォームの連続印刷ページの配置
青矢印と赤矢印が配置したコントロールです。
その他の文字はラベルで作成してください。
コントロールの設置
ラベルとコマンドボタンを設置していきます。
ラベルの配置
②ラベル「アクティブプリンター」 | ③ラベル「宛名始点A」 | ⑥ラベル「宛名終点A」 |
オブジェクト名 「アクティブプリンター」 Caption 「(空白)」 |
オブジェクト名 「宛名始点A」 Caption 「(空白)」 |
オブジェクト名 「宛名終点A」 Caption 「(空白)」 |
⑩-1ラベル「印刷範囲1」 | ⑩-2ラベル「印刷範囲2」 |
オブジェクト名 「印刷範囲1」 Caption 「(空白)」 |
オブジェクト名 「印刷範囲2」 Caption 「(空白)」 |
コマンドボタンの配置
①コマンドボタン「宛名リスト表示」 | ④コマンドボタン「始点入力」 | ⑤コマンドボタン「始点クリア」 |
オブジェクト名 「宛名リスト表示」 Caption 「宛名リスト表示」 |
オブジェクト名 「始点入力」 Caption 「始点入力」 |
オブジェクト名 「始点クリア」 Caption 「クリア」 |
⑦コマンドボタン「終点入力」 | ⑧コマンドボタン「終点クリア」 | ⑨コマンドボタン「印刷範囲確認」 |
オブジェクト名 「終点入力」 Caption 「終点入力」 |
オブジェクト名 「終点クリア」 Caption 「クリア」 |
オブジェクト名 「印刷範囲確認」 Caption 「印刷範囲プレビュー」 |
⑪コマンドボタン「連続印刷」 |
オブジェクト名 「連続印刷」 Caption 「印刷開始」 |
フォームモジュールでのVBAコード記述
オブジェクト名 「アクティブプリンター」
接続しているプリンター名を表示するようにします。
Private Sub アクティブプリンター_Click()
宛名印刷設定.アクティブプリンター.Caption = Application.ActivePrinter
End Sub
オブジェクト名 「宛名リスト表示」
印刷の範囲を指定するために表示させます。
Private Sub 宛名リスト表示_Click()
Worksheets(“宛名リスト”).Select
End Sub
オブジェクト名 「始点入力」
Module4の「宛名始点選択」モジュールを呼び出します。
Private Sub 始点入力_Click()
Module4.宛名始点選択
End Sub
オブジェクト名 「始点クリア」
Private Sub 始点クリア_Click()
宛名印刷設定.宛名始点A.Caption = “”
宛名印刷設定.宛名始点A.BackColor = &H8000000F
shiR = 0
End Sub
オブジェクト名 「終点入力」
Module4の「宛名終点選択」モジュールを呼び出します。
Private Sub 終点入力_Click()
Module4.宛名終点選択
End Sub
オブジェクト名 「終点クリア」
Private Sub 終点クリア_Click()
宛名印刷設定.宛名終点A.Caption = “”
宛名印刷設定.宛名終点A.BackColor = &H8000000F
shuR = 0
End Sub
オブジェクト名 「印刷範囲確認」
ラベル「宛名始点A」、「宛名終点A」、「印刷範囲1」、「印刷範囲2」のCaptionを操作します。
Module4の「連続印刷PV」モジュールを呼び出します。
Private Sub 印刷範囲確認_Click()
Worksheets(“宛先”).Select
If 宛名印刷設定.宛名始点A.Caption = “” Then
MsgBox “宛名始点が指定されていません。”, vbOKOnly, “メッセージ”
宛名印刷設定.印刷範囲1.Caption = “”
Exit Sub
End If
If 宛名印刷設定.宛名終点A.Caption = “” Then
MsgBox “宛名終点が指定されていません。”, vbOKOnly, “メッセージ”
宛名印刷設定.印刷範囲1.Caption = “”
Exit Sub
End If
宛名印刷設定.印刷範囲1.Caption = “「” & 宛名印刷設定.宛名始点A.Caption & “」から「” & 宛名印刷設定.宛名終点A.Caption & “」まで”
宛名印刷設定.印刷範囲2.Caption = Abs(shuR – shiR) + 1 & “件分を印刷します。”
Module4.連続印刷PV
End Sub
オブジェクト名 「連続印刷」
Module4の「連続印刷開始」モジュールを呼び出します。
Private Sub 連続印刷_Click()
Module4.連続印刷開始
End Sub
Module4での印刷範囲のVBAコード記述
モジュール内で共通の変数の宣言を先頭に記述します。
Public STY As Variant
Public shiR As Long, shuR As Long
「宛名始点選択」プロシージャー
アクティブになっているセルの行番号を取得します。
この行番号を始点として設定します。
Sub 宛名始点選択()
Worksheets(“宛名リスト”).Select
宛名印刷設定.宛名始点A.Caption = Range(“B” & ActiveCell.Row)
宛名印刷設定.宛名始点A.BackColor = &HFFFFC0
shiR = ActiveCell.Row
End Sub
「宛名終点選択」プロシージャー
アクティブになっているセルの行番号を取得します。
この行番号を終点として設定します。
Sub 宛名終点選択()
Worksheets(“宛名リスト”).Select
宛名印刷設定.宛名終点A.Caption = Range(“B” & ActiveCell.Row)
宛名印刷設定.宛名終点A.BackColor = &HFFFFC0
shuR = ActiveCell.Row
End Sub
「連続印刷PV」プロシージャー
連続印刷は、印刷部分のコードをModule1の単独印刷モジュールの呼び出しで行います。
変数「shiR」と変数「shuR」を比較することで、
リストの昇順と降順の両方に対応させています。
If条件文の条件分岐の考え方は、こちらを参考にしてください。
「If条件文」のVBAコードの組み方。条件の絞り方を最速に理解。
メッセージボックスの使い方についてはこちらを参考にしてください。
Sub 連続印刷PV()
Dim ans As Integer
Worksheets(“宛名リスト”).Select
STY = 宛名印刷設定.TP_no.Caption
If STY = “” Then
MsgBox “封筒サイズが指定されていません。”, vbOKOnly, “メッセージ”
Exit Sub
End If
If shuR >= shiR Then
For s = shiR To shuR
Worksheets(“宛名リスト”).Select
Range(“B” & s).Select
Module1.単独印刷
Module1.発送便記入
ans = MsgBox(“プレビュー画面に切替えしますか?”, vbYesNo + vbQuestion, “チェック”)
If ans = vbYes Then
Worksheets(“宛先”).PrintPreview
Else
MsgBox “終了します”
Exit Sub
End If
Next s
ElseIf shuR < shiR Then
For t = shiR To shuR Step -1
Worksheets(“宛名リスト”).Select
Range(“B” & t).Select
Module1.単独印刷
Module1.発送便記入
ans = MsgBox(“プレビュー画面に切替えしますか?”, vbYesNo + vbQuestion, “チェック”)
If ans = vbYes Then
Worksheets(“宛先”).PrintPreview
Else
MsgBox “終了します”
Exit Sub
End If
Next t
End If
End Sub
「連続印刷開始」プロシージャー
「Worksheets(“宛先”).PrintOut」の記述で印刷出力命令を出しています。
Sub 連続印刷開始()
Worksheets(“宛名リスト”).Select
STY = 宛名印刷設定.TP_no.Caption
If STY = “” Then
MsgBox “封筒サイズが指定されていません。”, vbOKOnly, “メッセージ”
Exit Sub
End If
If shuR >= shiR Then
For s = shiR To shuR
Worksheets(“宛名リスト”).Select
Range(“B” & s).Select
Module1.単独印刷
Module1.発送便記入
Worksheets(“宛先”).PrintOut
Next s
ElseIf shuR < shiR Then
For t = shiR To shuR Step -1
Worksheets(“宛名リスト”).Select
Range(“B” & t).Select
Module1.単独印刷
Module1.発送便記入
Worksheets(“宛先”).PrintOut
Next t
End If
End Sub
アクティブセルを使った印刷範囲指定での「連続印刷」のまとめ
連続印刷とは、単独印刷を連続して行うことという考え方で、
実際にコード組み立ての中でModule1の「単独印刷」プロシージャーを呼び出して利用することにしました。
この連続印刷のコード組み立ての中で、今回の注目コードは「印刷の範囲設定」の部分になります。
普通なら範囲指定には、「テキストボックス」かまたは「InputBox」を使いたくなるところです。
が、今回は敢えて簡便に住所録「宛名リスト」で直接セル指定で「開始位置」と「終了位置」を指定できるようにしました。
その分、指定するための入力作業やその処理コードも要らなくなり、効果もメリットも大きかったと思います。
裏方さんの話です。それは、
ユーザーモジュールを表示する時 Show vbModeless でコード記述していることです。
このコードがあるので、「Worksheet 上でもセルを指定(アクティブに)することが出来る」ということを忘れてはいけません。
このコードが無ければ、フォーカスをWorksheetに移すことが出来なくなります。
次回は、最終回になります。差出人を指定して印刷する部分についてです。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です
エクセルVBAを使って業務効率を上げて行くのに、始めのうちに知っておきたい内容を纏めています。
今回の記事はここまでです。 最後までご覧いただき有難うございました。