hatena
hatena
2025/05/20 (火) 21:56:05
方法としては下記の2つが考えられます。
コンボボックスの値集合ソースのクエリ(SQL)にメインフォームのオプショングループを参照する抽出条件を設定する。
メインフォームのオプショングループの更新後処理でサブフォームのコンボボックスの値集合ソースのSQLを変更する。
オプションの選択肢が「洋or和」「生or焼」だけなら1.の方法がシンプルだと思います。
例
オプショングループ(opt_洋or和)
オプションボタン(opt_洋) オプション値: 1
オプションボタン(opt_和) オプション値: 2
オプショングループ(opt_生or焼)
オプションボタン(opt_生) オプション値: 1
オプションボタン(opt_焼) オプション値: 2
コンボボックスの値集合ソースの設定
SELECT * FROM M_商品
WHERE
洋or和 = Choose(Parent!opt_洋or和,"洋菓子","和菓子")
AND
生or焼 = Choose(Parent!opt_生or焼,"生菓子","焼菓子");
メインフォームのオプショングループの更新後処理
Private Sub opt_洋or和_AfterUpdate()
Me.サブフォーム1.Form!コンボボックス1.Requery
End Sub
サブフォームコントロール名、コンボボックス名は実際のものに変更
opt_生or焼 も同様に。
オプショングループの選択肢に全て(抽出しない)というのを追加するなら抽出条件が複雑になるので2.の方法をとりますね。
洋,和,全(抽出しない)
例
オプショングループ(opt_洋or和)
オプションボタン(opt_洋) オプション値: 1
オプションボタン(opt_和) オプション値: 2
オプションボタン(opt_全) オプション値: 3
オプショングループ(opt_生or焼)
オプションボタン(opt_生) オプション値: 1
オプションボタン(opt_焼) オプション値: 2
オプションボタン(opt_全) オプション値: 3
メインフォームのモジュール
Private Sub opt_洋or和_AfterUpdate()
SetComboBoxRowSource
End Sub
Private Sub opt_洋or和_AfterUpdate()
SetComboBoxRowSource
End Sub
Private Sub SetComboBoxRowSource()
Dim stSQL As String
Select Case Me.opt_洋or和.Value
Case 1
stSQL = " AND 洋or和 = '洋菓子'"
Case 2
stSQL = " AND 洋or和 = '和菓子'"
End Select
Select Case Me.opt_生or焼.Value
Case 1
stSQL = stSQL & " AND 生or焼 = '生菓子'"
Case 2
stSQL = stSQL & " AND 生or焼 = '焼菓子'"
End Select
If stSQL = "" Then
stSQL = "SELECT * FROM M_商品;"
Else
stSQL = "SELECT * FROM M_商品 WHERE" & Mid(stSQL, 6) & ";"
End If
Me.サブフォーム1.Form!コンボボックス1.RowSource = stSQL
End Sub
通報 ...