如何在Excel中的VBA中禁用ListView控件中的箭头键

时间:2018-10-04 07:36:38

标签: excel vba listview

我正在用Excel编写VBA应用程序。我需要使用ListView控件,因为这似乎是对列表中显示的不同行使用不同颜色的唯一方法。我需要启用/禁用窗体上的按钮,具体取决于在Listview控件中选择的行类型。如果我使用鼠标单击行,则效果很好-我有一个Listview1_Click例程,如下所示:

Private Sub Listview1_Click()

DeleteSelected.Enabled = False
EditSelected.Enabled = False
If comspec(Listview1.SelectedItem.Index) <> "HbA1c" Then
    DeleteSelected.Enabled = True
    EditSelected.Enabled = True
End If

End Sub

但是,如果使用向上和向下箭头键,则焦点似乎在ListView控件中从一行移到了下一行,但是按钮当然保持不变。我得出的结论是,解决此问题的唯一方法是禁用ListView控件中的箭头键。虽然似乎没有捕获箭头键的ListView事件-我尝试如下使用ListView1_KeyDown:

Private Sub Listview1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal shift As Integer)

If KeyCode = vbKeyUp or KeyCode = vbKeyDown Then KeyCode = vbNull

End Sub

但是会引发编译错误-我认为KeyDown事件不会被ListView控件识别。任何帮助将不胜感激。

非常感谢。

1 个答案:

答案 0 :(得分:0)

我认为这是vba keydown函数的正确签名。

它与该签名一起工作:

Private Sub ListView1_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
If KeyCode = vbKeyUp Or KeyCode = vbKeyLeft Or KeyCode = vbKeyDown Or KeyCode = vbKeyRight Then KeyCode = vbNull
End Sub