プロが教えるわが家の防犯対策術!

いつもお世話になっています。

VBAのユーザーフォーム上で、KeyDown イベントを使いたいのですが、下のコードが動きませんでした。

Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If e.KeyCode = Keys.z Then

MsgBox "効いてるよ!"

End If

End Sub

エラー表示も出ません。

ウェブで調べたところ、VBでは「KeyPreview」プロパティーを「true」にすれば解決するという記事をあちこちで見かけましたが、VBA(Excel2003)のユーザーフォームプロパティには、そのような項目が見当たりません。コード上で無理やり設定してみるとエラーになります。

どのようにすれば解決するでしょうか? お知恵をお貸し下さい。

A 回答 (2件)

フォーム上に、テキストボックスなどの


「キー入力を受け取るコントロール」があると、
そっちのコントロールの KeyDown イベントで処理されてしまって、
フォームの KeyDown イベントが呼ばれません。それを解決するのが
KeyPreview プロパティなわけですが、
……Excel には存在しないないようですね。
Access にはそれ相当のものがあるのに。

と言うわけで、処理を関数化して、すべてのコントロールの
KeyDown イベントから呼び出すようにする、しか手はなさそうです。
新しいコントロールを追加して KeyDown イベントを書き忘れて、
「キーが効かないときがあるんだけど……」
ってことになりやすいので気をつけましょう。
    • good
    • 0
この回答へのお礼

ご回答有難うございます。お礼が遅くなってすいません。

仰る通り、他にボタンを配置していたのがいけなかったようです。ボタンを使わない方法に変えてなんとか処理しました。

有難うございました。

お礼日時:2008/02/15 20:18

エクセルのマクロ(VBA)ということでしょか?


こちらは2003ではありませんが
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
MsgBox "ok"
End If
End Sub
で動きますが。
(ENTER押下時の処理です)
    • good
    • 0
この回答へのお礼

ご回答有難うございます。お礼が遅くなってすいません。

確かに動きますね。どうやらボタンを配置していたのがいけなかったようです。有難うございました。

お礼日時:2008/02/15 20:16

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

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


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