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

こんばんは!よろしくお願いします。

新規に作成したフォームにコンボボックスを設置して

Sub test1()
If Form_フォーム1.コンボ0.Value = Null Then
Form_フォーム1.コンボ0.Value = ""
End If
MsgBox Form_フォーム1.コンボ0.Value
End Sub

Sub test2()
If IsNull(Form_フォーム1.コンボ0.Value) = True Then
Form_フォーム1.コンボ0.Value = ""
End If
MsgBox Form_フォーム1.コンボ0.Value
End Sub

上記2つのサンプルを実行した時に、
test1のほうだけ
実行時エラー94
Nullの使い方が不正です。
となります。

ウォッチウインドウで見ていくと、
「オブジェクト変数、またはwithブロック変数が設定されていません。」
となりますが
「If Form_フォーム1.コンボ0.Value = Null Then」
を通過したら
Nullになります。

何が起こっているのでしょうか?

A 回答 (1件)

Nullはちょっと特殊な値で、「=」で比較を行うと、数値や文字列とは


異なる結果になります。

つまり、下記のように、Nullを「=」演算子で比較すると、変数の値が
何であっても、評価結果は「Null」になる、という性質を持っています。
(イミディエイト ウィンドウ(Ctrl+Gキーで表示可能)で、コンボボックス
 に適当な値を入れて「?IsNull(Form_フォーム1.コンボ0.Value=Null)」
 を表示させると、結果を実際に確認できます)

1)変数「a」が「1」(数値)の場合の「If a = 1」:
 True(-1)
2)変数「a」が「Test」(文字列)の場合の「If a = "Test"」:
 True(-1)
3)変数「a」が「Null」の場合の「If a = Null」:
 Null
4)変数「a」が「1」の場合の「If a = Null」:
 Null
5)変数「a」が「Test」の場合の「If a = Null」:
 Null

※イメージとしては「0には何を掛けても0(3*0=0)」に近いかも?


このため、test1ではIf文の条件が不成立の扱いとなるため、コンボ0への
代入は行われないことになります。

で、MsgBox関数では、第1引数は「文字列式」である必要がありますので、
If文が不成立でコンボ0への「""」の代入が行われていないtest1では
第1引数がNullのままのため、実行時エラーが発生した、ということです。
    • good
    • 0
この回答へのお礼

なるほど!大変わかりやすいです!
ありがとうございます。

お礼日時:2009/04/04 10:39

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