請求書一覧(フォーム)の行ごとに印刷ボタンを設け、特定の請求番号の請求書を印刷するときに使用していましたが、7月のある時点から、印刷プレビューの請求書の宛名は(#Size!)、金額部分は(#Type!)とエラーになり、使えなくなくなりました。
コードの変更はしていません。数か月前のバックアップファイルでも、現在は同じようにエラーになります。
なお、レポートの請求書は問題なく印刷できています。
ボタンのコードは下記の通りです。
Private Sub 請求書一覧_Click()
DoCmd.OpenReport "請求書", acViewPreview, , "[請求書番号] = " & Me.請求書番号 & ""
End Sub
何が原因かわからず困っております。
おわかりになれば、ご教示いただけますと助かります。
どうぞよろしくお願いいたします。
特に何も変更していないのに突然エラー表記されるようになった、ということですね。
個人的に可能性が高いのは、読み込みデータが無い場合やいままで想定していなかった内容になっている場合でしょうか。
デバッグした場合どこでエラーになるか分かるでしょうか。
レポートのテキストボックスに #Size! とか #Type! と表示されているということですか?
そのテキストボックスのコントロールソースの設定はどうなってますか。
式が設定してあるなら、式を提示してください。
コメント頂きありがとうございます。
>個人的に可能性が高いのは、読み込みデータが無い場合やいままで想定していなかった内容になっている場合でしょうか。
請求書一覧フォーム設置のボタンからでなく、オブジェクトのレポートから直接印刷すれば、住所や金額が問題なく印字されます。デバッグのやり方はわからずすみません。
>レポートのテキストボックスに #Size! とか #Type! と表示されているということですか?
請求書の印刷プレビュー画面の住所や金額、顧客名といった文字や数値データが印字されるところに、エラーの#Size!などが印刷されると言うことです。
>そのテキストボックスのコントロールソースの設定はどうなってますか。
>式が設定してあるなら、式を提示してください。
請求書一覧フォーム設置のボタンからでなく、オブジェクトのレポートから直接印刷すれば、住所や金額が問題なく印字されますので、レポート請求書のテキストボックスは問題ないような気がしますがいかがでしょうか。
金額部分のコントロールソースには =(Sum([明細金額]))+[消費税] の式が設定されています。
ボタンからだと、レポートのデータが入る部分はすべてエラーになっているようです。
現在使用のアクセスファイルだけでなく、過去使用していたアクセスファイルの、同様のボタンを試してみると、今回、エラーになり、バグのようなものなのか、途方にくれています。原因がわかると助かります。
コマンドボタンから下記のコードを実行するとエラー表示になるということですよね。
このプレビューから印刷するとどうなりますか?
また、コマンドボタンから下記のコードを実行して印刷した場合はどうなりますか?
レポートをデザインビューで開いてレコードソースに、上記のコードと同様の抽出条件を設定して、直接、プレビューしたり、印刷した場合はどうなりますか。
念の為、デバッグの方法を記載します。
以下のやり方が一般的です。
https://tsware.jp/study/vol16/vbabegin_48.htm
今回の場合、ボタンに設定されているVBAのコードにブレークポイントを設定し、そこから1行ずつ追っていく形で動作確認すればいいのかと思います。
1行進ませる場合は「F8」キーを押します。
ありがとうございます。解決しました。
コメントいただいたことを色々試していたところ、レポートのソース(クエリー)に、抽出条件が設定されていたことが原因だったことがわかりました。(クエリーは確認していたはずなのですが、大変申し訳ございません。)
たまたま抽出条件に合わない請求書を試し印刷をしていて、原因に気づけず、お騒がせしました。
デバッグの方法の件、
以下のコードの2行目にカーソルを置き、F8を押しましたが、何の反応もありません。上部メニューのデバッグ(ステップイン)からも、反応がありません。
本来なら、請求書番号を求めるポップアップなどが表示されるのでしょうか。よろしければ今後のためにご教示いただけますと有難いです。宜しくお願い致します。
Private Sub 請求書印刷_Click()
DoCmd.OpenReport "請求書", acViewPreview, , "[請求書番号] = " & Me.請求書番号 & ""
End Sub
すずやんさんの紹介しいるリンク先のデバッグ方法は、VBAの実行時エラーの確認方法です。
今回の場合は、テキストボックスのコントロールソースに設定している式でのエラーですので、この方法は使えません。
失礼しました。コントロールソースからの実行の場合、このデバッグ方法は使えません。
逆にデバッグで追えるのはVBAからの実行だけです(知る限りでは)
コントロールソースからの実行はとても便利ですが、文字検索の対象にならないことやデバッグができない(と思っている)ので、個人的にはあまり使わないようにしています。
すみません。コントロールソースからの実行という意味がわかっておりません。
上記コードは、フォーム上に設置したコマンドボタンのクリック時に実行しています。可能であれば、違いを教えていただけますと有難いです。
「コントロールソースからの実行」とは、テキストボックスなどのプロパティにある「コントロールソース」の内容を実行することを指します。
「VBAの実行」とはイベント発生時に「イベントプロシージャ」からVBAを実行することを指します。
「VBAの実行」ではデバッガの機能が使えますので、1行毎にどのような変化が発生したか、などを追うことができます。「コントロールソースからの実行」ではそれができない、ということを指しています。
(「金額部分のコントロールソースには =(Sum([明細金額]))+[消費税] の式が設定されています」の部分ですね)
例えばテキストボックスの内容のコントロールを全てVBAの中で実施している場合、デバッガで追えますが、コントロールソースで行うとその内容は追えない、ということになります。
ちょっと表現が分かりにくいですが、
テキストボックスのコントロールソースに式が設定してある。
このフォームやレポートを開くときに、式が評価(実行)されて結果がテキストボックスに表示される。
ということを指しているのでしょうか。
もちろん、この場合、VBAコードが実行されるわけではないので、VBAデバッグはできません。
ただ、この場合、エラーになったときは、テキストボックスに #Size!、#Type! などというように表示されますので、どこでエラーがでているかは判断できます。
で式内の値を確認すればだいたい原因は分かります。
例えば、テキストボックスを追加して、そこに=Sum([明細金額]) 、=[消費税] とすれば値を確認できます。#Type!エラーなら数値であるべきなのに文字列がはいっているとか、Nullだとか。
=Sum([明細金額])+[消費税]
というような集計処理はコントロールソースを使うのが一般的だと思いますし、私は多用しますが、
このような場合、「コントロールを全てVBAの中で実施」するのは、どのようなコードにしていますか。
ご参考までにサンプルを教えてもらえると幸甚です。