[[20151115165105]] 『集計表の自動印刷 』(JA2136Ka-8) ページの最後に飛ぶ

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

 

『集計表の自動印刷 』(JA2136Ka-8)

こんにちは。

 いつもお世話になっております。
仕事でまた壁に突き当たりましたので、ご教示お願い致します。

 作業用の制服を社員の方に貸与するにあたって、バーコードで管理しています。
一人夏用4着冬用4着と合計8着の制服と、帽子等を貸与していてその全ての商品に
バーコードがついており、廃棄したり他の人と交換したりしたときにそのバーコードも
一緒に移動を記録しています。

 社員番号を元に、エクセルでそのバーコードを管理していて、集計表にはVLOOKUP
関数で社員番号を入力すれば、持っているすべての制服とそのバーコード、サイズ
等が表示されるようにしました。
 問題は集計表を印刷する時で、集計表を1枚1枚社員番号を入力して呼び出して
印刷すると相当時間がかかってしまうので、マクロで自動化できないかと考えました。

 ネット上で見つけた差し込み印刷マクロを使って、表の外に、印刷範囲を指定して
(社員番号を範囲指定して)自動で印刷できるようにはしたものの、実は社員番号が
連番ではないのです。

 それで、マクロが走ると、例えば12番の人の次って65番でそこまでは空なのに
その間の番号も次々と印刷指定しちゃうので、多分中身がNAのまま印刷されることに
なってしまいます。
プリンターの具合が悪くて実際テストできませんでしたが
このままでは困るので何か良い方法はございませんでしょうか?

以下、集計表のセルの位置等詳細とコードです
肝心のバーコード情報は年度ごとにまとめてあり、
一覧表オリジナル・一覧表2013年・一覧表2014年・一覧表2015年と
言うシート構成です。

集計表のセル位置は
B8
B9を接合して社員番号を入力するようにしてあります。
VLOOKUPでH8.9の接合セルに社員名が入り、下のE・K・N・Q列の
15〜29行目にそれぞれ制服のバーコードがVLLOKUPで呼び出されます。
A4サイズで設定してあり、印刷範囲外に、印刷範囲指定セルとして
T4.5に自、U4.5に至と名前を定義、
社員番号を入力すると自動的に社員名が入力されて
表を作成・印刷するマクロです。

Sub 集計表印刷()
Range("社員番号") = Range("自")
Do While Range("社員番号") <= Range("至")

    Sheets("集計表").PrintOut
    Range("社員番号") = Range("社員番号") + 1
Loop
End Sub

でも、社員番号が必ずしも連番ではないために
一括して指定することができません。
こういう方法以外に
ちなみに社員番号は12番〜2168番まで飛び飛びです。
連続してるのは5〜10人分ぐらいが、塊であって、途中
1〜2番抜けて、また次の塊で5〜6人分連続してる、そんな感じです。

こういう連続していない番号を印刷するのに
どういう指定をすれば、自動で印刷できますでしょうか?
何かいい方法があればご教示頂きたく、よろしくお願いいたします。

< 使用 Excel:Excel2010、使用 OS:Windows10にバージョンアップしました(無償) >


 社員番号があるかどうか、調べてからPrintOut命令に行けばいいんじゃないですか?

 Do While Range("社員番号") <= Range("至") 

   ’ここにそのチェックを入れる。

     Sheets("集計表").PrintOut
     Range("社員番号") = Range("社員番号") + 1
 Loop

 飛ばし方は「If 中身がNAじゃないなら then PrintOut へ 」と云う形になるでしょう。
       ↓
 >多分中身がNAのまま印刷されることになってしまいます。

(半平太) 2015/11/15(日) 23:03


 こんな感じですかね?

  Do While Range("社員番号") <= Range("至")

     If Not Application.IsNA(Range("H8").Value) Then
          Sheets("集計表").PrintOut
     End If

     Range("社員番号") = Range("社員番号") + 1
  Loop

 もし、関連するRange("H8")が、集計表シート上のセルの話でしたら
 >Not Application.IsNA(Range("H8").Value) Then
  ↓
  Not Application.IsNA(Sheets("集計表").Range("H8").Value) Then
   に変更してください。

(半平太) 2015/11/15(日) 23:12


半平太様

こんばんは。
以前も封筒へのあて名印刷の時にお世話になりました。
その節はどうもありがとうございました。

さて、コードは書いたのですが、
今自宅でもう皆寝てるためにプリンタを起動することができず
検証ができない状態です。
ただF8ボタンで12番から15番まで試したところ
12番しか存在しないはずなのに
プリンターのジョブには2枚スプールが残っています。
明日、会社にもっていって実際印字して試してみますね。
もしできないようでしたらまたご連絡差し上げます。

遅くにありがとうございました。
いつもどうもすみません。

(JA2136Ka-8) 2015/11/15(日) 23:33


半平太様

お世話になります。
先ほど会社にてテストしましたところ、
番号のあるもののみ印刷しており、
ばっちり問題ございません。

どうもありがとうございました。

NAというのはISNAという言葉で表されるのですね。
色々と勉強になりました。

今後ともどうぞよろしくお願い致します。

(JA2136Ka-8) 2015/11/16(月) 11:03


デバッグの際は、.PrintOutメソッドの部分を、.PrintPreviewに書き換えると、紙を消費しなくて良いですよ。
(???) 2015/11/16(月) 11:13

半平太様

 こんにちは。
コード書き換えについてアドバイスありがとうございました。

 さてその後、実物を印刷したのですが、一度は全然デバッグも出ず、
きちんと裏紙に(手差しに設定)人数分プリントアウトできたのですが、
2度目、違うプリンター使って試しましたら、
突然無限ループ?に陥ったようで、印刷が止まらなくなりました。
全部で131人分ですので、一度に回してもそこまでの時間はかからないと
思っていたのですが、延々と止まらず、しかも社員番号が
中途半端な番号になってそのまま動いてない感じでした。
慌ててF3キーを押したけどどうにもならなくて、
しょうがないのでパソコンを強制終了したのですが、
印刷スプールはプリンターに溜まっていたようで
プリンターも強制終了しないといけないような状態に
なってしまって、落ち込んでおります。

一体何が原因だったのでしょうか?
最初にプリントアウトしたときは、一度に範囲指定せず、
30人ぐらいの塊で、指定して印刷をかけていたのですが
今回無限ループした時は、12番から2014番まで一気に範囲指定
したのが違いぐらいで、なぜそうなったのか皆目わからないのです。
一度に範囲指定したのが問題だったのでしょうか?
ご教示頂けたら幸いです。

怖くて試せなくなってしまいました^^;

どうすればいいのかご教示頂けませんでしょうか?

(JA2136Ka-8) 2015/11/26(木) 14:05


コメント返信:

[ 一覧(最新更新順) ]


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