
テキストボックスにデータ入力後エンターキーの押下でイベントに入りたいのですが、下記のコーディングで[通過]メッセージが表示されません。英数字は通過しますが、エンターキーは動作停止します。
これと全く同じコーディングで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も見ています
-
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
-
Enterキーでマクロを起動さす。
その他(ソフトウェア)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
Excel VBA あるセルでENTERを押すと特定のセルへ移動したい
Excel(エクセル)
-
5
エクセルのVBA 特定のセルでエンターキーでマクロ実行
Excel(エクセル)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
8
UserForm1.Showでエラーになります。
工学
-
9
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
10
エクセルVBA テキストボックスへのセットフォーカスについて
Visual Basic(VBA)
-
11
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
12
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
13
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
14
コマンドボタンのEnterイベント後に、フォーカスを移動したい。
その他(Microsoft Office)
-
15
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
16
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
17
どこにもフォーカスを当てたくない
Access(アクセス)
-
18
テキストボックス入力後、警告メッセージを表示し、フォーカスを移動させない方法について
Access(アクセス)
-
19
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
20
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
エクセルVBAでセル番地を指定し...
-
Accessのフォーム上にエクセル...
-
Excel VBAでマウスの左クリック...
-
ExcelのシートをAccessで表示し...
-
VBAでwebへの書き込みって可能?
-
日本語の文字化けを直す方法
-
文字列で小数点以下の0を削除し...
-
コードでオブジェクトを最前面に
-
[C#] DataGridViewの項目名
-
VBAで選択範囲外の図形(オブジ...
-
【エクセルのマクロ】クリップ...
-
Webbrowserで完全にHPを表示さ...
-
Excel 終了マクロ
-
構造体の静的な初期化
-
【エクセル】複数のTextBoxに共...
-
ユーザーフォームのインポート...
-
Excel2007 でのチェックボック...
-
DLLの共有メモリと排他処理???
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
エクセルVBAでセル番地を指定し...
-
【エクセルのマクロ】クリップ...
-
文字列で小数点以下の0を削除し...
-
Excel VBAでマウスの左クリック...
-
Excel2007 でのチェックボック...
-
Accessのフォーム上にエクセル...
-
現在アクティブになっているオ...
-
【エクセル】複数のTextBoxに共...
-
日本語の文字化けを直す方法
-
PowerpointVBAで指定のShapeオ...
-
VBでExcelの表形式の様なデザイ...
-
サブルーチンにオブジェクト名...
-
ユーザーフォームのインポート...
-
コードでオブジェクトを最前面に
-
GDIオブジェクトが増える……
-
エクセルのデータをwebフォーム...
-
ChexBox1等の「1」を変数にで...
-
Access からオブジェクトとして...
おすすめ情報