• ベストアンサー

TextBoxの入力・表示の判別方法

VBAでTextBoxを入力・表示用兼用にしたProgを作っています。 表示の場合は、TextBox.Textへデータをセットしています。 TextBoxの値が変化した場合は、Changeイベントが発生しますが、 TextBox_change()の処理において、 イベントがキーボード入力で発生したものか、Progの内部セットで発生したものかを判別するのに苦労しています。 適切な判別方法の教えて頂きたくよろしくお願いします。

  • tt246
  • お礼率91% (116/127)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Sheet1にTextBoxを貼り付け シートモジュールに下記2つを作る。(A)(B)とする Private Sub TextBox1_Change() MsgBox "ChangeIEvevt " & TextBox1.Text End Sub Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then MsgBox "Enter " & TextBox1.Text End If End Sub 標準モジュールに下記を作る。(C)とする Sub test01() Worksheets("Sheet1").TextBox1.Text = "aabaa" End Sub ーー (c)を実行した場合Changeイベントが発生。 (B)は発生しない。 Enterキーでテキストボックスの値を取るという約束にして Enterを押すと(B)が発生する。 ーー それで Chaneイベントは1字1字の入力で発生して、余り使えないので、 (B)だけにしてはどうでしょう。 何か文字入力の終わりを捉えるものを決めないといけない。 ーー (B)にTAB押し下げも加える必要が有るかも。 If KeyCode = 9 Then MsgBox "Tab " & TextBox1.Text End If

tt246
質問者

お礼

ありがとうございます。 KeyDownはユニークな考えと思いました。 Progが煩雑にならない工夫をしながら取り入れてみたいと思います。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

そのモジュール(シートやUserForm、またはClass)レベルで共有するフラグを用意すればいいのでは VBEでそのText_Changeイベントの書かれているファイルを開いて 冒頭の変数などを宣言するエリアに dim bFlagProg as Boolean などと定義しておきます TextBox.Textを変更するコード付近で bFlagProg = True TextBox1.Text = "abc" bFlagProg = False といった具合にしておいて Changeイベント側では if bFlagProg then   Exit Sub end if ' キー入力時の処理 といった具合でうまくいきませんか

tt246
質問者

お礼

ありがとうございます。 私も、フラグ方式は各所で使用しています。 この方式で、上手くいくと思います。 bFlagProg = True TextBox1.Text = "abc" bFlagProg = False の部分を関数化してみようと思いました。

