こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA ユーザーフォームの Keypreview について

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

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)のユーザーフォームプロパティには、そのような項目が見当たりません。コード上で無理やり設定してみるとエラーになります。

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

投稿日時 - 2008-01-31 20:47:02

QNo.3732003

困ってます

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

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

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

投稿日時 - 2008-02-03 07:54:53

お礼

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

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

有難うございました。

投稿日時 - 2008-02-15 20:18:08

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

エクセルのマクロ(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押下時の処理です)

投稿日時 - 2008-01-31 21:01:47

お礼

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

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

投稿日時 - 2008-02-15 20:16:25

あなたにオススメの質問