• ベストアンサー

アクセスでの

Access2000を使用しています。 基本的なこととは思いますが教えてください。 テキストボックスの値を比べるVBAを組みましたが、 片方は文字列として、もう一方は数字として認識 されてしまうようで同じ値が入っているのに違う値 として認識されてしまいます。 (ブレークポイントを設定して中の値をみてみると me.txテスト1.value = "1" me.txテスト2.value = 1 となり異なる値と認識去れてしまいます) 書式設定はどちらのコントロールも何もしてありませんし、共に非連結 のテキストボックスです。 どのようにすればこれらの値が同じものとして認識してくれるでしょうか? お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#4564
noname#4564
回答No.5

> やりたいことは > > 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していないと使用できません。

enako
質問者

お礼

細かな説明どうもありがとうございます。 「みえなものがみえてきた」心境です。 ただ、やはり stringと認識するかintegerと認識するかは アクセスのきまぐれなのでしょうか? (前後に不正なデータは入れてないのです・・・) まだまだ自分のものにするには時間がかかりそうです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.6

テストしてみたところ If Me.txテスト1.Value = Me.txテスト2.Value And Me.txテスト2.Value <> "" Then MsgBox ("よい") これで OKだと思います。 私が最初に書いたのは ちょっと記述ミスと、不具合がありました。

enako
質問者

お礼

わざわざテストまでしていただきまして 感謝しております。 Nullにばかりこだわりすぎて、""て記述することも できることを忘れていました。 発展途上にある時というのは得てして基本的なこと を忘れてしまいがちですよね。 どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#4564
noname#4564
回答No.4

#1さんWrote > dim a,b string これだと、b はStringですが、aはVariantです。 バグの原因となる場合もありますので、要注意です。 (VB.NETでは、この記述でa, bどちらもStringになりますが) 将来的にVBAの言語仕様が変わることもあるかもしれませんが、現時点での注意点ということで、ご参考まで・・・。

enako
質問者

補足

ありがとうございます。 やりたいことは Me.テスト1.value = Me.テスト2.value かつ Me.テスト2.value ≠ null のときに「よいです」 というメッセージを出すものです。 Nullはvariant型のみ使用できるようですがどのように 記述すればよいのでしょうか?  また、フォーム上に非連結のテキストボックスを作成 した場合、それはvariant型になるのでしょうか? あわせて教えていただければと思います。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • kmor
  • ベストアンサー率27% (225/825)
回答No.3

Forms!フォーム1!txテスト1 というふうに指定するといいと思いますが。

enako
質問者

補足

ありがとうございます。 同一フォーム内のイベントプロシージャ内に記述しておりますが、 「me.~」ではいけないのでしょうか? その辺の規則性を詳しく理解しておりませんので、そのような決まり があるようでしたら教えていただけますでしょうか? よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.2

dim a,b string a=me.txテスト1.value b=me.txテスト2.value と 文字列に代入してあげれば 両方とも文字列になると思います。

enako
質問者

お礼

そのようなことで直るんですね。 それにしても同じように作成しているのに ともに数値として認識してくれるものもある のは解せません。 奥が深いのか単にわかってないだけなのか・・・。 いずれにしても、どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • wildcard
  • ベストアンサー率54% (54/100)
回答No.1

文字列として扱うなら、下記ではダメでしょうか? cstr(me.txテスト1.value) cstr(me.txテスト2.value) 数値データならcstrの箇所をclngやcintにすれば、良いと思うのですが…

enako
質問者

お礼

