首页 > 解决方案 > 如何使用 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

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

非常感谢。

标签: excelvbalistview

解决方案


我认为这是 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

推荐阅读