結構、非連結テキストボックスなどに、Dlookup関数などを使ってデータを検索、抽出して表示させるケースがあります。
しかし、文字列や数値によって書き方が違っているとエラーになり表示することができません。
特に、「and」などを使って複数検索させたりする場合は、ちょっとしたカンマなどでエラーになる場合があります。
今回は、その注意点についてまとめてみました。
※Dlookup関数の使い方ではなく、数値、文字列の違いの解説になります。
使い方のレクチャーページは、下記に参考リンクを貼っておきました。
数値、文字列の違い
数値と文字列では、ちょっと書き方が変わってきます。
ルールとしては、
- 条件式部分全体をダブルクォーテーションでくくる
- =の後は、数値ならそのまま、文字列ならシングルクォーテーションでくくる
- 変数で指定する場合は”[終了確認]=” & 変数 & “)”
となるようです。今一つわかりませんよね。
具体例に沿ってやっていきたいと思います。
●数値の場合
DLookup([品名], "商品マスタ", "[NO] = 123")
●文字列の場合
DLookup([品名], "商品マスタ", "商品番号 = 'A123'")
●数値変数の場合
DLookup([品名], "商品マスタ","NO = " & [番号])
DLookup([品名], "商品マスタ", "NO = "& Forms![フォーム名]!番号)
DLookup([品名], "商品マスタ", "NO = "& Me.検索番号)
DLookUp("progress","Vew_master_progress","[no] =" & [Progress])
※コントロールソースに埋め込むとき
●文字列変数の場合
DLookup([品名], "商品マスタ","番号 = '" & [商品番号] &"'")
DLookup([品名], "商品マスタ", "番号 = '"& Forms![フォーム名]!商品番号 &"'")
DLookup([品名], "商品マスタ", "番号 = '"& Me.商品番号 &"'")
複数検索抽出の場合
●数値の場合
DLookup([品名], "商品マスタ", "[NO] = 123 and [PNO] = 555")
●文字列の場合
DLookup([品名], "商品マスタ", "番号 = 'A123' and ID番号 = 'J555'")
●数値変数の場合
DLookup([品名], "商品マスタ","NO = " & [番号] and NO = "& Forms![フォーム名]!番号)
●文字列変数の場合
DLookup([品名], "商品マスタ","NO = '" & [番号] &"' and NO = '"& Forms![フォーム名]!番号 &"'")
●数値文字列混合の場合
DLookup([品名], "商品マスタ","NO = " & [番号] and 番号 = '"& Forms![フォーム名]!番号 &"'")
訳が分からない状態
参考サイトをみて、その通りにやってもエラーがでてできない場合があります。
●Access実行時エラー3075演算子がありません
文字列型の場合は、シングルコーテーションが必要なのですが、無いと上記のエラーがでます。
Me.受注製品コード = DLookup("製品名コード", "dbo_mst_product","製品名コード=" & Me.製品コード検索)
じゃなくて、
Me.受注製品コード = DLookup("製品名コード","dbo_mst_product","製品名コード='" & Me.製品コード検索 & "'")
結構しらべるのに大変だった。
●ちょっとでも間違うとコンパイルエラー
VBAにて、Dlookup関数を設定しましたが、ちょっとでも間違うとコンパイルエラーがでます。
結局、下記の文字列複数条件にてうまくいったが、これにたどり着くまでカンマの位置で苦労した。
Me.テキスト9 = DLookup("値段", "商品マスタ", "分類= '" & [Forms]![抽出フォーム]![コンボ5] & "' and 商品名= '" & [Forms]![抽出フォーム]![コンボ7] & "'")
●あいまい検索”*”を使う時
うまく動いた参考例だけを書いておきます。
DCount("*", "住所データ", "氏名 Like '*" & 名前検索窓 & "*'")
Me.RecordSource = "Select * From 住所データ Where 氏名 Like '*" & Me!名前検索窓 & "*'"