2

Excel で ActiveX ComboBox を使用しようとしています。ドロップダウンボタンから入力されるまで、すべてが正常に機能します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
4

1 に答える 1

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
于 2012-08-03T09:29:08.750 に答える