/ / Excel ActiveX ComboBox événement onClick - excel, vba, excel-vba, excel-2007, activexobject

Événement onClick Excel ActiveX ComboBox - excel, vba, excel-vba, excel-2007, activexobject

J'essaie d'utiliser ActiveX ComboBox dans Excel. Tout fonctionne bien au point d'être peuplé à partir du bouton déroulant click_event. Mais quand il définit l'événement click, je constate qu'il est déclenché même à l'aide de touches comme les touches fléchées. Est-ce un comportement normal, et si oui, comment puis-je le contourner?

Je travaille sur Excel 2007 VBA

C’est la méthode que j’utilisais pour autoriser la navigation dans la liste déroulante à l’aide de touches, j’attendrai de voir s’il existe une meilleure solution ..: lastkey est une variable publique

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

Réponses:

0 pour la réponse № 1

Oui c'est un comportement normal. L'utilisation des touches fléchées permet de naviguer dans les éléments de la liste déroulante et par conséquent l'événement click est déclenché.

Pour éviter cela, insérez ce code. Cela capture toutes les 4 touches fléchées et ne fait rien quand on appuie dessus. Le seul inconvénient de cette méthode est que vous ne pourrez plus naviguer avec les touches fléchées.

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

SUIVRE

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