excel VBA listview,点击list的空白处无法取消选中。

excel VBA ListView控件 6.0,默认有一行被选中,点击列表的空白处也无法取消。
要求:点击空白处的地方,清空选中项。求代码。
要求:单击空白处,清空选中项。

第1个回答  2013-04-28
在VBA里编程时,这个控件是存在这种问题的,选中后,就无法恢复到“无选中项”的状态。

没有直接的解决办法,但可以取折中方法:
即在listview中添加一个“未选中”项,放在第一个选项,然后再加载其他选项。这样就可以通过指定list的索引来选中该项。
当然,这样处理需要在执行代码中提前判断一下,是否选择了“未选中”项,以便排错处理。追问

看不明白。如何添加未选中项?给个代码看看吧。

第2个回答  2013-04-28
你试下在LISTVIEW 单击事件中插入以下代码
设控件名为 YS01
修改下
Private Sub YS01_Click()
IF YS01.SelectedItem Is Nothing Then
YS01.ListItems(YS01.SelectedItem.Index).Selected = false
END IF
END SUB追问

不行。既然selecteditem是nothing,那么selecteditem.index还有值吗?所以不行,逻辑都不通。

追答

哦,对了,这点忘记了。那要不不用单击事件,用双击事件,if 判断去掉?

追问

不要用双击,看看windows的文件夹,都是单击空白取消选中的。

追答

那直接在单击事件内设置其他控件接收焦点呢?

追问

你的意思是:在listview单击事件中,把焦点给到另一个控件?这太不靠谱了吧。

追答

刚才没考虑周全。鼠标事件吧,右键,然后用上面的代码或者 用其他控件接收焦点的办法

追问

右键点击list,焦点却给到了list以外的其他控件,一样是不合理。看windows文件夹,用左键点击空白处,就可以取消选中,同时焦点还是原来选中那个文件,没有跑到别的控件上。

追答

那你直接SELECTED=FALSE 好了

追问

如果在listview的单击事件中增加SELECTED=FALSE,会导致listitem的单击事件无法显示选中状态的。

追答

又不是click事件,

Private Sub YS01_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
If Not UserForm1.YS01.SelectedItem Is Nothing And Button = 2 Then
YS01.ListItems(YS01.SelectedItem.Index).Selected = False
End If
End Sub

追问

哦。试了,可以用,但和设计初衷不一样,没有更好的办法就采用这个了。
难道这个控件就没有办法通过鼠标左键点击空白处取消选中项吗?如Magic_ye所说的,是控件本身问题?

追答

不是很清楚,listview用的不是很多,或者可以试下speadsheet。这个我也没用过,帮不上忙了。
建议在设计窗体时的功能可以变通下,如果真是需要完美的话,不如用vb不开发或者干脆用access来开发,何必局限于excel呢

本回答被提问者采纳
相似回答