宛名ラベルの印刷② 宛名位置の指定

Pocket

宛名ラベルを印刷すると、かなりの高い確率で余りが出てしまいます。
特に20枚印刷で21枚となると、1枚の宛名ラベルに宛名シートが1枚必要になってしまいます。
それで余ったシートが使えなくなるのはあまりにももったいないので、
続きから印刷できるよう、印刷位置を指定して印刷出来るようにします。

最初にこのような住所録を作ります。ラベル印刷にチェックがついている人だけ
ラベルが印刷されます。

住所録をコピーして、ラベル印刷のフィールドを削除し、テーブルの名前を
「印刷データ」に変更します。ここのレコードが印刷対象です。

このような印刷データをレコードソースにして、次のような簡単な
レポートを作ります。作り方は宛名ラベルの印刷で確認してください。

次に簡単なフォームを準備します。

このコマンドボタンのイベントタブ・クリック時に次のVBAコードを入力します。
Private Sub コマンド2_Click()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset

Dim cnn1 As ADODB.Connection
Dim rs1 As ADODB.Recordset

Set cnn = CurrentProject.Connection
Set rs = New ADODB.Recordset

Set cnn1 = CurrentProject.Connection
Set rs1 = New ADODB.Recordset
Dim a As Integer

rs.Open “印刷データ”, cnn, adOpenKeyset, adLockOptimistic
rs1.Open “住所録”, cnn1, adOpenKeyset, adLockOptimistic

On Error Resume Next
rs.MoveFirst

Do Until rs.EOF

rs.Delete
On Error GoTo 0
rs.MoveNext
Loop
On Error GoTo 0

For a = 1 To Me!テキスト0 – 1
rs.AddNew
rs!会社名 = Null
rs.Update
Next a

Do Until rs1.EOF
If rs1!ラベル印刷 = -1 Then
rs.AddNew
rs!会社名 = rs1!会社名
rs!氏名 = rs1!氏名
rs!〒 = rs1!〒
rs!住所 = rs1!住所
rs!敬称 = rs1!敬称
rs.Update
End If
rs1.MoveNext
Loop

rs.Close
Set rs = Nothing
cnn.Close
Set cnn = Nothing

rs1.Close
Set rs1 = Nothing
cnn1.Close
Set cnn1 = Nothing
DoCmd.OpenReport “ラベル印刷印刷位置指定”, acViewPreview
End Sub

最初にレコードが重複しないように、印刷データのすべてのレコードを削除します。
次にフォームのテキストボックスに入力した「数値-1」の空白のレコードを先に作り、
そのあとに印刷するレコードを追加します。

実行後の印刷データのレコードです。

空白のレコードの分だけ、スタート位置をずらせます。

プレビュー画面です。

空白のレコードを利用することで、宛名シールを無駄なく使うことができます。
サンプルファイルはこちらから。

最近はずっとマクロを使っていましたが、VBAも便利ですね。
細かいことろに手が届くのがVBAのいいところです。

==============================
個人的な話ですが、若い時から白髪が目立ち、今まで染めていたのですが、
43にもなるし、もういいかなと思って染めるのをやめました。
人からどう見られているのか気になって、なかなか踏ん切りがつかなかった
のですが、もう気にするような年でもないので、自然体でこれからは
過ごします。

本日も最後までお読みいただきありがとうございます。