• ベストアンサー

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)のユーザーフォームプロパティには、そのような項目が見当たりません。コード上で無理やり設定してみるとエラーになります。 どのようにすれば解決するでしょうか? お知恵をお貸し下さい。

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

  • ベストアンサー
回答No.2

フォーム上に、テキストボックスなどの 「キー入力を受け取るコントロール」があると、 そっちのコントロールの KeyDown イベントで処理されてしまって、 フォームの KeyDown イベントが呼ばれません。それを解決するのが KeyPreview プロパティなわけですが、 ……Excel には存在しないないようですね。 Access にはそれ相当のものがあるのに。 と言うわけで、処理を関数化して、すべてのコントロールの KeyDown イベントから呼び出すようにする、しか手はなさそうです。 新しいコントロールを追加して KeyDown イベントを書き忘れて、 「キーが効かないときがあるんだけど……」 ってことになりやすいので気をつけましょう。

DoPunk
質問者

お礼

ご回答有難うございます。お礼が遅くなってすいません。 仰る通り、他にボタンを配置していたのがいけなかったようです。ボタンを使わない方法に変えてなんとか処理しました。 有難うございました。

その他の回答 (1)

回答No.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押下時の処理です)

DoPunk
質問者

お礼

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