[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.032 Excel UserForm_KeyDownイベント発生条件

Excel UserForm_KeyDownイベント発生条件

メルマガ発行内容

<Excel UserForm_KeyDownイベント発生条件>

こんにちは、三流プログラマーKen3です。 今回は、 No.30 Excel UserForm テキストボックスのイベント /vba/backno/vba030.html の続きです。 ファンクションキーを処理したくて、 UserForm_KeyDownイベントを探った結果です。 気楽に読んでください。 /* * 1. KeyDownイベントを探る。 */ テキストボックスの_KeyDownイベントに書いて、 なんとかファンクションキーが押されたことを判断してました。 今回は、フォームにもKeyDownイベントあるので、 ここに書いたら出来るんじゃないか?やったぁとヌカヨロコビシタ話です(笑) なかなか、うまく行かないね。。。。 ヘルプでKeyDownイベントの解説を見ると、 実行中のフォームで、フォームまたはそのコントロールにフォーカスがあるときに キーを押すと、KeyDown イベントが発生します。キーを押したまま離さないでいると 、KeyDown イベントと KeyPress イベントが交互に繰り返し発生します。キーを離す と KeyUp イベントが発生します。キーストロークはすべて、フォーカスがあるフォー ムまたはコントロールが受け取ります。 フォームは、コントロールが 1 つもないか、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ または表示されているすべてのコントロールが選択不可能に設定されている場合に限り、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ フォーカスを持つことができます。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ あらら、 UserForm_KeyDownイベントでまとめられると思ったのに。 余談ですが、 MSDNライブラリ http://www.microsoft.com/japan/msdn/library/default.asp から、 フレーズ(語句)検索 "KeyDown" すべてを含む で探すこともできます。 さらにあまり関係無いけど、 KeyPreview プロパティ ってのが、 .NET Framework クラス ライブラリ ならあって、フォームで簡単に受け取れるみたいです。 解説 このプロパティを true に設定すると、 KeyPress 、 KeyDown 、 KeyUp の各イベント をすべてフォームが受け取ります。フォームのイベントハンドラでキーストロークの処 理が完了してから、フォーカスを持つコントロールにそのキーストロークが割り当てら れます。たとえば、 KeyPreview プロパティが true に設定され、現在選択されている コントロールが TextBox の場合は、キーストロークがフォームのイベント処理メソッド で処理された後で、押されたキーを TextBox コントロールが受け取ります。キーボード イベントをフォームでだけ処理し、そのイベントをコントロールでは受け取らないよう にする場合は、フォームの KeyPress イベントまたは KeyDown イベントの e.Handled パラメータを true に設定します。 このプロパティを使用してアプリケーションのすべてのキーストロークを処理し、 フォームでキーストロークを処理するか、キーストロークを処理するために適切な コントロールを呼び出すことができます。たとえば、アプリケーションで ファンクション キーが使用される場合は、キーストローク イベントを受け取るコントロ ールごとにコードを作成するのではなく、 フォーム レベルでキーストロークを処理します。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ↑これがやりたいのに、、、  Excel97/2000のフォームにKeyPreview プロパティ無いんだよね、探したけど。  EXcel2002ならあるのかなぁ?  それとも、サービスパックを当てると治るとか、、仕様だからムリかな。 /* * 2.ホントなのか? */ ユーザーフォームに1つでもフォーカスを受け取る項目が存在すると、 UserForm_KeyDownイベント フォームのKeyDownイベントが発生しないか、テストしてみた。 今回のサンプルは、 http://www.ken3.org/vba/lzh/vba032.lzh に test032-book.xlsとdb032.mdbが保存されています。 テストのフォーム1は、ラベルだけで、コントロールにフォーカスはあたりません。 この状態で、 UserForm_KeyDownイベントが発生するかチェックしてみる テストのフォーム2は、テキストボックス在りで、 コントロールにフォーカスは当たります。 この状態で同じ関数を書き、イベントが発生するかチェックする。 テスト実行してみると、う〜ん、ホントみたいだ。。。 KeyPreview プロパティぽいのも無いし。 1つ1つフォーカスのあたるコントロールに ファンクション判断つけるしかないのかなぁ。 何かいい手は無いのかなぁ。。。 /* * 3.Access97でも試してみました */ Access97でも試してみました。 同じ圧縮ファイルの、 http://www.ken3.org/vba/lzh/vba032.lzh にtest032-book.xlsとdb032.mdbが保存されています。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If vbKeyF1 <= KeyCode And KeyCode < vbKeyF12 Then Select Case KeyCode Case vbKeyF4: 'F4 MsgBox "こんな感じでF4処理を書く" Case Else: MsgBox "F" & (KeyCode - vbKeyF1 + 1) & "が押されました" End Select End If End Sub と同じコードが入ってます。 結果は、Excelと同じで、テキストボックスが無いフォーカスあたらない フォームは、Form_KeyDownイベントが発生して、 テキストボックスありのフォーカスがほかのコントロールにあたるフォームは 反応しませんでした。。。 /* * 4.終わりの挨拶 */ なんか今回も、解決してない、 できないよの報告でした。 KeyDownイベント作りの参考、 ファンクションキーを取る参考なればうれしいけど。。。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.032を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

情報を探す

情報を探すならGoogleかな?

↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
Google
Web www.ken3.org
www.microsoft.com support.microsoft.com

あとは、項目別にMSでお勉強かな?
◆ マイクロソフト サイトの歩き方
◇ How-To インデックス
◇ FAQ インデックス
◇ スキルレベル別おすすめコンテンツ
◇ テクノロジ マップ
◇ テーマ別技術資料一覧

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・