簡単なことだったようですが 初心者のためお許しください。 どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • [Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには

    Accessにおいて。 帳票フォームの"詳細"に非連結のコントロール(例:テキストボックス)を配置し、それぞれ別々の値を持たせることは可能なのでしょうか? 例えば。 VBAにおいて、カレントレコードのAという値とBという値を計算し、その値を非連結のテキストボックスに挿入したとします。 単票フォームであれば、問題なくテキストボックスには計算後の値が表示されるわけですが…… 帳票フォームの場合では、"規定値"に計算式を入れたときと同様、先頭の値と同じものが連続するテキストボックスに表示されてしまいます。 これを回避し、計算後のデータを連続するテキストボックスにそれぞれの値として表示させるには、どのようにすればよいのでしょうか? もちろん、連結させたコントロールを使用すれば、問題はないのですが…… 状況によっては、これが行えた方が便利かと思い、質問させていただきます。 「帳票フォームでは不可能である」といった回答でもかまいません。 どうぞよろしくお願いいたします。

  • ACCESS フォームの詳細セクションのコントロールを全て非連結で作ろ

    ACCESS フォームの詳細セクションのコントロールを全て非連結で作ろうとしています。 レコードセットに連結していれば、詳細セクションにはレコード件数分の行が自動的に生成され、データのセットも勝手に行われますが、非連結なので、自分で(VBAで)制御する方法を知りたいです。 行にはテキストボックスだけでなくコマンドボタンやチェックボックスも配置します。 ・VBAで行を作ってそこのテキストボックスに任意の値をセットする方法 ・VBAで行にあるオブジェクトの値等を参照する方法 以上を教えていただけませんでしょうか? (そのようなサイトがあれば、それも教えていただきたいです)

  • アクセス コンロール名が勝手に変わります

    フォームにテキストボックスをぐいってやって、名前を「テキスト.1」にしました。 そして、VBAで、 「me.テキスト」と打つと、 me.テキスト_1に変わっています。 「.」と名前を付けたのに、勝手に「_」に変わっています。 本当の名前(コントロール名は)テキスト.1だけど、 Private Sub Form_Load() Me.テキスト_1.Value = "aaa" End Sub を実行したら問題なく出来ました。 どういうことでしょうか?勝手に名前が変わるようになってるのですか?

  • Access2007 textboxに入力できない。

    Access2007 textboxに入力できない。 非連結のフォーム上に、非連結のテキストボックスを張り付けたのですが、入力ができずに困っています。 カーソルは来ていて、試しにVBAで値を入れてみると表示はされるのですが、プロテクトが掛っているように、入力ができません。 テキストボックスの Enabled=true Locked=false になっています。 どのあたりを見ればよいのかもわからず、苦慮しております。 よろしくお願いいたします。

  • PickFolder アウトルックとアクセス連携

    アクセスのフォームに テキストボックスとコマンドボタンを置きました。 VBAでoutlookに参照設定をして、 Private Sub コマンド2_Click() Dim myNaSp As NameSpace Set myNaSp = GetNamespace("MAPI") Me.テキスト0.Value = myNaSp.PickFolder Set myNaSp = Nothing End Sub としました。 テキストボックスには、 Private Sub テキスト0_AfterUpdate() MsgBox Me.テキスト0.Value End Sub としました。 しかしoutlookのフォルダ名をPickFolderでテキストボックスに入れても テキストボックスの更新後処理のイベントは発動しません。 しかしテキストボックスにはちゃんとフォルダ名が入っています。 Private Sub テキスト0_Change() MsgBox Me.テキスト0.Value End Sub にしても同じです。 Private Sub コマンド2_Click() Me.テキスト0.Value = "aaa" End Sub にしてコマンドボタンをクリックすると、 Private Sub テキスト0_Change() MsgBox Me.テキスト0.Value End Sub は、発動します。 PickFolderでフォルダ名を選択して値をテキストボックスに入れても イベントを発動させる方法を教えてください。

  • ACCESS97の帳票フォームで複数コントロールを指定したい

    こんにちは。ACCESS97で帳票フォームを作成し、詳細にチェックボックス(連結コントロール)とテキストボックスを作成しました。フォームフッタ-に「全てチェック」ボタンをつけ、全てのチェックボックスがチェックされるようにしたいのですが、どのようにすればよいのでしょうか。 Me.チェック.value とすると、一番上のレコードしか変わりません。全てのチェックボックスを一括で変えるか、配列になっているのならばループで回して変えたいのですが。 Me.チェック(1).value のように書いても「型が一致しない」とエラーになってしまいます。 書き方が分からないので教えてください。どうか宜しくお願いします。

  • Accessのコントロールの数え方

    Access 2003のコントロールについてお教えください。 フォーム1というフォームにチェックボックスがいくつも配置されています。 チェックボックスがいくつ配置されているか知る方法はあるのでしょうか? また、いくつのチェックボックスにチェックが入っているか知る方法はあるでしょうか? ネットで検索したところ、下記のコードが約にたつような気がするのですが、どうやって活用すればよいのかがわかりません・・・・ For Each ctl In Me.Controls With ctl If .ControlType = acTextBox Then 'コントロールの種類がテキストボックスなら値をNull(空)に設定 .Value = Null End If End With Next ctl わかりでしたらお教えください。よろしくお願いします。

  • Access フォーム上でのテキストボックスとテーブルの連結

    フォームヴィザードからフォームを作成すると、 テキストボックスと指定したテーブルを連結させることができるのですが、デザインビューでそれをするときに、テキストボックスのプロパティのコントロールソースにテーブル名を入れれば連結できるのかと思いきや、うまく表示されません。どこを設定すればテキストボックスとテーブルを連結できるのでしょうか?

  • ASP.Net GridView 非連結フィールド

    大変お世話になっております。 GirdView 3番目のセルをテンプレートフィールドにして そこに非連結のテキストボックスを設置しております。 各行の非連結のテキストボックスに数字を入力して ボタンクリックにより、その値を取得したいのですが、 下記のプログラムでは、空白が返ってきてしまいます。 非連結のテキストボックスの値を取得するには下記では ダメなのでしょうか? ご指摘などございましたら、何卒ご助言いただけますと 嬉しい限りでございます。   For I = 0 To Me.GridView1.Rows.Count - 1     MsgBox(DirectCast(Me.GridView1.Rows(I).Controls(2), DataControlFieldCell).Text)   Next

  • MS ACCESSフォームで通貨の計算

    ACCESSのフォームで通貨の合計を求めようと思っています。 通貨の単位が変更になることがあるので、書式をテキスト型にして(IDR1,000,000.00などと記入)、Val関数で数値部分だけ取り出そうと考えました。 金額のテキストボックス名: Declared_Value_2 合計のテキストボックス名: T_Declared_Value_2     合計のコントロールソース: =Sum(Val([Declared_Value_2])) としてみたのですが#Errorが出ます。 これではできないのでしょうか? ちなみに、通常はドルの計算を行っていて、たまに他の通貨を入力する必要があるので(上記のインドネシアルピーのような)ドルとはテキストボックスを分けることにしました。 スマートな方法ではないですが、VBAや複雑な関数の知識がないので。。。 いい方法がありましたらアドバイス頂ければ幸いです。

専門家に質問してみよう