TextとValueの違い?

このQ&Aのポイント
  • Access2010でのフォームにおけるテキストボックスのKeyDownイベントとExitイベントの違いについて説明します。
  • KeyDownイベントでは、特定のキーが押されたときに実行されるコードを記述します。
  • 一方、Exitイベントでは、テキストボックスからフォーカスが外れたときに実行されるコードを記述します。
回答を見る
  • ベストアンサー

TextとValueの違い?

Access2010です。 フォームに有る数値入力のためのテキストボックスのKeyDownイベントに、入力後の値がゼロかNullか空白なら再入力させるようにコードを記述しましたがこれでは「型が一致しません」のエラーになります。 -----KeyDownイベントの内容 ここから----- Select Case Keycode Case 13 If IsNull(Me.数量.Text) Or Me.数量.Text = "" Or Me.数量.Text = 0 Then MsgBox ("数量が不正です"), vbCritical Keycode = 0 End If End Select -----KeyDownイベントの内容 ここまで----- でも、Exitイベントに同じような内容を記述した場合は希望通りの動きをします。 ※上記コードからSelectとKeycode=0を外し、TextをValueに変更。 私が何かを理解できていないのだと思いますが、何が違うのでしょう?

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

  • ベストアンサー
回答No.2

× Me.数量.Text = 0 〇 Me.数量.Text = "0" Private Sub テキスト_数量_Exit(Cancel As Integer)   Cancel = CBool(Val(テキスト_数量 & "") = 0)   If Cancel Then     Warning "数量が不正です!"   End If End Sub Public Sub Message(ByVal Msg As String)   MsgBox Msg, vbInformation, " お知らせ" End Sub Public Sub Warning(ByVal Msg As String)   MsgBox Msg, vbExclamation, " 警告" End Sub PS、一般的な商用ソフトではかかる入力後チェック機能はなぜないのか? は、考える価値があると思いますよ。

suteaddor
質問者

お礼

有難うございます。 サンプルのコードが素晴らしいです。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

> Me.数量.Text = 0 Textは文字通り文字列なので、 Me.数量.Text = "0"

suteaddor
質問者

お礼

有難うございます。

