- ベストアンサー
VBAでのNull判定について
- Accessでテキストボックスの値をテーブルへ書き込むVBAを作成しているのですが、Null判定がうまくいきません。
- Null判定を行う部分で、データがあるにも関わらず、処理が続行されたり、Null判定結果が起動するたびに変わります。
- どこが間違っているかまったくわかりません、アドバイスを頂けましたら幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> どうやら、2010から、テキストボックスのNullの扱いが変わったようです。 えっ、そうなんですか。当方、Access2010で今まで IsNull で判定を行ってきましたが、問題になったことはないです。 確認するために、サンプルを作成して実験してみましたが、"" が入るという現象は再現できませんでした。 ファイル形式は、Accdb と MDB で試してみましたが、どちらもフォームを開いた直後は Null でした。 環境依存の問題なのかな。それとも、旧バージョンのファイルからアップデートしたらでるのだろうか。 ちなみにテストした環境は、 Windows8.1 64bit Access2010 32bit 複数の同じ症状と報告があるということは、 IsNullを、Nz([フィールド],"")="" に変更したほうがよさそうですね。
その他の回答 (2)
- hatena1989
- ベストアンサー率87% (378/433)
テキストボックスが非連結なら開いた直後はNullのはずです。 ただし、「規定値」プロパティが設定してあればその値になります。 非連結(コントロールソースに何も設定していない)で、規定値も何も設定してないのであれば、Null のはずです。 開く時、読み込み時、アクティブ時、レコード移動時などでテキストボックスに代入するようなマクロやVBAは設定してないですか。 Null判定に失敗した時、 Debug.Print "プランID["; Me.txtPid & "]" Debug.Print "プラン名[" & Me!txtPName & "]" Debug.Print "開始日[" & Me!txtPsdate & "]" Debug.Print "終了日[" & Me!txtPedate & "]" によるイミディエイトの出力はどうなってますか。
お礼
hatena1989様 たびたびの回答有難うございます。 >開く時、読み込み時、アクティブ時、レコード移動時などでテキストボックスに代入するようなマクロやVBAは設定してないですか。 フォームを開くときにDB接続は確認してますが、他はデータ登録用のプロジージャ(上のソース)と、データをすべてクリアするプロジージャーは何もありません。 Null判定に失敗した時、 すべての値が[]です。 自分なりに調べていたら、下記サイトを発見しました。 どうやら、2010から、テキストボックスのNullの扱いが変わったようです。 Access2010でテキストボックスにnullを設定する方法 http://t-yumi.jp/gengo/access/20110606100120.html Access2010でテキストボックスを使う場合、Null値は要注意 http://infith.com/system/access/access2010_textbox_null/ 2010からの仕様らしいですが、なんかすっきりしません。 仕様なら、通ったり通らなかったりするのだけは辞めてほしいです。。。
- hatena1989
- ベストアンサー率87% (378/433)
各テキストボックスは非連結ですか、連結ですか。 連結の場合、連結しているフィールドの「値要求」「空文字列の許可」の設定はどうなってますか。 設定によっては、Null ではなく 空文字列("")が格納される場合もあります。 Null と 空文字列 は見た目では区別がつきません。また、半角空白や全角空白が入っていないか確認してますか。 非連結でも通常は未入力はNullですが、VBAやマクロで""を代入するとNullではなくなります。 そのあたりをまずは確認してください。 Null、空文字列、スペースが混在する可能性があるなら、下記でチェックしてください。 If Trim(Nz(Me.txtPid,"")) Then 本来はそういうことがないように設計するべきですが。
お礼
hatena1989様 回答ありがとうございます。 テキストボックスは、非連結です。 フォームを開いた直後から、判定が成功したり失敗したりいたします、フォームを開いたばかりですので、本来テキストボックスには[””]も入力されていないのではかと、考えておりました。 >If Trim(Nz(Me.txtPid,"")) Then Debug.prinntoの結果から、空白文字は入ってません。 ””、Nullのどちらかだと思います。 >本来はそういうことがないように設計するべきですが。 現在勉強中のため、プロの方のご意見、非常に参考になりました。 ありがとうございます。 ちなみに、当初の判定は,「if テキストボックス = "" then」としておりましたが、いろんなサイトを見ていると、Null判定は、ISNull(テキストボックス)と記載がありましたので、変更しました。 ただ、フォームを開いたばかりの、テキストボックスにNull以外の””文字が入っているとなると、Nullと””で判定をしないといけないのではと考えております。 上記の2つの判定を簡潔に書く方法をアドバイス頂けましたら幸いです。
お礼
hatena1989様 そうですか、2010使ってこられた方でも、この症状は初めてなんですね? なぜ、今回発生しているのかまったくわかりませんが、他でも発生している症状のようなので、あきらめます。 親切に、アドバイス頂きありがとうございました。