Microsoft Access 掲示板

ファームにある複数のコンボボックスでフィルター / 14

15 コメント
views
4 フォロー
14
hiroton 2024/02/19 (月) 16:05:18 bec36@f966d

NULL比較演算子による演算ができません

詳しいことはかなり複雑なので、一通り情報に目を通してみてください
https://www.google.com/search?q=VBA NULL 比較

本来、Nullの可能性がある場合の比較は、特別な処理・特別な判定をする必要がありますが、「VBAにおいてはNullを比較演算に使うと全てFalseとして扱われる」という特徴があります。(コードの実装としてこれを活かすのは本来よろしくありません)

つまり、

Me.[cb1].Value <> Null

とすると、コンボボックスの値に関わらず常にFalseの処理が為されるため、意図しない動作をします

逆に、<>""の判定においてコンボボックスの値がNullの場合は

Null <> "" '//本来やってはいけない演算

Falseを返して欲しいときにはFalseだった場合の処理がされるので表面上は問題なく動作しているというわけです


今回のような場合であれば、コンボボックスの値をチェックしてNull比較をしないようにするのが正解で、事前にコンボボックスの値をチェックしてコンボボックスの値がNullだったら""とみなすようにします。たとえばNz関数を使って

Nz 関数

Nz(Me.[cb1].Value, "") <> ""

蛇足
Nullなら空文字とみなしたいなら「"" & Me!cb1 <> ""」くらいの手抜きで済ませちゃうんですけどね

通報 ...