[[20111020102943]] 『keyupのキー指定です』(miyama) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『keyupのキー指定です』(miyama)

 Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal 
 Shift As Integer)
 上記コードはどのキーを押してもイベントが発生しますが、「↓」「↑」「Enter」
 のみのキーで発生するように設定することは出来ますでしょうか
 よろしくお願いします 
 Excel2007Windows 7


 ↓のKeyCodeが40(vbKeyDown)、↑のKeyCodeが38(vbKeyUp)、EnterのKeyCodeが13(vbKeyReturn)みたいだから
 KeyCodeがこの三つの時だけ処理するようにしたらいいんじゃないかな?
 (春日野馨)

 春日野馨様 ありがとうございます

 Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal 
 Shift As Integer)
 If KeyCode.Value = 13 Or KeyCode.Value = 38 Or KeyCode.Value = 40 Then

 End If
 end sub
 上記形式でいいでしょうか。おこなってみます
 miyama

 KeyCodeはオブジェクトじゃなくて変数なので
 >KeyCode.Value = 13
 のような書き方はできません。
 KeyCode = 13
 が正しいです。
 (momo) 

 おまけの情報。

 VBE画面のメニューの 表示(V) -> オブジェクトブラウザ(O) でオブジェクトブラウザを表示させ
その左側のクラス欄で KeyCodeConstants を選ぶと、右側にずらっと指定可能なキーコード定数がでてくる。
で、その定数をクリックすると、下のほうに、その値が Const vbKeyDown = 40 (&H28) のように表示される。

 コードの可読性を考慮すると KeyCode = 13 といったように番号を直接指定するより
KeyCode = vbKeyReturn というように表現するほうがわかりやすいかな。

 (ぶらっと)

 >KeyCodeはオブジェクトじゃなくて変数なので
 >>KeyCode.Value = 13
 >のような書き方はできません。
 >KeyCode = 13
 >が正しいです。

 ↑この解釈はいささかおかしいので一言。
 KeyCode As MSForms.ReturnInteger
 なのでKeyCodeはオブジェクト(クラス)です。
 Class ReturnIntegerはMSFormsのメンバで、
 PropertyであるValueはMSForms.ReturnIntegerの既定メンバです。
 ですから、正しい書き方は KeyCode.Value = vbKeyReturn であり、
 通常は省略して KeyCode = vbKeyReturn のように書くでしょう。
 (sasa)

 あら、よく調べてみるとホントですね
 結構長い間認識を間違えてました。

 普段、GetAsyncKeyStateを使う事の方が多いので
 ただのLong型だという思い込みが・・・^^;

 sasaさんありがとうございます

 という事でmiyamaさん、すみませんが私のは無視で。
 (momo)

 ちょろっと。
ExcelのVBAでのKeyUpでは
    KeyCode As MSForms.ReturnInteger
だけど、VB6やAccessのVBAでは
    KeyCode As Integer
となりますね。
 
私が見慣れているのは As Integer の方だったので、
Excelでは As MSForms.ReturnInteger なんだ、へぇ〜とここで認識した口です。
 
Excel VBAで KeyCode.Value と書きなれている人が、
Access VBA等を触る時に同様に記述して通らず「あれっ?」となるかも知れないので、一応補足として。
(ご近所PG)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.