Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13424 / 13646 ツリー ←次へ | 前へ→

【5455】コンボボックスのリスト選択について KAZ 03/5/14(水) 18:21 質問
【5475】Re:コンボボックスのリスト選択について つん 03/5/15(木) 12:46 回答
【5484】Re:コンボボックスのリスト選択について JuJu 03/5/15(木) 15:12 回答
【5489】Re:コンボボックスのリスト選択について KAZ 03/5/15(木) 16:24 お礼

【5455】コンボボックスのリスト選択について
質問  KAZ E-MAIL  - 03/5/14(水) 18:21 -

引用なし
パスワード
   いつもお世話になっております。

コンボボックスのドロップダウンリストを選択するときに、上下キーを使って選択すると、リストの最後で下(downキー)を押したときに次のコントロールにフォーカスが移ってしまうのがいやで、また最初のリストに戻るよう、次のようなコードを書いたのですが、

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With ComboBox1
 Select Case KeyCode
  Case 40
  If .ListIndex = .ListCount - 1 Then
   .ListIndex = 0
  End If
  Case 38
  If .ListIndex = 0 Then
   .ListIndex = .ListCount - 1
  End If
 End Select
End With
End Sub

これだと、なぜかDownキーで最後のリストの次には2番目のリストに戻り、逆にUpキーの
場合、最初のリストの次には最後から一つ前のリストに戻ってしまいます。たとえばリストが5つあると、

Downの場合;最後のリスト選択時 → 2番目のリストが表示される
                 (1番目のリストに戻ってほしい)

Upの場合;1番目のリスト選択時 → 4番目のリストが表示される
                 (5番目のリストに戻ってほしい)

と、こんな具合なのです(ややこしい説明ですみませんが)が、何か良い方法はないもの
でしょうか?よろしくお願いいたします。

【5475】Re:コンボボックスのリスト選択について
回答  つん E-MAIL  - 03/5/15(木) 12:46 -

引用なし
パスワード
   KAZ さん、こんにちは

私もやってみました。
KAZさんのおっしゃるように、動作したのでビックリしました(@_@)
でも、ステップ実行してみて判ったのですが、
Downキー,Upキーを押すだけで、ListIndexの値は変化するので、
KeyDownイベントの中で、ListIndexの値を触っても、イベントを抜ける際に、
その値からまたプラス、マイナスされるようです。
ので、こんなやりかたはどうでしょうか?

'==============================================
Private Sub UserForm_Initialize()
  With ComboBox1
    .AddItem "1"
    .AddItem "2"
    .AddItem "3"
    .AddItem "4"
    .AddItem "5"
    .AddItem ""
    .ListIndex = 0
  End With
End Sub

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  With ComboBox1
   Select Case KeyCode
    Case 40
    If .ListIndex = .ListCount - 2 Then
     .ListIndex = -1
    End If
    Case 38
    If .ListIndex = 0 Then
     .ListIndex = .ListCount - 1
    End If
   End Select
  End With
End Sub
'==============================================

Downキーの時は、リストの最後に来た時に、ListIndexを-1に設定します。
そしたら、抜ける時に「0」になります。
Upキーの時は、リストの最初に来たときに、ListCountを設定出来たらいいんだけど、それだとエラーになるので、苦肉の策で、リストの最後に空白をリストしました。

説明が難しい(>_<) わかるかなー?

もっとスマートなやりかたがあるかもしれないけど、
私にはこれぐらいしか思いつかないですにゃ。

【5484】Re:コンボボックスのリスト選択について
回答  JuJu E-MAIL  - 03/5/15(木) 15:12 -

引用なし
パスワード
   KAZさん、つんさん、こんにちはぁ

>Downの場合;最後のリスト選択時 → 2番目のリストが表示される

このままでは .ListIndex = -1 を処理した後にDownキーも処理されるので、そうなるのかな

.ListIndex = -1 の後に、KeyCode = 0 を入れておくと、Downキーの処理はされなくなります。
Upキーも同様にね。

ではではぁ

【5489】Re:コンボボックスのリスト選択について
お礼  KAZ E-MAIL  - 03/5/15(木) 16:24 -

引用なし
パスワード
   JuJu さん、つんさん、こんにちは

色々とアドヴァイスありがとうございました。お二人の方法とも早速試させて頂いて、今回はJuJuさんの方法を参考にさせていただくことに致しました。動作的にはどちらの方法
でも非常にスムーズです。非常に助かりました。本当に有難うございました。

13424 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free