[[20181230144946]] 『連続印刷時不要ページを飛ばす』(gishi) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『連続印刷時不要ページを飛ばす』(gishi)

お世話になります。

VBAで連続印刷を行いたいと思います。

For i = 1 To 30

.Range("F1").Value = i

.PrintOut

単純に30枚印刷するのであれば以上でいいかと思いますが、30ページの中にはデータが入っておらず、印刷が不要となるページもあります。

ページは白紙ではなく、定形の書式が用意されており、以下のような条件で印刷することになります。

 A B   C  D  E F
1
2  日付 名前 品目
3
4

イメージとしては上の通りとなり、1ページ10件記載出来るようになっています。

印刷する際は、2列は見出し行となり不変です。

F1に入れる1−30の数字は整理番号で、別シートからデータを引用する際使用します(30件の引用元があるということでこれの数は変わりません。)

C3D3にはF1に入れた数字を基にVlookで別シートからデータを持ってきて
C3にデータが入ったらB3に当日の日付を出力させ
B3にデータがある場合はA1に1を表示させる
ということを関数でやってあります。

2ページ目以降にも同様の関数を入れページ数の取得が出来るようにしてあります。

1件ずつ印刷する場合には問題ないのですが、1から30を連続で印刷する時データがないページを処理するにはどのようにすればいいのでしょうか?

Dim i , Ed As Integer

For i = 1 To 30

.Range("F1").Value = i
.Range("A1").Value = Ed

if ed = 0 then
i = i+1
end if

.PrintOut from:=1, To:=Ed, preview:=True

next i

こんなコードで作ったと思うのですが、元のデータが職場にあるため、参照できませんがよろしくお願いいたします。

< 使用 Excel:unknown、使用 OS:unknown >


>2ページ目以降にも同様の関数を入れページ数の取得が出来るようにしてあります。

印刷するページが、20ページまでの場合は、A1は20になるのでしょうか。
そうであれば。

if ed <> 0 then
.PrintOut from:=1, To:=Ed, preview:=True
end if

(マナ) 2018/12/30(日) 16:33


マナさん

早速の返信ありがとうございます。

>印刷するページが、20ページまでの場合は、A1は20になるのでしょうか。
関数的にはそういう設定になっていますが、多くても5ページ程度だと思います。

コードを見るとif文で回避するのではなく、if文で実行するということなっていますが
この違いは何なんでしょうか?

何にせよこれで思った動きが出来るのであればすっきりしたコードですので、
職場にて試してみます。
(gishi) 2018/12/30(日) 22:27


>コードを見るとif文で回避するのではなく、if文で実行するということなっていますが
>この違いは何なんでしょうか?

「回避する」場合は、こうでしょうか

 if ed = 0 then 
    '何もしない
 else
    .PrintOut from:=1, To:=Ed, preview:=True 
 end if 

それよりも、
for〜nextの中で
>i = i+1
のようにすると、混乱するのでやめたほうがよいです。

(マナ) 2018/12/31(月) 09:49


マナさん
返信ありがとうございます。

色々試行錯誤した結果

Dim i , Ed As Integer
For i = 1 To 30
.Range("F1").Value = i
.Range("A1").Value = Ed

if ed = 0 then GoTo L1

.PrintOut from:=1, To:=Ed, preview:=True

L1:

next i

こんなコードで自己解決しました。
ありがとうございました。
(gishi) 2019/01/01(火) 14:06


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.