プロが教える店舗&オフィスのセキュリティ対策術

フォームのリストボックスから選択してクエリで検索しています。

▼フォーム
例)
北海道
東北
関東

▼クエリ
[Forms]![フォーム]![地域] ← 抽出条件

リストで1つしか選べないのですが、これを複数選択出来るようにするにはどのようにしたら
良いのでしょうか?


今だと北海道しか選べないので、これを北海道、東北などと複数を選べるように変更したいと思っています
?ご存知の方教えてください。

A 回答 (2件)

<tab1>



ID__地域
1___北海道
2___東北
3___関東

まず、この簡単なテーブルをリストボックスの選択に応じてMsgBox で表示に挑戦されたらと。

1、tab1 作成しデータ登録。
2、フォームにリストボックス[地域]とテキストボックス[選択地域]を配置。

[地域].[値集合ソース]=SELECT tab1.地域 FROM tab1;

3、以下の DBSelect関数を標準モジュールに登録。

これで、テスト準備完了です。

<やるべき作業>

以下のコードを書くだけです。

Private Sub 地域_Click()
  Dim I As Integer
  Dim N As Integer
  Dim L As Integer
  
  Me.選択地域 = ""
  N = Me.地域.ListCount - 1
  If N >= 0 Then
    For I = 0 To N
      If Me.地域.Selected(I) Then
        Me.選択地域 = Me.選択地域 & "'" & Me.地域.ItemData(I) & "',"
      End If
    Next I
    If Len(Me.選択地域) Then
      MsgBox DBSelect("SELECT * FROM Tab1 WHERE 地域 IN (" & Me.選択地域 & ")")
    End If
  End If
End Sub

これだけで、複数選択に応じたデータがメッセージボックスに表示されます。

Select * FROM tab1 WHERE 地域 IN ('北海道','東北')

このような SQL文を作成しているだけです。
後は、各フォームのレコードソースを、このSQL 文にすれば事足ります。

Public Function DBSelect(ByVal strQuerySQL As String, _
             Optional ByVal strSeparator1 As String = ";", _
             Optional ByVal strSeparator2 As String = "") As String
On Error GoTo Err_DBSelect
  Dim I   As Integer
  Dim J   As Integer
  Dim R   As Integer
  Dim C   As Integer
  Dim M   As Integer
  Dim N   As Integer
  Dim rst  As ADODB.Recordset
  Dim fld  As ADODB.Field
  Dim Datas As String
  
  Set rst = New ADODB.Recordset
  ' =================
  ' Begin With: rst
  ' -----------------
  With rst
     .Open strQuerySQL, _
        CurrentProject.Connection, _
        adOpenStatic, _
        adLockReadOnly
     If Not .BOF Then
      M = .RecordCount - 1
      N = .Fields.Count - 1
      .MoveFirst
      For R = 0 To M
        For C = 0 To N
          Datas = Datas & .Fields(C) & strSeparator1
        Next C
        If Len(strSeparator2) Then
          Datas = Datas & strSeparator2
        End If
        .MoveNext
      Next R
     End If
  End With
  ' ---------------
  ' End With: rst
  ' ===============
Exit_DBSelect:
  DBSelect = Datas
  Exit Function
Err_DBSelect:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBSelect
End Function

なお、クエリ自身の改造は任せます。
私は、ダイレクトにレコードソースを指示することしかしていません。
私は、クエリ自体もフォームから更新して利用しています。
よって、クエリでフォームの[選択地域]を参照させることは、どうにも苦手です。
    • good
    • 0

>[Forms]![フォーム]![地域] ← 抽出条件


このような形で複数選択されたものを参照することは出来ません

複数選択されたものを取り出すにはVBAが必須です
詳細はVBAのヘルプに書かれていますから調べてください

キーワードは
MultiSelect/複数選択 プロパティ
Selected プロパティ
です
    • good
    • 0

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

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


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