dポイントプレゼントキャンペーン実施中!

フォーム上に別フォームを開くボタンがあるのですが、クリックすると実行時エラーが表示されます。

実行時エラー 3075
クエリ式”コード IN(○○,××)の構文エラー 演算子がありません。

コードを数値型からテキスト型に変更したのが原因だと思います。
エラーが出ない方法を教えていただければ助かります。
よろしくお願いいたします。

Dim rst As Recordset
Dim strWhere As String

Set rst = Me.RecordsetClone
With rst
If .RecordCount = 0 Then
Beep
Exit Sub
End If
.MoveFirst
strWhere = ""
Do Until .EOF
strWhere = strWhere & IIf(Len(strWhere) > 0, ",", "") & !コード
.MoveNext
Loop
.Close
strWhere = "コード IN (" & strWhere & ")"
End With

DoCmd.OpenForm "フォーム", , , strWhere

A 回答 (4件)

補足をよんでいなかったので、In句の中身の使い道


がわかりませんでした。

コード IN(○○,××)

○○,××は、元フォームに表示されているレコードになりますので


ということならば、No3の方の回答の、

strWhere = ",'" & !コード & "'"



strWhere = strWhere & ",'" & !コード & "'"

にすればよろしいかと。
    • good
    • 0
この回答へのお礼

再度のご回答ありがとうございました。
おかげさまで表示されるようになりました。
ありがとうございました。

お礼日時:2011/09/29 16:00

> コードを数値型からテキスト型に変更したのが原因だと思います。



ということですから

数値型の場合に
  IN (10,20,30)
であったものを
  IN ('10','20','30')
あるいは
  IN ("10","20","30")
となるように編集しなくてはいけません。

文字列に 「'」 が含まれていることがあり得る場合以外は
前者の方が分かり易いのでお勧めです。

ついでに、カンマ区切りとか、
Where条件の 「AND」 でつなぐ場合のテクニックを。

IIf の判断をしないで
すべて、2番目以降の場合と同様に記述し
連結を終了してから
先頭の余分な文字を MID 関数を使用して取り除きます。

strWhere = ""
Do Until .EOF
  strWhere = ",'" & !コード & "'"
  .MoveNext
Loop
.Close
strWhere = "コード IN (" & Mid(strWhere,2) & ")"

直書きにつき、間違っていたら御免なさい。

この回答への補足

ご回答ありがとうございました。
この通りに書きましたら、次のフォームが開いてレコードが一行表示されました。
説明不足だったのですが、元フォームには複数のレコードがある帳票フォームで、次のフォームも同じになります。
この方法で、複数の値を渡すことができれば、動作しそうです。
ありがとうございました。

補足日時:2011/09/29 14:50
    • good
    • 0

コードが文字型ならば、



strWhere = "コード IN (" & strWhere & ")"



strWhere = "コード IN ('" & strWhere & "')"

に。

この回答への補足

ご回答ありがとうございました。
エラーは出なくなりましたが、次のフォームに何も表示されませんでした。
まだ何かが不足しているように思いました。
ありがとうございました。

補足日時:2011/09/29 14:47
    • good
    • 1

止まった行がDoCmdの行なら、


DoCmd.OpenForm "フォーム", , , strWhere
の前に
debug.print strwhere
とか
msgbox strwhere

などとして、意図しているstrWhereになっているかを確認するとよいと思います。

この回答への補足

ご回答ありがとうございました。
止まった行はDoCmdの行です。
msgbox strwhereとしたところ、エラーメッセージと同じ内容の部分が表示されました。

コード IN(○○,××)

○○,××は、元フォームに表示されているレコードになりますので、これでいいと思います。
ただ、知識がありませんので、この操作がどのような意味か理解できませんでした。
ありがとうございました。

補足日時:2011/09/29 12:46
    • good
    • 0

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

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

関連するカテゴリからQ&Aを探す


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