[三流君] −−> [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: MsgBox "こんな感じでF4処理を書く" Case Else: MsgBox "F" & (KeyCode - vbKeyF1 + 1) & "が押されました" End Select End If End Sub と同じコードが入ってます。 結果は、Excelと同じで、テキストボックスが無いフォーカスあたらない フォームは、Form_KeyDownイベントが発生して、 テキストボックスありのフォーカスがほかのコントロールにあたるフォームは 反応しませんでした。。。 /* * 4.終わりの挨拶 */ なんか今回も、解決してない、 できないよの報告でした。 KeyDownイベント作りの参考、 ファンクションキーを取る参考なればうれしいけど。。。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。


ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

種類別のリンク や 広告など

気になったジャンル↓を選択してください。

人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です

Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う]

仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力]

※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。

Blogとリンク:[三流君の作業日記]/ [VBAやASPのサンプルコード]/ 広告-[通販人気商品の足跡]



[三流君(TOP ken3.org へ戻る)] / [VBA系TOPへ] / [VBA系バックナンバー目次へ移動]