如何知道listview中是否未选择任何项?

如何知道listview中是否未选择任何项?,listview,excel,vba,Listview,Excel,Vba,我在userform中有一个删除按钮,用于从listview中删除所选项目。问题是,如果没有选择项目(至少没有突出显示),它会删除第一个项目。如何知道是否未选择任何项目,以避免删除任何内容 这是我尝试过的,当没有选择任何内容时,它仍然会删除第一项 Private Sub CommandButtonDelete_Click() If Not (ListView1.SelectedItem Is Nothing) Then ListView1.ListItems.Remove

我在userform中有一个删除按钮,用于从listview中删除所选项目。问题是,如果没有选择项目(至少没有突出显示),它会删除第一个项目。如何知道是否未选择任何项目,以避免删除任何内容

这是我尝试过的,当没有选择任何内容时,它仍然会删除第一项

Private Sub CommandButtonDelete_Click()
    If Not (ListView1.SelectedItem Is Nothing) Then
       ListView1.ListItems.Remove ListView1.SelectedItem.Index
   End If
End Sub
编辑:


问题似乎是总是有一个项目被选中。那么,新的问题是,当用户在listView之外单击时,如何取消选择该项

您可以取消选择项目,方法与确定是否未选择任何内容相同

Private Sub CommandButtonDelete_Click()
    If Not (ListView1.SelectedItem Is Nothing) Then
       ListView1.ListItems.Remove ListView1.SelectedItem.Index
   End If
End Sub
例如:

Me.ListBox1.ListIndex = -1
将取消选择在ListBox1中选择的任何内容。请注意,这是针对ListBox的,我还没有使用ListView,但我认为同样的情况也适用。当然你需要把这个放在某个地方。最简单的方法是将它放在
私有子用户窗体\u Click()
中,但我不建议这样做,因为在选择后,每当有人单击用户窗体时,它都会清除选择。放置它的最佳位置是
专用子列表框1\u Click()
,然后确定是否已选择单击的子列表框。在这种情况下,您可以编写代码来取消选择它

已确认此功能适用于列表框(未适用于列表视图):


请尝试“ListView1.SelectedItem=-1”而不是“ListView1.SelectedItem=Nothing”。我没有把它作为解决方案,因为我不确定它是否正确!但是,尝试应该很快。@jerussell没有。问题似乎是总是有一个项目被选中。这样效果更好,但仍然不是预期的行为。如果选择一个项目,然后单击表单另一部分中的文本框,该项目将不再高亮显示,但当单击“删除”时,它将删除该项目,因为它仍然处于选中状态(即使未高亮显示)。我可以为表单的每个文本框、标签等编写这行代码,但这似乎不是最好的选择。您是使用您在问题中发布的原始IF-THEN语句,还是我稍后建议的语句?我可以用ListBox测试它,它可以很好地使用这段代码(糟糕的编辑),我也会把它放在我的答案中:
Private Sub CommandButton1\u Click(),如果不是(Me.ListBox1.ListIndex=-1),那么Me.ListBox1.removietem(Me.ListBox1.ListIndex)如果End Sub Private Sub UserForm\u Click()Me.ListBox1.ListIndex=-1 End Sub Private Sub UserForm_Initialize()Me.ListBox1.AddItem“asdf”Me.ListBox1.AddItem“basdf”End Sub
可以,问题是当用户单击控件时,该项仍然处于选中状态,但高亮显示消失,因此,当用户单击“删除”时,无法判断将删除哪个项目。抱歉,我的代码示例中没有发现这个问题。这要么是列表框和列表视图之间的差异,要么是代码的差异。再说一遍,您使用哪种If语句?
如果不是(ListView1.SelectedItem为Nothing),则
语句可能不正确,因为它永远不会是
Nothing
。如果没有选择,那么它将是-1。我使用的是ListView1.SelectedItem什么都没有,并且工作正常。我使用ListView1.SelectedItem=Nothing代替ListBox1.ListIndex=-1,如果取消选中它,我已经选中了。