[[20150702091148]] 『コンボボックスをドロップダウンさせたままにする』(ホイジンガ) ページの最後に飛ぶ

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

 

『コンボボックスをドロップダウンさせたままにする』(ホイジンガ)

 おはようございます。

 スピンボタンでコンボボックスのカーソル行を上下させているのですが、スピンボタンでカーソルを上下させて
 いる間はコンボボックスをドロップダウンしたままにしたいのです。

 ユーザーフォームの他の部分にマウスカーソルが乗るとコンボボックスのドロップダウンを閉じたいです。これは出来ています。

 下記のコードでは、スピンボタンを一度押すとカーソル行が一行上下に動きドロップダウンは開いたままになりますが、そのまま
 もう一度押すとカーソル行が一行上下に動きますが、ドロップダウンは閉じてしまいます。
 続けて押忍と、カーソル行が一行上下に動きドロップダウンも開きます。
 この動きの繰り返しになります。

 スピンボタンをクリックでコンボボックスのカーソルを上下させている間はコンボボックスをドロップダウンさせたままにするには
 どうすればいいでしょうか?ご教示お願いいたします。

 Private Sub ComboBox1_Click()
  If Me.ComboBox1.ListCount = 0 Or Me.ComboBox1.ListIndex = -1 Then Exit Sub
  Call cb1dd
 End Sub

 'コンボボックス上でマウスが動くとコンボボックスをドロップダウン
 Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Call cb1dd
 End Sub

 'コンボボックスをドロップダウン
 Private Function cb1dd()
  If Me.ComboBox1.ListCount = 0 Then Exit Function
  Me.ComboBox1.SetFocus
  Me.ComboBox1.DropDown
 End Function

 'コマンドボタン
 Private Sub CommandButton1_Click()
   MsgBox "実行"
 End Sub

 'スピンボタンでコンボボックスのカーソルを一行下げる
 Private Sub SpinButton1_SpinDown()
  If Me.ComboBox1.ListIndex = Me.ComboBox1.ListCount - 1 Then
     Me.ComboBox1.ListIndex = 0
  Else
     Me.ComboBox1.ListIndex = Me.ComboBox1.ListIndex + 1
  End If
  Call cb1dd
 End Sub

 'スピンボタンでコンボボックスのカーソルを一行上げる
 Private Sub SpinButton1_SpinUp()
  If Me.ComboBox1.ListIndex = 0 Then
     Me.ComboBox1.ListIndex = Me.ComboBox1.ListCount - 1
  Else
     Me.ComboBox1.ListIndex = Me.ComboBox1.ListIndex - 1
  End If
  Call cb1dd
 End Sub

 'ユーザーフォーム起動時/コンボボックスセット
 Private Sub UserForm_Initialize()
  Me.ComboBox1.AddItem "aa"
  Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = "aaaa"
  Me.ComboBox1.AddItem "bb"
  Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = "bbbb"
  Me.ComboBox1.AddItem "cc"
  Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = "cccc"
  Me.ComboBox1.AddItem "dd"
  Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = "dddd"
  Me.ComboBox1.AddItem "ee"
  Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = "eeee"
  Me.ComboBox1.ListIndex = 0
 End Sub

 'ユーザーフォーム上でマウスが動くとコマンドボタンにフォーカス(コンボボックスのドロップダウンを閉じる)
 Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Me.CommandButton1.SetFocus
 End Sub

< 使用 Excel:Excel2007、使用 OS:WindowsVista >


 cb1ddの実行させる位置を変えてみては いかがですか?

Option Explicit

 Private Sub ComboBox1_Click()
  If Me.ComboBox1.ListCount = 0 Or Me.ComboBox1.ListIndex = -1 Then Exit Sub
  Call cb1dd
 End Sub
 'コンボボックス上でマウスが動くとコンボボックスをドロップダウン
 Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Call cb1dd
 End Sub
 'コンボボックスをドロップダウン
 Private Function cb1dd()
  If Me.ComboBox1.ListCount = 0 Then Exit Function
 ' Me.ComboBox1.SetFocus   これ要らない
  Me.ComboBox1.dropdown
 End Function
 'コマンドボタン
 Private Sub CommandButton1_Click()
   MsgBox "実行"
 End Sub
 'スピンボタンでコンボボックスのカーソルを一行下げる
 Private Sub SpinButton1_SpinDown()
  Call cb1dd

  If Me.ComboBox1.ListIndex = Me.ComboBox1.ListCount - 1 Then
     Me.ComboBox1.ListIndex = 0
  Else
     Me.ComboBox1.ListIndex = Me.ComboBox1.ListIndex + 1
  End If
 End Sub
 'スピンボタンでコンボボックスのカーソルを一行上げる
 Private Sub SpinButton1_SpinUp()
  Call cb1dd

  If Me.ComboBox1.ListIndex = 0 Then
     Me.ComboBox1.ListIndex = Me.ComboBox1.ListCount - 1
  Else
     Me.ComboBox1.ListIndex = Me.ComboBox1.ListIndex - 1
  End If
 End Sub
 'ユーザーフォーム起動時/コンボボックスセット
 Private Sub UserForm_Initialize()
  Me.ComboBox1.AddItem "aa"
  Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = "aaaa"
  Me.ComboBox1.AddItem "bb"
  Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = "bbbb"
  Me.ComboBox1.AddItem "cc"
  Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = "cccc"
  Me.ComboBox1.AddItem "dd"
  Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = "dddd"
  Me.ComboBox1.AddItem "ee"
  Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = "eeee"
  Me.ComboBox1.ListIndex = 0
  ComboBox1.ShowDropButtonWhen = fmShowDropButtonWhenNever
   'Combobox1の操作にSpinbuttonを使うのですから 二つも要らないとコード見て思いました
 End Sub
 'ユーザーフォーム上でマウスが動くとコマンドボタンにフォーカス(コンボボックスのドロップダウンを閉じる)
 Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Me.CommandButton1.SetFocus
 End Sub

(ichinose) 2015/07/03(金) 08:00


 ichinoseさん、ご回答ありがとうございます。

 ご教示いただきましたコードでおおむねうまくいきました。
 ただ、↓のコードがうまく作動しなくなりました。
 ユーザーフォーム上でマウスを動かしてもコンボボックスのドロップダウンが閉じなくなりました。

 'ユーザーフォーム上でマウスが動くとコマンドボタンにフォーカス(コンボボックスのドロップダウンを閉じる)
 Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Me.CommandButton1.SetFocus
 End Sub

 そこで

 Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Me.ComboBox1.SetFocus
  Me.CommandButton1.SetFocus
 End Sub

 と
  Me.ComboBox1.SetFocus
 を付加することによりうまくいきました。
 ありがとうございました。
(ホイジンガ) 2015/07/03(金) 08:24

コメント返信:

[ 一覧(最新更新順) ]


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