請求書発行マクロをExcel2003で実行すると不具合が発生するが?

Question 80.8 Previous Next
はじめまして。大変お世話になっております。
「請求書印刷」- V1.0 -を利用していて、うまく動いてくれなかったので念のためご報告します。 当方は素人ですので、こちら側の環境などに起因するかもしれません。その場合はご容赦願います。
(OS:Win2000、エクセルバージョン:2003)
たとえば、DBシートに右図のデータを入力して、
マクロを起動すると、正しくデータが請求書に反映されません。

【ここから推測です】 どうやら、
下端 = Sheets(ピボット).Range("B3").End(xlDown).Row '下端検出
右端 = Sheets(ピボット).Range("B3").End(xlToRight).Column '右端検出
で、正しく判定できていないようで、ピボットテーブル内にデータが無いセルに 「0(ゼロ)」 が入っていないからのようでした。
ピボットテーブルのオプションには、「空白セルに表示する値」にチェックが入っていて、右のテキストボックスは空白でした。
ためしにチェックをはずしたり、0 を入力してもマクロを起動させると元に戻ってしまうので意味がありませんでした。
また、エクセルのオプションのゼロ値にもチェックは入っています。
DBシートにピボットテーブルのタイトル行をカウントする関数を入力し、それを参照するようにしたら、うまく請求書を印刷できました。
※DBシートに入力した関数:  
=COUNTA(ピボット!2:2) と =COUNTA(ピボット!2:2)=COUNTA(ピボット!A:A)
※参照するように修正したコード
下端 = Sheets("DB").Cells(2, 7) '下端検出
右端 = Sheets("DB").Cells(1, 7) '右端検出
以前のエクセルバージョンでは、ピボットテーブル内にデータがないセルについて、ゼロが自動入力されていたのでしょうか?
以上、まったくのこちらの勘違いでしたら申し訳ございません。もし不具合でありましたら、もう少しスマートな修正をご教示頂きたくお願い申し上げます。
Answer   Copyright (C) 2007.3.2 Yoshioh Nagai
クリックで拡大 ダウンロードなさった「請求書印刷 - V1.0」の不具合につきましてご連絡いただき、ありがとうございます。
そのマクロのコードは、印刷[応用型]のページに「
DBから請求書を印刷」としても掲載しています。

さっそく確認しましたところ、そのダウンロード用ブックは Excel 95仕様のため、Excel 2003では宛名の欄が黒く表示されてしまうので、修正しておきました。(オートシェイプ利用に)
「当方は素人」と仰ってみえますが、この点の修正はご自身で行われたようで、相当お詳しいことと思います。

そして、こ指摘のとおり、マクロコードの改良も必要でして、ご提案いただいた改良方法は、分かりやすくて良いと思います。

DBシートに手を加えたくない場合の改良方法を、以下にお示しします。参考になさってください。 ご指摘いただいた2行のコードを、下記のとおりに修正します。
    下端 = Sheets(ピボット).Range("B" & Rows.Count).End(xlUp).Row       '下端検出
    右端 = Sheets(ピボット).Cells(2, Columns.Count).End(xlToLeft).Column '右端検出
改良済みのサンプルブックを作成しておきました。 お手数をお掛けしますがご確認ください。
ご連絡いただきましたこと、重ねてお礼申し上げます。万一、他でも気付かれました折には、お教えください。
ありがとうございました。

サンプルブックのダウンロードは ここをクリック  (YN_seikyusho.xls 99KB)
※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。
後日情報
請求書発行マクロは、下記の本にもくわしく掲載されています。
 ・ 作りながら覚える! Excel VBA マクロ組み方講座

 

Excel VBA Macro