関連するQ&A

  • TEXTBOX_CHANGEのイベント抑制

    TEXTBOX_CHANGE イベントでのイベント抑制方法を教えてください。 エクセルのVBAで、ユーザーフォーム内のTEXTBOXの内容を変更した際にイベントが発生しない様にしたいのですが、うまくいきません。 Private Sub TextBox1_Change() Application.EnableEvents = False UserForm1.TextBox1.Text = "" Application.EnableEvents = True UserForm1.TextBox1.SetFocus End Sub  ユーザーフォーム内では Application.EnableEvents  は使えないのかな?? どなたかご教授をお願いします。

  • TextBoxにAと入力したら、Xと表示させるにはどうしたら良いですか?

    質問です。 HTMLのTextBoxにAと入力したとします。(キーボードでAと打った) そのときにTextBoxにはXと表示させたいのですが、 どのようにしたら良いでしょうか? また、それはJavaScriptで可能なのでしょうか? どなたかご教授願います。

  • TextBoxの表示、非表示

    TextBoxの表示、非表示 開発環境:Visual Web Developer 2008 express 言語:Visual Basic 上記開発環境を使いWebアプリケーション開発中です。 現在、入力フォームを作成中ですが、CheckBoxにチェックがあったらTextBoxを表示するようなことをしたいのですが、ASP.NETの記述がわかりません。 VBAでは If CheckBox1.Value = True Then TextBox1.Visible = False のようにかけばできたのですが。。。 初心者なもので単純な質問で申し訳ありませんが、どなたかご教授願います。

  • Access2007 textboxに入力できない。

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

  • VBAのフォームでTextBoxがいっぱいある時

    Microsoft Excel 2000 for VBAのフォーム機能を使用して TextBox?に値が入力したらシートの指定したセルへ値が入るようにしたいんですが、 TextBoxがいっぱいあるため、以下のように非常に長いプログラムになってしまいました。 Private Sub TextBox1_Change() Sheets(sheetname).Cells(1, 横位置).Value = TextBox1.Value End Sub TextBox2~29は繰り返し Private Sub TextBox30_Change() Sheets(sheetname).Cells(30, 横位置).Value = TextBox30.Value End Sub 上手く配列化なんかでまとめる方法がありましたらアドバイスください。

  • Excel VBA の TextBox について

    TextBoxでエンターキー入力時のみイベントを発生させるには どのような方法がありますか?

  • テキストボックスに値を入力し終わったらイベントを発

    エクセル2007を使用しています。 アクセスで言う「更新後処理」のAfterUpdateイベントは エクセルのActiveXコントロールのテキストボックスイベントにはないのでしょうか? 例えば、テキストボックスに「aiu」と入力し終わったらイベントを発生させたいのですが、 Private Sub TextBox1_Change() MsgBox "" End Sub にしすると 「a」を入力した時点で、MsgBox が表示されてしまいます。 テキストボックスに値を入力し終わったらイベントを発生させる方法はありますか? VBE画面でシートイベントを見ても AfterUpdateイベントは見当たりません。 ご回答よろしくお願いします。

  • VBAのTextBox表示について質問します。

    実は、MicrosoftのExcel内にありますVBAを使ってシート内に記載られている内容を Userform内にあるTextBoxに表示させたいと考えています。 UserformにあるTextBoxは、シートのセルに対してTextBoxを1個配置させています。 例えば・・・セルA1に入力されている文字をTextBox1に表示 セルB1に入力されている文字をTextBox2に表示 セルC1に入力されている文字をTextBox3に表示 セルD1に入力されている文字をTextBox4に表示 セルE1に入力されている文字をTextBox5に表示と言う様な感じで表示したいです。 セル表示範囲は、A1~E24までのセルでTextBoxもTextBox24まで存在します。 TextBox1.Text = ThisWorkbook.Sheets("Sheet1").Range("A1") TextBox2.Text = ThisWorkbook.Sheets("Sheet1").Range("B1") TextBox3.Text = ThisWorkbook.Sheets("Sheet1").Range("C1") TextBox4.Text = ThisWorkbook.Sheets("Sheet1").Range("D1") TextBox5.Text = ThisWorkbook.Sheets("Sheet1").Range("E1") TextBox6.Text = ThisWorkbook.Sheets("Sheet1").Range("A2") TextBox7.Text = ThisWorkbook.Sheets("Sheet1").Range("B2") TextBox8.Text = ThisWorkbook.Sheets("Sheet1").Range("C2") TextBox9.Text = ThisWorkbook.Sheets("Sheet1").Range("D2") TextBox10.Text = ThisWorkbook.Sheets("Sheet1").Range("E2") 以降~途中省略 TextBox120.Text = ThisWorkbook.Sheets("Sheet1").Range("E24") と言う様な・・・ 上記の、この様なコードでして行くと事は可能なんですが・・・ もっと短く出来ないでしょうか?

  • EXCEL VBAのユーザーフォームの操作方法について教えていただきたいことがあります

    EXCEL VBAのユーザーフォームの操作方法について教えていただきたいことがあります。 (1)ユーザーフォームにテキストボックスを2つ作る (2)コマンドボタンを1つ作る。 この場合に、コマンドボタンを押すと、セットフォーカスされている方のテキストボックスに「新春」と表示させることはできるのでしょうか。 キーボードは当然セットフォーカスされているテキストボックスに入力されますが それと同じ機能をコマンドボタンにも持たせたいのです。 Private Sub CommandButton1_Click() で TextBox1がセットフォーカスされているならTextBox1に"新春"と入力する TextBox2がセットフォーカスされているならTextBox2に"新春"と入力する というような条件式になるのでしょうか。 色々調べましたが答えが見当たりません。 よろしくお願いいたします。

  • VBAについての質問です。初心者です。

     はじめまして。  VBA初心者です。  よろしければお願いします。  Changeイベントプロシージャを使い  テキストボックス1に  テキストボックス2と3から導き出せる答えを  コマンドボタンを押さずに  数字を入力しただけで表示されるようにしたいのですが。  コマンドボタンを作って、押したとき。  コマンドボタンを作らなくても、  テキストボックス1のところで何かタイピングしたとき。  は表示できるようになったのですが、  2と3に入れただけで  1が表示される  という状態にできません…。  質問内容の説明がわかりにくいと思いますが  補足などもちろん何でもしますので  よろしければご回答お願いします。  現時点で、スペースボタンなど  何かしら1のボックスでタイピングした場合に出る状態は Private Sub TextBox1_Change() TextBox1.Value = TextBox3.Value / TextBox2.Value End Sub  です。

専門家に質問してみよう