2009-03-31 3 views
5

AccessでVBAコードを使用すると、非常に特定の条件が満たされたときに、整数を要求するInputBoxがポップアップ表示されます。ここまでは順調ですね。VBA Not IsNull

Private Sub Command10_Click() 

    If Not IsNull(mrf) Then 
     If min <> max Then 
      If qty <= min Then 
       mrf = GetParamValue 
      End If 
     End If 
    End If 
    End Sub 

問題は、Not IsNullが無視されるように見えることです。値がすでに存在していない限り、値を入力するように要求したいと思います。これは、最小<>最大値と最小値0,=最小条件が満たされている限り、InputBoxからの発火を維持します。私はここで何が欠けていますか?

+0

私の問題が起こっているようですg他の場所から。 – Terry

答えて

11

mrfがVariant型である場合、それはNull、当初Emptyではありません。あなたはそのためIsEmpty()機能を使用する必要があります。希望。

+1

これで解決しました! +1の明日、もっと票がある場合 – Terry

+1

別のオプションは、mrfをnullに初期化することです。私は彼が彼の変数(min、max、mrf)を宣言していないことに気付きました。これは一般に悪い考えです。 "Option Explicit"をオンにすると、このようなロジックのバグを避けることができます。 – JohnFx

4

いいえ、Not IsNullは完全に動作しています。

覚えておいてください。IsNullは、渡されたパラメータがnullの場合はTRUEを返し、それ以外の場合はfalseを返します。

あなた「ではないのIsNull(MRF)が続いた場合は、」ステートメントは、MRFが値を持っているとき、その手段は、その後、あなたが内部のコードを処理しているされているもの「MRFがnullでない場合は、」

として英語に翻訳ifステートメント。 mrfがnullのときに内部コードを起動させたい場合は、NOTをステートメントから削除する必要があります。

+0

LOL私は瞬間がありました。ありがとう。 – Terry

1

私の推測では、mrfは空でも他のものであってもnullではないと思います。 VBAの土地ではnullとは異なるNothingでもかまいません(私は思います)。デバッガでコードを実行し、mrfの値を調べてみてください。どのようなmrfであるかに応じて、異なる検査を行うことができます(検査len(mrf)かどうかisNothing(mrf)か整数か、それが0に初期化されていればmrf <> 0となります)。役立ちます!

+0

+1明日も、ありがとう! – Terry