2012-08-03 4 views
2

엑셀에서 ActiveX 콤보 상자를 사용하려고합니다. 모든 것은 드롭 다운 버튼 click_event에서 채워지는 시점까지 잘 작동합니다. 하지만 클릭 이벤트를 설정하면 화살표 키와 같은 키 입력에서도 트리거됩니다. 이것은 정상적인 행동입니까, 그렇다면 어떻게 이것을 무시할 수 있습니까?엑셀 ActiveX 콤보 상자 onClick 이벤트

내가이 내가 키를 사용하여 콤보 상자에서 탐색 허용하는 데 사용하는 방법입니다 VBA

Excel 2007을 일하고, 난 더 나은 솔루션이 있는지 기다립니다 .. : 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 
+0

당신은 내 게시물을 편집 봤어? –

+0

미안하지만 나는 내 질문을 업데이트하기 전에 그것을 놓친 것 같아 – Deepak

+0

probs :) 그래서 당신의 문제를 해결합니까? –

답변

0

예 이것은 정상적인 동작입니다. 화살표 키를 사용하면 콤보 항목을 탐색하므로 클릭 이벤트가 발생합니다.

이 코드를 삽입하면 무시됩니다. 이것은 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 
+0

팁 주셔서 감사합니다, 내가 원했던 주요 이유는 화살표 키를 사용하여 탐색하는 것입니다. 나는 그것이 나를 위해 일하도록 코드를 수정할 수 있었다. – Deepak

+0

그런 경우 부울 변수를 사용하여 화살표 키를 누를 때 클릭 이벤트가 발생하지 않도록 할 수 있습니다. 위의 업데이트 된 코드를 참조하십시오. –

관련 문제