- ベストアンサー
アクセスでの
Access2000を使用しています。 基本的なこととは思いますが教えてください。 テキストボックスの値を比べるVBAを組みましたが、 片方は文字列として、もう一方は数字として認識 されてしまうようで同じ値が入っているのに違う値 として認識されてしまいます。 (ブレークポイントを設定して中の値をみてみると me.txテスト1.value = "1" me.txテスト2.value = 1 となり異なる値と認識去れてしまいます) 書式設定はどちらのコントロールも何もしてありませんし、共に非連結 のテキストボックスです。 どのようにすればこれらの値が同じものとして認識してくれるでしょうか? お願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
> やりたいことは > > Me.テスト1.value = Me.テスト2.value かつ > Me.テスト2.value ≠ null のときに「よいです」 > > というメッセージを出すものです。 If Me.テスト1.Value = Me.テスト2.Value Then Call MsgBox("よいです") End If でOKです。IsNull(Me.テスト2.Value) = True のとき、 「Me.テスト1.Value = Me.テスト2.Value」はTrueでもFalseでもなく、Nullと評価されます。(値が入力されていないときの処理が必要であれば、別途記述が必要) Me.txテスト1.ValueがStringと評価されている、とのことですので、値を代入する部分に何らかの問題があるのだと思います。(前後にスペースがある、全角の数字が入っている、等) > Nullはvariant型のみ使用できるようですがどのように > 記述すればよいのでしょうか? Null値の確認は前述のIsNull関数でできます。また、文字列として処理する場合、&演算子で長さゼロの文字列と結合すれば、文字列となりますので、 Len("" & Me.txテスト1.Value) がゼロ/非ゼロかで値が入力されていることを確認できます。 > また、フォーム上に非連結のテキストボックスを作成 > した場合、それはvariant型になるのでしょうか? そういう仕様です。 TextプロパティならVariantではなく、String型ですが、こちらは、コントロールにSetfocusしていないと使用できません。
その他の回答 (5)
- taknt
- ベストアンサー率19% (1556/7783)
テストしてみたところ If Me.txテスト1.Value = Me.txテスト2.Value And Me.txテスト2.Value <> "" Then MsgBox ("よい") これで OKだと思います。 私が最初に書いたのは ちょっと記述ミスと、不具合がありました。
お礼
わざわざテストまでしていただきまして 感謝しております。 Nullにばかりこだわりすぎて、""て記述することも できることを忘れていました。 発展途上にある時というのは得てして基本的なこと を忘れてしまいがちですよね。 どうもありがとうございました。
#1さんWrote > dim a,b string これだと、b はStringですが、aはVariantです。 バグの原因となる場合もありますので、要注意です。 (VB.NETでは、この記述でa, bどちらもStringになりますが) 将来的にVBAの言語仕様が変わることもあるかもしれませんが、現時点での注意点ということで、ご参考まで・・・。
補足
ありがとうございます。 やりたいことは Me.テスト1.value = Me.テスト2.value かつ Me.テスト2.value ≠ null のときに「よいです」 というメッセージを出すものです。 Nullはvariant型のみ使用できるようですがどのように 記述すればよいのでしょうか? また、フォーム上に非連結のテキストボックスを作成 した場合、それはvariant型になるのでしょうか? あわせて教えていただければと思います。 よろしくお願いいたします。
- kmor
- ベストアンサー率27% (225/825)
Forms!フォーム1!txテスト1 というふうに指定するといいと思いますが。
補足
ありがとうございます。 同一フォーム内のイベントプロシージャ内に記述しておりますが、 「me.~」ではいけないのでしょうか? その辺の規則性を詳しく理解しておりませんので、そのような決まり があるようでしたら教えていただけますでしょうか? よろしくお願いいたします。
- taknt
- ベストアンサー率19% (1556/7783)
dim a,b string a=me.txテスト1.value b=me.txテスト2.value と 文字列に代入してあげれば 両方とも文字列になると思います。
お礼
そのようなことで直るんですね。 それにしても同じように作成しているのに ともに数値として認識してくれるものもある のは解せません。 奥が深いのか単にわかってないだけなのか・・・。 いずれにしても、どうもありがとうございました。
- wildcard
- ベストアンサー率54% (54/100)
文字列として扱うなら、下記ではダメでしょうか? cstr(me.txテスト1.value) cstr(me.txテスト2.value) 数値データならcstrの箇所をclngやcintにすれば、良いと思うのですが…
お礼
簡単なことだったようですが 初心者のためお許しください。 どうもありがとうございました。
お礼
細かな説明どうもありがとうございます。 「みえなものがみえてきた」心境です。 ただ、やはり stringと認識するかintegerと認識するかは アクセスのきまぐれなのでしょうか? (前後に不正なデータは入れてないのです・・・) まだまだ自分のものにするには時間がかかりそうです。 ありがとうございました。