hatena
hatena
2022/04/30 (土) 10:07:53
まずは公式のヘルプで確認しましょう。
Application.DLookup メソッド (Access) | Microsoft Docs
これによると引数はすべて文字列で指定することが分かります。
>「"入数"」については「"」を付けなくてもよいという記述もあり、まだ理解できておりません。
どこで調べたか分かりませんが、それはあきらかに間違いですね。
第3引数は、抽出条件式を文字列として指定します。
具体的にはクエリのSQL文のWhere句に設定する条件式になります。
例えば 仕入先IDが 1、仕入商品IDが 2 のものを抽出するとき、SQLでは下記のようになります。
(SQLが分からなければ、デザインビューで条件を設定してからSQLビューにすれば確認できます。)
SELECT 入数 FROM UQ仕入商品一覧
WHERE 仕入先ID = 1 And 仕入商品ID = 2;
これをDLookupに変換すると、下記のようになります。
DLookup("入数", "UQ仕入商品一覧", "仕入先ID = 1 And 仕入商品ID = 2")
1 と 2 の部分は固定値ではなく、フォームのテキストボックスの値を参照することになるので、文字列の外に出して、
DLookup("入数", "UQ仕入商品一覧", "仕入先ID = " & 1 & " And 仕入商品ID = " & 2)
この固定値の部分をコントロール参照式に変更します。
DLookup("入数", "UQ仕入商品一覧", "仕入先ID = " & Forms![F仕入入力]![仕入先ID] & " And 仕入商品ID = " & [仕入商品ID])
ここで注意することは、DLookup関数の第3引数に設定するのはSQLの条件式ということです。
SQLとVBAは似ていますが、まったく別のものだということを意識してください。
VBAとSQLでも文字列の扱いの違いは、下記で詳しく解説していますので、ご参考に。
通報 ...
hatena 様
>まずは公式のヘルプで確認しましょう。
これによると引数はすべて文字列で指定することが分かります。
ありがとうございます。
文字列式とありました。
今後は公式のヘルプを何度も読み直し、しっかりと確認いたします。
>どこで調べたか分かりませんが、それはあきらかに間違いですね。
今回のエラーに関して様々な質問板等を見ているときに、DLookup (Expr, Domain, Criteria)ではExprの部分は""で囲まなくてOKです!と書いてあったので、お恥ずかしくも鵜吞みにしておりました。。。
また、きめ細やかなご解説本当に有難うございます。
リンクまで貼って下さり有難うございます。
拝見しました。
素人のわたくしにも理解できるように、詳しくご解説してくださっているので、
とても分かりやすく、勉強になりました。
重ね重ね御礼申し上げます。