<Excel UserForm テキストボックスのイベント>
こんにちは、三流プログラマーKen3です。 今回は、 Excelユーザーフォーム の テキストボックス関係のイベントを少し書きます。 別の機会でフォームの作り方はやるつもりなので、 気楽に読んでください。 /* * 1. 質問来た、今度はカッコつけたいけど、、、、 */ BBS に以下の投稿がありました。 >投稿時間:2002/12/18(Wed) 23:50 > >おなまえ:fox1972 >タイトル:エクセルVBAでのキー操作 >URL : >コメント: > >エクセルにてユーザーフォームを表示しています。 >ファンクションキーを利用してある処理をさせたいのですが、 >何か良い方法はないでしょうか? > >また、フォームを表示したときに、あるテキストボックスに >フォーカスを移動させたいのですが、上手くいきません。 >(どこがアクティブになっているのかも解らない。カーソルも表示されない。) >今は「UserForm_Initialize」にて「テキストボックス名.SetFocus」と記述しています。 >-------------------------------------------------------- ---- 最近、ポツポツと質問来てるので、ネタには困らないなぁ と思いつつ、質問内容と自分の経験を照らし合わせて考える。 /* * 2.先に、テキストボックスを目立たせてみる */ >また、フォームを表示したときに、あるテキストボックスに >フォーカスを移動させたいのですが、上手くいきません。 >(どこがアクティブになっているのかも解らない。カーソルも表示されない。) >今は「UserForm_Initialize」にて「テキストボックス名.SetFocus」と記述しています。 どこがアクティブだか、わからない。。。 ユーザーフォーム作成後、 テキストボックスを2つ作って、私も試してみました。 たしかに、、、わかりにくい。 サンプルを、 http://www.ken3.org/vba/lzh/vba030.lzh のtest030-book.xls内にテストのフォーム作りました。 解説と合わせて見て下さい。 一つの案として、現在入力中のテキストボックスのバックカラーを変えてみます。 テキストボックスのイベントで、 _Enterが入ってきた時の処理、 _Exitが出て行く時発生するイベントなので、 テキストボックスに入力が移ったら、 .BackColor = RGB(&H0, &HFF, &HFF) で水色に変えて、 出て行く時は、 .BackColor = RGB(&HFF, &HFF, &HFF) 元に戻してます。 Private Sub TextBox1_Enter() 'テキストボックスに入ったら色変える TextBox1.BackColor = RGB(&H0, &HFF, &HFF) End Sub Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'テキストボックスからバイバイする時は元に戻す TextBox1.BackColor = RGB(&HFF, &HFF, &HFF) End Sub Private Sub TextBox2_Enter() 'テキストボックスに入ったら色変える TextBox2.BackColor = RGB(&H0, &HFF, &HFF) End Sub Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'テキストボックスからバイバイする時は元に戻す TextBox2.BackColor = RGB(&HFF, &HFF, &HFF) End Sub 三流君さ、うっ、なんか頭イタクなってきたよオレ。 何で?動いてるよ。 じゃなくって、 10個入力項目あったら、全部いれるのこれ? なんかバカ臭くない? ギク、、、 コントロールって配列にして処理できるか、調べないとなぁ。 確かに、2つ3つだったらいいけど(2つ3つまでかなガマンできるの) テキストの数が多いとマズイなぁ。 一つの案として、イベントで背景色を変えて、入力エリアをわかりやすくしました。 その先のプログラムもわかりやすくする方法は、現在探ってます(大丈夫??) /* * 3.ファンクションキーを取る */ ファンクションキーを取る、 これはAccessでやったことあったので、 参考例を。 KeyDownのイベントで取れるので、 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If vbKeyF1 <= KeyCode And KeyCode < vbKeyF12 Then MsgBox "F" & (KeyCode - vbKeyF1 + 1) & "が押されました" End If End Sub でテストできます。 キー コードの定数(ヘルプより) 定数 値 内容 vbKeyF1 0x70 F1 キー vbKeyF2 0x71 F2 キー vbKeyF3 0x72 F3 キー vbKeyF4 0x73 F4 キー vbKeyF5 0x74 F5 キー vbKeyF6 0x75 F6 キー vbKeyF7 0x76 F7 キー vbKeyF8 0x77 F8 キー vbKeyF9 0x78 F9 キー vbKeyF10 0x79 F10 キー vbKeyF11 0x7A F11 キー vbKeyF12 0x7B F12 キー vbKeyF13 0x7C F13 キー vbKeyF14 0x7D F14 キー vbKeyF15 0x7E F15 キー vbKeyF16 0x7F F16 キー 共通の関数作ってみたけど ^^^^^^^^^^^^^^^^^^^^^^^^ Private Sub chkFKey(ByVal KeyCode As MSForms.ReturnInteger) If vbKeyF1 <= KeyCode And KeyCode < vbKeyF12 Then Select Case KeyCode Case vbKeyF1: '終了処理 'さて、フォームでもとじますか。 Unload Me '自分を落す Case vbKeyF4: 'F4 MsgBox "こんな感じでF4処理を書く" Case Else: MsgBox "F" & (KeyCode - vbKeyF1 + 1) & "が押されました" End Select End If End Sub Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Call chkFKey(KeyCode) 'チェック用の関数を呼ぶ End Sub Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Call chkFKey(KeyCode) 'チェック用の関数を呼ぶ End Sub と、各テキストボックスの _KeyDown イベントで共通の関数を呼び、 F1が押されたらフォームを閉じる(通常F1はヘルプだけど) F4はテストメッセージ、 その他のキーは、押されたキーを表示してます。 えっ、これも、テキストボックスの数入れないといけないの? あとさ、バックカラーはいいとして、 チェックボックスとかリストボックスにフォーカスあたってた時に、 F1押しても反応しないんじゃない? たしか、フォーム全体に効かす、、って言うか、 フォームの_KeyDown イベントに書いたら? う〜ん、これも改善の余地有りですね。 /* * 4.終わりの挨拶 */ 今回は、 ・Excelユーザーフォームのテキストボックスを見やすくする案 ・ファンクションキーを判断したい でした。 今回のサンプルは、 http://www.ken3.org/vba/lzh/vba030.lzh に test030-book.xlsが保存されていて、 テストフォームを2種類作ってます バックカラーを変えたり、ファンクションを押してみたり、 遊んでください。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]