最大1万円超分の電子書籍プレゼント♪

テキストボックスにデータ入力後エンターキーの押下でイベントに入りたいのですが、下記のコーディングで[通過]メッセージが表示されません。英数字は通過しますが、エンターキーは動作停止します。
これと全く同じコーディングで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

gooドクター

A 回答 (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
    • good
    • 6
この回答へのお礼

Wendy02様 このたびは私のトラブルに関わっていただき、多大なご迷惑をおかけしました。ありがとうございます。4回目に書いていただいたコードできちんと正しい動きをします。重ねて心から感謝申し上げます。さて、これだけご親切にお教えいただいておきながらまことに無礼なことを申し上げますが、私の確認のお願いに大変ご立腹のご様子。とまどっております。私の疑問はなぜ4回もやりとりしなければ
KeyPressではなく、KeyDownだと教えていただけないのか不思議だということです。しかも最初の投稿でこの話はVBAだと断ってあります。
お教えいただいたKeyPressの件はその1回目でおわかりのはずではないですか。1回目~3回目はずいぶん横道にそれています。いきなり4回目で「だからKeyDownイベントを使えばよいとしている」(原文のまま)は教えを乞う立場の私でもおかしな話だと思います。Wendy02様は相当優秀かつ有能な方だとお見受けいたします。今後、素人には丁寧にお教えくださいますように。ご無礼をお許しください。

お礼日時:2008/03/24 18:15

こんにちは。



>私の期待とは異なり、そもそも1200 + EnterでIf文まで来ません。

それは、もしかしたら……。

私は、VB6 からの話でしたので、UserForm 上でと思いましたが、それはどちらでもよいのですが、この種のコントロールを作る場合に、

そのコントロールを作ったら、編集可能な状態のときに、それをダブルクリックしてください。そうすると、該当するVBEditor に飛びます。

通常、TextBox ですと、TextBox1_Click イベントが作られるわけです。
そこで、

VBEditor の画面の上の方には、二つのコンボボックスがあって、

左側には、       右側には、

--------------------------------------
TextBox1      ▼ |Click     ▼
--------------------------------------
オブジェクト名があり、と出ていて、始めて、イベント・ドリブン型マクロと成立するわけです。その▼で、イベントの種類を変えてあげるわけです。

それは、この私も、Classに書いた後に、動かないので確認すると、そういうオブジェクト名自体が間違えていることがあります。オブジェクト名が左側に出ていれば、VBEditor は、そのオブジェクトを認識しています。
    • good
    • 1
この回答へのお礼

Wendy02様 重ね重ねご丁寧にありがとうございます。VBAもロクに承知しないで恥ずかしい限りです。ただ、ご指摘のオブジェクトとプロシージャは間違いないことを確認しています。(TextBox1,keyPress)コードのロジックはこれ以上簡単に書きようがないほど単純明快です。ご面倒を承知でお願いしますが、Excelで実際にこのコードを実行していただけませんか。もしWendy02様が正しく”通過”メッセージが表示されれば私のExcelバーションやマシン環境から疑ってかからなくてはなりません。なにとぞ、よろしくお願いいたします。

お礼日時:2008/03/24 15:53

こんにちは。



>データ入力後エンターキーの押下でイベントに入りたいのです

イベントが何を意味するのかは分かりませんが、こういうことをお聞きになっているのでしょうか?

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = vbKeyReturn Then
    '別のタスクを書く
    'KeyCode = 0 としなければ、Enter キーは生きています。
  End If
End Sub
    • good
    • 2
この回答へのお礼

再度ありがとうございます。おっしゃる通り、If文でThenに来るときは
Textbox1に(例えば1200 + Enter)データが入って来ることになります。ここでこの値を使っていろいろな処理をします。しかし、私の期待とは異なり、そもそも1200 + EnterでIf文まで来ません。(Msgbox "通過"はその通過確認の意味です。)なので、私が期待している回答は1行目にどこか誤りがあるのか、Objectや Projectが間違っている、またはコードを記入する場所が違う(標準モジュール?)ということになるような気がします。(このあたりがよく分かっていません)。どうか見捨てないでよろしくお願いいたします。

お礼日時:2008/03/24 14:49

こんにちは。



今、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
    • good
    • 1
この回答へのお礼

早々のご回答ありがとうございます。まるでおんぶにだっこのおねだりみたいで気が引けますが、もしお時間があるなら私の目的から見てどこをどうすればよいのか具体的にお教えいただければ本当にありがたいです。どうかよろしくお願いいたします。なお、VBとVBAの違いを承知していません。

お礼日時:2008/03/24 13:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング