- ベストアンサー
access でエラーを回避するには?
アクセス初心者ですが、宜しくお願い致します。 現在、納品伝票を作っており、 納品フォームに得意先情報、合計金額 サブフォームに売上げ商品と数量、単価、金額などを表示、 同じフォーム上にボタンを作って、マクロで印刷を行う設定にしています。 サブフォームには商品コードフィールドがあり、 別にある商品テーブルから DLookup関数を用いて その商品コードの商品名と単価を自動入力させ、 サブフォーム上で合計金額を計算しています。 合わせて商品コードはコンボボックスになっており、 各得意先名により表示内容が変わるようにしてあります。 商品コードのフォーカス喪失時イベントには Private Sub 商品コード_Exit(Cancel As Integer) If Not IsNull(商品コード) Then 商品名 = DLookup("商品名", "取り扱い店名クエリ", "商品コード='" & 商品コード & "'") 単位 = DLookup("単位", "取り扱い店名クエリ", "商品コード='" & 商品コード & "'" End If End Sub こんな感じで記述しているのですが、 サブフォーム上の商品コードにカーソルがある時に フォーム上の印刷ボタンを押すと、 実行時エラー2424 「指定した式にアクセスが見つける事ができない フィールド、コントロール、プロパティ名が含まれています」 となってしまいます。 例えば、サブフォームの1レコード目に入力をし終わり、 2レコード目の商品コードにカーソルが移った時点で印刷ボタンを押す。 2レコード分の入力を済ませたあと、エンターキーを押し続けて (カーソルはカレントレコード内に戻る様にしています)、 再度商品コードにカーソルが合った時に印刷ボタンを押す。 などの場合です。 何とかこのエラーを回避する手立てはありませんでしょうか? どうか宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
商品コードのフォーカス喪失時イベントではなく更新後処理に記述をしても同様でしょうか?
その他の回答 (1)
原因がちょっと特定できませんが、 >例えば、サブフォームの1レコード目に入力をし終わり、2レコード目の商品コードにカーソルが移った時点で印刷ボタンを押す。 については、ブランクのレコードができているのかも知れません。 もしそうなのであれば、 If Not IsNull(商品コード) Then のあとにもう一個 If (商品コード) <> "" をくわえるとかいろいろ方法はあると思います。 >2レコード分の入力を済ませたあと、エンターキーを押し続けて(カーソルはカレントレコード内に戻る様にしています)、再度商品コードにカーソルが合った時に印刷ボタンを押す。 こちらはちょっと見当がつきません。 debug してみると、最初のdlookupで止まるのだと思いますが、このときの商品コードの値は読み取れていますか? 余り関係ありませんが、私はDLookUpがあまり好きではないので、アクセスを使用する場合はクエリでデータを抽出するようにしています。
お礼
ご回答ありがとうございました。 ANo.2のO_cyanさんの方法でエラー回避はできました。 商品コードに何がしかのデータが入ってしまっていたのでしょうね。 ですが、ご指摘の様にブランクのレコードができてしまう様な時の対処に If (商品コード) <> "" を使うのは勉強になりました。 今のフォームをもっとスマートに快適に使える様にする為に 役立てたいと思います。 ありがとうございました。
お礼
おかげざまでできました。 何でもかんでもフォーカス取得時や喪失時イベントに 割り当てればいいってものじゃないですよね。 今度からはもう少し考えてイベントの設定をする様にします。 ありがとうございました。