Событие Excel ActiveX ComboBox onClick

Я пытаюсь использовать ActiveX ComboBox в Excel. Все работает нормально до момента заполнения с помощью раскрывающейся кнопки click_event. Но когда он устанавливает событие щелчка, я обнаруживаю, что он запускается даже при нажатии клавиш, таких как клавиши со стрелками. Это нормальное поведение, и если да, то как я могу обойти это?

Я работаю над Excel 2007 VBA.

Это метод, который я использовал, чтобы разрешить навигацию в поле со списком с помощью клавиш, я подожду, чтобы увидеть, есть ли лучшее решение..: lastkey - это общедоступная переменная

Private Sub ComboBox1_KeyDown(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 38 Then
        If ComboBox1.ListIndex <> 0 Then
            lastkey = KeyCode
            ComboBox1.ListIndex = ComboBox1.ListIndex - 1
            KeyCode = 0
        End If
    ElseIf KeyCode = 40 Then
        If ComboBox1.ListIndex <> ComboBox1.ListCount - 1 Then
            lastkey = KeyCode
            ComboBox1.ListIndex = ComboBox1.ListIndex + 1
            KeyCode = 0
        End If
    End If
End Sub

Private Sub ComboBox1_Click()
    If lastkey = 38 Or lastkey = 40 Then
        Exit Sub
    Else
        MsgBox "click"
    End If
End Sub

person Deepak    schedule 03.08.2012    source источник
comment
Вы видели редактирование моего поста?   -  person Siddharth Rout    schedule 03.08.2012
comment
извините, чувак, я думаю, что пропустил это, прежде чем обновить свой вопрос   -  person Deepak    schedule 04.08.2012
comment
Нет проблем :) Так это решает вашу проблему?   -  person Siddharth Rout    schedule 04.08.2012
comment
Да, почти, было бы неплохо, если бы мы могли искать в списке без функции автоматического выбора слова, если она отключена, мы не можем вводить текст для поиска содержимого, когда включено onchange, запускается ближайшее совпадение, все еще пытаясь исправить это также.   -  person Deepak    schedule 04.08.2012


Ответы (1)


Да это нормальное поведение. С помощью клавиш со стрелками осуществляется навигация по элементам в комбо, и, следовательно, запускается событие щелчка.

Чтобы обойти это, вставьте этот код. Это захватывает все 4 клавиши со стрелками и ничего не делает при нажатии. Единственным недостатком этого метода является то, что вы больше не сможете перемещаться с помощью клавиш со стрелками.

Private Sub ComboBox1_KeyDown(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
    Case 37 To 40: KeyCode = 0
    End Select
End Sub

ПОСЛЕДУЮЩИЕ

Dim ArKeysPressed As Boolean

Private Sub ComboBox1_Click()
    If ArKeysPressed = False Then
        MsgBox "Arrow key was not pressed"
        '~~> Rest of Code
    Else
        ArKeysPressed = False
    End If
End Sub

Private Sub ComboBox1_KeyDown(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
    Case 37 To 40: ArKeysPressed = True
    End Select
End Sub
person Siddharth Rout    schedule 03.08.2012
comment
Спасибо за подсказку, основная причина, по которой я хотел этого, - это навигация с помощью клавиш со стрелками. Мне удалось изменить ваш код, чтобы он работал на меня. - person Deepak; 03.08.2012
comment
В этом случае вы можете использовать логические переменные, чтобы гарантировать, что событие щелчка не будет запущено при нажатии клавиш со стрелками. См. обновленный код выше. - person Siddharth Rout; 03.08.2012