我正在用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控件识别。任何帮助将不胜感激。
非常感谢。
答案 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