知恵袋の質問 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13258769148
Microsoft Accessについて、
関連付けられた複数選択のコンボボックスとテキストボックスがあり、
そのコンボボックスの選択数によって条件付き書式で
テキストボックスの背景色を変更したいと思ったのですが、
複数選択のコンボボックスの選択数を判定する条件がわかりません。複数選択のコンボボックスの選択数を条件付き書式の条件にいれる方法はありますでしょうか?
に回答してみました。
Me!コンボボックスオブジェクト.Value で 値がとれるので、
単純に (例:作業内容と言う名前でルックアップフィールドから複数選択コンボボックス作りました)
UBound(Me![作業内容].Value)>0
を条件書式に入れると、
動かなかった、、、私の勘違いカモ・・・
https://youtu.be/9sAAZGTGu3I
↑テストしてみました、こんな感じで設定すると、複数選択されているか判断できると思います。
(あせっている動画ですが、時間のある時に見て、笑ってください。)
ひとつフォーム内にモジュール(Private Functionで選択数を返す)を作り
'複数選択コンボボックス?の選択数を調べたかったので、 Private Function testCNT() As Integer Dim box box = Me![作業内容].Value '作業を複数選択 コンボボックス testCNT = UBound(box) End Function
条件書式の式に
testCNT()>=1
を入れる。
また、
Private Sub 作業内容_AfterUpdate() Me.備考.Requery 'コンボ更新後にやらないと条件書式が再評価されない? End Sub
と
該当のルックアップフィールドから作成した
複数選択コンボが更新されたタイミングで
設定した 条件書式のテキストボックス を .Requery しないと、色が変わらないかも。
ルックアップフィールド.Value と UBound を探ってみてください。
1つでも解決のヒントとなれば幸いです。
https://youtu.be/9sAAZGTGu3I?t=60
↑テストしてみました、こんな感じで設定すると、複数選択されているか判断できると思います。
(あせっている動画ですが、時間のある時に見て、笑ってください。)
Private Sub コマンド27_Click() Dim cnt As Integer Dim box box = Me![作業内容].Value '作業を複数選択 コンボボックス Debug.Print "UBoundは" & UBound(box) & "です※配列は0からなので注意" For cnt = 0 To UBound(box) Debug.Print cnt & ":" & box(cnt) Next Stop 'コードを止める End Sub
2022/03/16 追記
またまた、テスト不足かもしれませんが、
とりあえず対策として
If TypeName(box) = "Null"
で、コンボボックスが選択されているか、チェックしてみました。
'複数選択コンボボックス?の選択数を調べたかったので、 Private Function testCNT() As Integer Dim box As Variant box = Me![作業内容].Value '作業を複数選択 コンボボックス If TypeName(box) = "Null" Then '↑でNullか?チェック testCNT = 0 '選択無し Nullの時は0を返す Else 'Debug.Print "UBoundは" & UBound(box) & "です※配列は0からなので注意" testCNT = UBound(box) '選択されていたら、配列の数を返す。あっここ+1?まぁいっか End If End Function
で動作するといいなぁ。
中身の確認の方も
Private Sub コマンド27_Click() '中身を.Valueで確認 Dim cnt As Integer Dim box As Variant box = Me![作業内容].Value '作業を複数選択 コンボボックス If TypeName(box) = "Null" Then '↑でNullか?チェック Debug.Print "Null、test関数を抜けます" Exit Sub End If Debug.Print "UBoundは" & UBound(box) & "です※配列は0からなので注意" For cnt = 0 To UBound(box) Debug.Print cnt & ":" & box(cnt) Next Stop 'コードを止める End Sub
まだまだ、抜けていたらスミマセン。
Accessのルックアップフィールドからの複数選択コンボボックス、
嫌われているのか?情報がなかなか無いですね。
失敗例が参考になるといいなぁと思いつつ、
恥の上塗りをしないうちに失礼します(笑)