
テキストボックスにデータ入力後エンターキーの押下でイベントに入りたいのですが、下記のコーディングで[通過]メッセージが表示されません。英数字は通過しますが、エンターキーは動作停止します。
これと全く同じコーディングでVB6は正しく動きます。(ただし、Pvate Sub text1_KeyPress(KeyAscii As Integer)に変更してます。)
<コーディング>
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Msgbox "通過"
If KeyAscii = vbKeyReturn Then
KeyAscii = 0
End If
End Sub
これが出来ると、そのつどキーボードから手を離さずに済むので作業効率がグンとあがります。どうかよろしくご教示ください。Excel2003SP3
No.4ベストアンサー
- 回答日時:
こんにちは。
>ご指摘のオブジェクトとプロシージャは間違いないことを確認しています。(TextBox1,keyPress)コードのロジックはこれ以上簡単に書きようがないほど単純明快です。
>Excelで実際にこのコードを実行していただけませんか。
ご自身のコードが間違いがないと思い込んでいられるから、そういう発言をされるのだと思いますが、ここでのお話の前提は、あくまでも、VBAです。VB6ではありません。
私が、期待通りの反応を示さないので、「実際にこのコードを実行してください」とおっしゃっているようですが、はっきり言えば、その最初のコードは、VBAでは間違っています。それに気がついてください。
質問のコードのままのコードでは、Enter キーのイベントは、取れないのです。別にPCの故障でもソフトの問題でもないし、こちらが試していないわけでもありません。
Visual Basic とVBAは、細かい点で違います。
VBAのこの種のイベントの KeyAscii では、VB6 で取れる、EnterキーのKeyAsciiの 「13」 は、取れません。 KeyAscii は、MSForms.ReturnIntegerとなって、Integer ではありません。
だから、私は、その代わりとして、KeyDown イベントを使えばよいとしているわけなのです。
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
MsgBox "Enterキーが入りました", 64
'KeyCode =0
End If
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
MsgBox "通過"
End Sub
Wendy02様 このたびは私のトラブルに関わっていただき、多大なご迷惑をおかけしました。ありがとうございます。4回目に書いていただいたコードできちんと正しい動きをします。重ねて心から感謝申し上げます。さて、これだけご親切にお教えいただいておきながらまことに無礼なことを申し上げますが、私の確認のお願いに大変ご立腹のご様子。とまどっております。私の疑問はなぜ4回もやりとりしなければ
KeyPressではなく、KeyDownだと教えていただけないのか不思議だということです。しかも最初の投稿でこの話はVBAだと断ってあります。
お教えいただいたKeyPressの件はその1回目でおわかりのはずではないですか。1回目~3回目はずいぶん横道にそれています。いきなり4回目で「だからKeyDownイベントを使えばよいとしている」(原文のまま)は教えを乞う立場の私でもおかしな話だと思います。Wendy02様は相当優秀かつ有能な方だとお見受けいたします。今後、素人には丁寧にお教えくださいますように。ご無礼をお許しください。
No.3
- 回答日時:
こんにちは。
>私の期待とは異なり、そもそも1200 + EnterでIf文まで来ません。
それは、もしかしたら……。
私は、VB6 からの話でしたので、UserForm 上でと思いましたが、それはどちらでもよいのですが、この種のコントロールを作る場合に、
そのコントロールを作ったら、編集可能な状態のときに、それをダブルクリックしてください。そうすると、該当するVBEditor に飛びます。
通常、TextBox ですと、TextBox1_Click イベントが作られるわけです。
そこで、
VBEditor の画面の上の方には、二つのコンボボックスがあって、
左側には、 右側には、
--------------------------------------
TextBox1 ▼ |Click ▼
--------------------------------------
オブジェクト名があり、と出ていて、始めて、イベント・ドリブン型マクロと成立するわけです。その▼で、イベントの種類を変えてあげるわけです。
それは、この私も、Classに書いた後に、動かないので確認すると、そういうオブジェクト名自体が間違えていることがあります。オブジェクト名が左側に出ていれば、VBEditor は、そのオブジェクトを認識しています。
Wendy02様 重ね重ねご丁寧にありがとうございます。VBAもロクに承知しないで恥ずかしい限りです。ただ、ご指摘のオブジェクトとプロシージャは間違いないことを確認しています。(TextBox1,keyPress)コードのロジックはこれ以上簡単に書きようがないほど単純明快です。ご面倒を承知でお願いしますが、Excelで実際にこのコードを実行していただけませんか。もしWendy02様が正しく”通過”メッセージが表示されれば私のExcelバーションやマシン環境から疑ってかからなくてはなりません。なにとぞ、よろしくお願いいたします。
No.2
- 回答日時:
こんにちは。
>データ入力後エンターキーの押下でイベントに入りたいのです
イベントが何を意味するのかは分かりませんが、こういうことをお聞きになっているのでしょうか?
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
'別のタスクを書く
'KeyCode = 0 としなければ、Enter キーは生きています。
End If
End Sub
再度ありがとうございます。おっしゃる通り、If文でThenに来るときは
Textbox1に(例えば1200 + Enter)データが入って来ることになります。ここでこの値を使っていろいろな処理をします。しかし、私の期待とは異なり、そもそも1200 + EnterでIf文まで来ません。(Msgbox "通過"はその通過確認の意味です。)なので、私が期待している回答は1行目にどこか誤りがあるのか、Objectや Projectが間違っている、またはコードを記入する場所が違う(標準モジュール?)ということになるような気がします。(このあたりがよく分かっていません)。どうか見捨てないでよろしくお願いいたします。
No.1
- 回答日時:
こんにちは。
今、VB6は、別のPCに入れてあるので、立ち上げるのが面倒だから試してみてないけれど、それは、KeyCode ではないのでしょうか?
ただし、以下のコードでは、文字を入れようが、Enter キーを入れようが、「通過」のメッセージは出てきますね。このコード自体の意味は、Enterキーの働きを無効にするという意味だと思います。
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
MsgBox "通過"
If KeyCode = vbKeyReturn Then
KeyCode = 0
End If
End Sub
早々のご回答ありがとうございます。まるでおんぶにだっこのおねだりみたいで気が引けますが、もしお時間があるなら私の目的から見てどこをどうすればよいのか具体的にお教えいただければ本当にありがたいです。どうかよろしくお願いいたします。なお、VBとVBAの違いを承知していません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【教えて!goo ウォッチ 人気記事】風水師直伝!住まいに幸運を呼び込む三つのポイント
記事を読む>>
-
Enterキーでマクロを起動さす。
その他(ソフトウェア)
-
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
-
Excel VBA あるセルでENTERを押すと特定のセルへ移動したい
Excel(エクセル)
-
-
4
エクセルのVBA 特定のセルでエンターキーでマクロ実行
Excel(エクセル)
-
5
どこにもフォーカスを当てたくない
Access(アクセス)
-
6
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
7
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
8
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
9
Access2010 Enterで次テキストへ移動
その他(Microsoft Office)
-
10
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
11
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
12
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
13
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
14
UserForm1.Showでエラーになります。
工学
-
15
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
16
エクセルVBA テキストボックスへのセットフォーカスについて
Visual Basic(VBA)
-
17
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
18
ユーザーフォームのSetFocusが働かない?
その他(プログラミング・Web制作)
-
19
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
20
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
Excel VBAでマウスの左クリック...
-
コードでオブジェクトを最前面に
-
【エクセル】複数のTextBoxに共...
-
ユーザーフォームのインポート...
-
【エクセルのマクロ】クリップ...
-
ExcelのシートをAccessで表示し...
-
Imageコントロールにグラフを表...
-
文字列で小数点以下の0を削除し...
-
現在アクティブになっているオ...
-
Accessのフォーム上にエクセル...
-
エクセルのデータをwebフォーム...
-
クリスタルレポートのプレビュ...
-
Android12でポタンを下に表示し...
-
さくらサーバーにcgiフォームを...
-
JavascriptでDom XSSの脆弱性対...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
文字列で小数点以下の0を削除し...
-
Excel VBAでマウスの左クリック...
-
エクセルVBAでセル番地を指定し...
-
Excel2007 でのチェックボック...
-
エクセルのデータをwebフォーム...
-
日本語の文字化けを直す方法
-
【エクセルのマクロ】クリップ...
-
コードでオブジェクトを最前面に
-
現在アクティブになっているオ...
-
Imageコントロールにグラフを表...
-
【エクセル】複数のTextBoxに共...
-
Accessのフォーム上にエクセル...
-
PowerpointVBAで指定のShapeオ...
-
ユーザーフォームのインポート...
-
Access からオブジェクトとして...
-
クリスタルレポートのプレビュ...
-
VBAでフォームのコントロールの...
-
VBAで選択範囲外の図形(オブジ...
おすすめ情報