アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、ACCESSVBAを用いての作業を行っているのですが、
判定条件として複数条件をDLOOKUP文を使用すると実行時にエラーとなるなどして、
上手く動作しません。

おかしな点がありましたら指摘していただけますでしょうか。
対象テーブルのフィールドAAA~は全てテキスト型となっております。

Me!txtはフォーム上から取得した値、
aaaaはそこまでの処理に使用した変数、
rsはレコードセットとなっております。
レコードセットはExcelのセルを読み取ったデータが格納されており、
これらの変数はそのまえの処理で正常に取得を確認しています。

If DLookup("AAA", "TBL", _"BBB ='" & Me!txt & "'" And _"CCC = '" & aaaa & "'" And _"CCC = '" & Left(rs(1), 3) & "'") = Null Then

よろしくお願いいたします。

A 回答 (1件)

> If DLookup("AAA", "TBL", _"BBB ='" & Me!txt & "'" And _"CCC = '" & aaaa & "'" And _"CCC = '" & Left(rs(1), 3) & "'") = Null Then



上記は

If DLookup("AAA", "TBL", _
      "BBB ='" & Me!txt & "'" And _
      "CCC = '" & aaaa & "'" And _
      "CCC = '" & Left(rs(1), 3) & "'") = Null Then

を1行にしちゃったものになりますか?
継続行の _ をそのままに、1行にしてもエラーになるだけです。

条件部分の基本は
 "BBB='★1' And CCC='★2' And CCC='★3'"
となると思います。
が、提示あったものでは And が文字列内に含まれていませんね。

★1 ~ ★3 部分を加工していけば良いと思います。
方法としては、提示されたやり方でも良いと思います。

また、以下の様な方法でも・・・・

Dim sWhere As String

sWhere = "BBB='★1' And CCC='★2' And CCC='★3'"
sWhere = Replace(sWhere, "★1", Me!txt)
sWhere = Replace(sWhere, "★2", aaaa)
sWhere = Replace(sWhere, "★3", Left(rs(1), 3))
If IsNull(DLookup("AAA", "TBL", sWhere)) Then

※ Null 判別は = では NG なので、IsNull を使用します。

※ かなりシビアな処理性能を求めるところでないのなら、
  後者の方法もありなのかと・・・・

※ 基本となるものを記述しておくと、
   CCC='★2' And CCC='★3'
 この部分、本当に And で良いんだろうか・・・とか気付きやすい?
   "BBB='★1' And (CCC='★2' Or CCC='★3')"  ??
    • good
    • 0
この回答へのお礼

ありがとうございます。
= NULLと継続行の _ については、誤って残してしまっておりました。

>And が文字列内に含まれていませんね。

というこちらを意識して記述を修正したところ上手く動かすことが出来ました。

お礼日時:2013/08/07 00:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A