Microsoft Access 掲示板

コードを変更していないのに、突然のエラー

11 コメント
views
4 フォロー

請求書一覧(フォーム)の行ごとに印刷ボタンを設け、特定の請求番号の請求書を印刷するときに使用していましたが、7月のある時点から、印刷プレビューの請求書の宛名は(#Size!)、金額部分は(#Type!)とエラーになり、使えなくなくなりました。
コードの変更はしていません。数か月前のバックアップファイルでも、現在は同じようにエラーになります。
なお、レポートの請求書は問題なく印刷できています。

ボタンのコードは下記の通りです。

Private Sub 請求書一覧_Click()
    DoCmd.OpenReport "請求書", acViewPreview, , "[請求書番号] = " & Me.請求書番号 & ""
End Sub

何が原因かわからず困っております。
おわかりになれば、ご教示いただけますと助かります。
どうぞよろしくお願いいたします。

moe
作成: 2024/08/13 (火) 14:32:56
通報 ...
1
すずやん 2024/08/15 (木) 11:19:36

特に何も変更していないのに突然エラー表記されるようになった、ということですね。

個人的に可能性が高いのは、読み込みデータが無い場合やいままで想定していなかった内容になっている場合でしょうか。

デバッグした場合どこでエラーになるか分かるでしょうか。

2

印刷プレビューの請求書の宛名は(#Size!)、金額部分は(#Type!)とエラーになり、使えなくなくなりました。

レポートのテキストボックスに #Size! とか #Type! と表示されているということですか?

そのテキストボックスのコントロールソースの設定はどうなってますか。
式が設定してあるなら、式を提示してください。

3

コメント頂きありがとうございます。
>個人的に可能性が高いのは、読み込みデータが無い場合やいままで想定していなかった内容になっている場合でしょうか。
請求書一覧フォーム設置のボタンからでなく、オブジェクトのレポートから直接印刷すれば、住所や金額が問題なく印字されます。デバッグのやり方はわからずすみません。

>レポートのテキストボックスに #Size! とか #Type! と表示されているということですか?
 請求書の印刷プレビュー画面の住所や金額、顧客名といった文字や数値データが印字されるところに、エラーの#Size!などが印刷されると言うことです。

>そのテキストボックスのコントロールソースの設定はどうなってますか。
>式が設定してあるなら、式を提示してください。
 請求書一覧フォーム設置のボタンからでなく、オブジェクトのレポートから直接印刷すれば、住所や金額が問題なく印字されますので、レポート請求書のテキストボックスは問題ないような気がしますがいかがでしょうか。

金額部分のコントロールソースには =(Sum([明細金額]))+[消費税] の式が設定されています。
ボタンからだと、レポートのデータが入る部分はすべてエラーになっているようです。

現在使用のアクセスファイルだけでなく、過去使用していたアクセスファイルの、同様のボタンを試してみると、今回、エラーになり、バグのようなものなのか、途方にくれています。原因がわかると助かります。

4

コマンドボタンから下記のコードを実行するとエラー表示になるということですよね。

   DoCmd.OpenReport "請求書", acViewPreview, , "[請求書番号] = " & Me.請求書番号 & ""

このプレビューから印刷するとどうなりますか?

また、コマンドボタンから下記のコードを実行して印刷した場合はどうなりますか?

   DoCmd.OpenReport "請求書", acViewNormal, , "[請求書番号] = " & Me.請求書番号 & ""

レポートをデザインビューで開いてレコードソースに、上記のコードと同様の抽出条件を設定して、直接、プレビューしたり、印刷した場合はどうなりますか。

5
すずやん 2024/08/19 (月) 15:22:54

念の為、デバッグの方法を記載します。
以下のやり方が一般的です。

https://tsware.jp/study/vol16/vbabegin_48.htm

今回の場合、ボタンに設定されているVBAのコードにブレークポイントを設定し、そこから1行ずつ追っていく形で動作確認すればいいのかと思います。
1行進ませる場合は「F8」キーを押します。

6

ありがとうございます。解決しました。

コメントいただいたことを色々試していたところ、レポートのソース(クエリー)に、抽出条件が設定されていたことが原因だったことがわかりました。(クエリーは確認していたはずなのですが、大変申し訳ございません。)
たまたま抽出条件に合わない請求書を試し印刷をしていて、原因に気づけず、お騒がせしました。

デバッグの方法の件、

以下のコードの2行目にカーソルを置き、F8を押しましたが、何の反応もありません。上部メニューのデバッグ(ステップイン)からも、反応がありません。

本来なら、請求書番号を求めるポップアップなどが表示されるのでしょうか。よろしければ今後のためにご教示いただけますと有難いです。宜しくお願い致します。

Private Sub 請求書印刷_Click()
  DoCmd.OpenReport "請求書", acViewPreview, , "[請求書番号] = " & Me.請求書番号 & ""
End Sub

7

すずやんさんの紹介しいるリンク先のデバッグ方法は、VBAの実行時エラーの確認方法です。

今回の場合は、テキストボックスのコントロールソースに設定している式でのエラーですので、この方法は使えません。

8
すずやん 2024/08/22 (木) 09:56:06 >> 7

失礼しました。コントロールソースからの実行の場合、このデバッグ方法は使えません。
逆にデバッグで追えるのはVBAからの実行だけです(知る限りでは)

コントロールソースからの実行はとても便利ですが、文字検索の対象にならないことやデバッグができない(と思っている)ので、個人的にはあまり使わないようにしています。

9

すみません。コントロールソースからの実行という意味がわかっておりません。
上記コードは、フォーム上に設置したコマンドボタンのクリック時に実行しています。可能であれば、違いを教えていただけますと有難いです。

10
すずやん 2024/08/26 (月) 16:41:06 >> 9

「コントロールソースからの実行」とは、テキストボックスなどのプロパティにある「コントロールソース」の内容を実行することを指します。
「VBAの実行」とはイベント発生時に「イベントプロシージャ」からVBAを実行することを指します。

「VBAの実行」ではデバッガの機能が使えますので、1行毎にどのような変化が発生したか、などを追うことができます。「コントロールソースからの実行」ではそれができない、ということを指しています。
(「金額部分のコントロールソースには =(Sum([明細金額]))+[消費税] の式が設定されています」の部分ですね)

例えばテキストボックスの内容のコントロールを全てVBAの中で実施している場合、デバッガで追えますが、コントロールソースで行うとその内容は追えない、ということになります。

11

「コントロールソースからの実行」とは、テキストボックスなどのプロパティにある「コントロールソース」の内容を実行することを指します。

ちょっと表現が分かりにくいですが、
テキストボックスのコントロールソースに式が設定してある。
このフォームやレポートを開くときに、式が評価(実行)されて結果がテキストボックスに表示される。
ということを指しているのでしょうか。

もちろん、この場合、VBAコードが実行されるわけではないので、VBAデバッグはできません。
ただ、この場合、エラーになったときは、テキストボックスに #Size!、#Type! などというように表示されますので、どこでエラーがでているかは判断できます。
で式内の値を確認すればだいたい原因は分かります。
例えば、テキストボックスを追加して、そこに=Sum([明細金額]) 、=[消費税] とすれば値を確認できます。#Type!エラーなら数値であるべきなのに文字列がはいっているとか、Nullだとか。

例えばテキストボックスの内容のコントロールを全てVBAの中で実施している場合、デバッガで追えますが、コントロールソースで行うとその内容は追えない、ということになります。

=Sum([明細金額])+[消費税]
というような集計処理はコントロールソースを使うのが一般的だと思いますし、私は多用しますが、
このような場合、「コントロールを全てVBAの中で実施」するのは、どのようなコードにしていますか。
ご参考までにサンプルを教えてもらえると幸甚です。