関連するQ&A

  • 新規レコードへ移動しない

    Access2010を使用しています。 サブフォームからメインフォームの「登録」ボタンプロシージャをCallした時、メイン・サブフォーム共に新規レコードへ移動しなくて困っています。 具体的には、サブフォームにフォーカスがある時に「F12」を押すと画面の入力項目の内容刃そのままでメインフォームの「注文番号」テキストボックスにフォーカスが移動します。 メインフォームにフォーカスがあるか、マウスで「F12」をクリックすると画面の入力項目がクリアされて新規レコードへ移動します。 コードは以下の内容が記述してあります。 ーーーーーサブフォーム----- Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case 123 Call Me.Parent.Form_KeyDown(KeyCode, Shift) KeyCode = 0 End Select End Sub -----メインフォーム----- Public Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case 123 Call 登録_Click KeyCode = 0 End Select End Sub Private Sub 登録_Click() DoCmd.GoToRecord , , acNewRec Me.注文番号.SetFocus End Sub

  • Keydownイベントについて

    VB6.0について質問です。 FormでKeydownイベントが動きません。 どのような原因が考えられますか? コードは以下のように記述しています。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyF8 cmd_F8.Value = True Case vbKeyF9 cmd_close.Value = True End Select End Sub

  • タブキー押下時のイベントをひろいたい。

    テキストボックスにフォーカスがあり、TABキーが押された時のイベントをひろいたいのですが、KeyPressもKeyDownもイベントが発生しません。 (If KeyCode = vbKeyTab Then  MsgBox "タブキー" End If  If KeyAscii = vbKeyTab Then ~ のようなコードを記述してもメッセージが表示されない) ヘルプにはKeyDownでは発生しないという記述がありますが、KeyPressではイベントがひろえるようなことが書いてあるのにひろえないので困っています。 なにかよい方法はありませんでしょうか。 わかりにくい説明で申し訳ありませんが困ってます。 宜しくお願いします。

  • F2+Ctrl押下時のイベント記述方法

    VB6を使用しています。 F2+Ctrlを同時に押下した場合の処理の記述がうまくいきません。 Form_KeyDownイベントで下記のように記述しようと考えたのですが、KeyCodeに17が入ってしまいうまくいきません。 アドバイスをお願いします。 ----------------------- select case KeyCode  case vbKeyF2   If Shift = 2 Then   'Ctrl+F2押下時   ***処理   End If ※他のファンクションボタンの処理もあるのでcase文にしています。

  • KeyDownイベントで数字以外は発生しません。なぜでしょうか。

    KeyDownイベントで数字以外は発生しません。なぜでしょうか。 電卓を作っているのですが、キーボードからの対応をしているさなか大きな壁に当たりました。 フォームのKeyDownイベントでキーボードからの入力をキャッチする。 数字や演算、エンターキー。 フォームには、電卓を作るのに必要なボタンなどの配置はしてあります。 数字を表示する部分はLabel1にしています。 試験的に下記のソースで実験したところ、テンキーの数字以外、例えば演算キーをキーボードから入力すると、下記のソース通りならば、○算と表示されるはずです。しかし、なぜか数字と表示されます。 つまり、演算キーを押したにも関わらず、数字が入力されたとして処理されたということです。 なぜでしょうか。 そして、試験的にそれぞれが入力成功した時はLabelに表示されるようにしました。 Private Sub Form6_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown //↓エンターキーが押されたとき If e.KeyCode = Keys.Enter Then Label1.Text = "Enter" //↓演算キー及び点が入力されたとき ElseIf &H6A <= e.KeyCode <= &H6F Then Select Case e.KeyCode Case &H6A Label1.Text = "乗算" Case &H6B Label1.Text = "加算" Case &H6D Label1.Text = "減算" Case &H6E Label1.Text = "小数点" Case &H6F Label1.Text = "除算" End Select End If //↓delキーが押されたときの場合 If e.KeyCode = Keys.Delete Then Label1.Text = "Del" End If // ↓は数字1から9までが対象に入ります。 If &H60 <= e.KeyCode <= &H69 Then   Label1.Text = "数字" End If End Sub keycode表はマイクロソフトのキーコード定数を見て作りました。 僕がお伺いしたいのは、これらすべてを正常に対応させたいわけです。 数字、演算キー、その他のキーボード入力が正常にできるようにしたいのですが、どうもうまくできません。 なせかずべて数字ほうに行ってしまいます。これでは話にならないので、対処法はありませんか? 環境は Win7 Ultimate 64bit Visual Studio 2010 (VB) です。 何卒、よろしくお願い申し上げます。

  • VB6.0 KeyDownイベントの対応

    VB6.0を使ってプログラム中ですが、下記の  Command10_KeyDown で、複合キー「 Ctrl + ↓」 だとイベント KeyDown を受信できるのですが、単純な キー「↓」だと、イベント KeyDown を受信でず、他のボタンにフォーカスが移ってしまいます。 Comman10_GotFocus に何か対応策を入れて、単純な キー「↓」のイベント KeyDown を受信する方法はないでしょうか? Private Sub Command10_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 40 Then execsub001() End If End Sub Private Sub Commnad10_Click() execsub001() End Sub Private Sub Comman10_GotFocus() 上記問題への対応策を此処に記述したい End If Private Sub execsub110() 内容は省略 End Sub

  • 特定のキーを入力すると、visible=falseからtrueになるよ

    特定のキーを入力すると、visible=falseからtrueになるようにコーディングしたいのですがうまくいきません。次のようにalt+F12でFrameを表示させたいのですが全く反応しません。何故でしょう。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyF12 If Shift = vbAltMask Then Frame2.Visible = True End If End Select End Sub アドバイス願いますm(_ _)m

  • エクセルBVAのフォーム式のKeyCode~の意味がわかりません

    エクセルBVAです Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyDown Then KeyCode = 0 End If End Sub ヘルプをみると キーを押したとき、およびキーを離したときに続いて発生します。KeyDown イベントはキーを押すと発生し、KeyUp イベントはキーを離すと発生します。 キーってenterのことですかね? なら、 If KeyCode = vbKeyDown Then KeyCode = 0 End If で、KeyCodeを0ににするってどういうことでしょうか?

  • ファンクションキーで命令を実行させたい

    よろしくお願いします。 ACCESS2000を使用しています。 ファンクションキーで命令を実行したく、下記のコマンドを書いて実行しましたが動作しません。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Me.メインsub.Form.SetFocus Select Case KeyCode Case vbKeyF5 Me.btn帰社.SetFocus Call btn帰社_Click Case Else KeyCode = 0 End Select End Sub Private Sub Form_Load() Me.KeyPreview = True End Sub フォームプロパティのキーボードイベント取得は「はい」で設定してあります。 2週間位、いろいろやってみましたがうまくいきません。はまっています。回答・ヒントをよろしくお願いします。

  • テキストボックスでMAX文字数を入れたらTABで飛びたい

    テキストボックスで、2バイト入力されたらTABで次のテキストボックス に移動すると言うイベントを4つのテキストボックスのKeyUpイベント に記述しました。 サンプルとして一つ書きます。 Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer) If Len(Text1.Text) = 2 Then SendKeys "{TAB}" KeyCode = 0 End If End Sub 上記のソースでプログラムを実行し、Text1に2バイト入力されると、 次のテキストボックス(Text2)に移動します。 更にText2,Text3に、2バイト入力しますと、カーソルがText4に来ます。 ここで、マウスでText1にカーソルを持っていき、値を変更すると、 Text2に移動するはずが、Text4にカーソルが移動します。 なぜでしょうか?? くだらない質問ですが、よろしくお願いします。

専門家に質問してみよう