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

初めて質問します、よろしくお願いします。Access2007にて開発をしています。
リストボックスにて商品を選んだ際に隠しテキストボックスに´商品名1´,´商品名2´と入力し、クエリのwhere句に
IIf(IsNull([Forms]![フォーム1]![抽出商品名]),True,
[商品名] IN( [Forms]![フォーム1]![抽出商品名]))
と記載してデータ抽出を試みているのですが、常に値が0件で返ってきません。
このやり方ではIN演算子は使えないのでしょうか?
ご教唆のほど、よろしくお願いします。

A 回答 (2件)

In演算子のカッコの中は、値そのもの(リテラル値)か式でなければなりません。


変数や今回のようなオブジェクト([Forms]![フォーム1]![抽出商品名])では機能しません。
フォームのフィルターではダメですかね?
hatena さんの
http://hatenachips.blog34.fc2.com/blog-entry-96. …

クエリでやろうとすると
IN( [Forms]![フォーム1]![抽出商品名])) が
In('商品名1','商品名2')
となるようにVBAでその都度クエリのSQL文を変更する必要があります。
    • good
    • 0
この回答へのお礼

ご回答頂きありがとうございます。やはりオブジェクトの値はダメなんですね。ご紹介頂いた内容で試してみたいと思います。
ありがとうございました。

お礼日時:2014/01/20 11:55

解決したでしょうか。


少し方法が違いますが、開いたクエリにフィルタ
をかける方法はどうでしょう。なお、クエリには
抽出条件を設定しないでおきます。

クエリの名前を「クエリ1」、リストボックスの名前を
「リスト0」とします。リストボックスのプロパティで
複数選択の項目を「標準」としておきます。

ここでは、「隠しテキストボックス」は使用せず、
変数に格納しています。同じことではありますが。


ボタンクリックでリストボックスで選択したアイテムを
抽出条件にして開いたクエリにフィルタをかける仕様になっています。


Private Sub コマンド0_Click()
  Dim varitm As Variant
  Dim strFilter As String
  Dim ctl As Control
  Dim strQuery As String

  strFilter = ""
  strQuery = "クエリ1"
  Set ctl = Me!リスト0
  DoCmd.OpenQuery strQuery, acNormal, acReadOnly
  'リストボックスから選択した商品名を取得し、変数に格納
  For Each varitm In ctl.ItemsSelected
    strFilter = strFilter & "," & "'" & ctl.ItemData(varitm) & "'"
  Next varitm
  If strFilter <> "" Then
    '文字列strの先頭にいらない「,」がくっついているので取り除く
    strFilter = Right(strFilter, Len(strFilter) - 1)
    'strFilterをフィルター用のIn句に整形
    strFilter = "商品名 In(" & strFilter & ")"
    'クエリにフィルタをかける
    DoCmd.ApplyFilter strQuery, strFilter
  End If
End Sub



なお、フィルタをかけたクエリを閉じるときに、
クエリの変更を保存するか問われるかもしれませんが、
特に保存の必要はないので、「いいえ」で閉じれば
いいかと。「はい」でも変わりはないかもしれませんが。
    • good
    • 0

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