VBA Excel遍历UserForm的ListView控件判断选中激活状态的方法咨询
问题原因
- 第一段代码存在语法错误:VBA 没有内置
is selected这类控件选中状态的直接判断语句,同时控件名拼接的调用语法书写错误。 - 第二段代码逻辑错误:
SelectedItem是对象类型,不能直接和数字比较;且 ListView 默认配置为HideSelection=False,即使控件失去焦点,原有选中项仍会被标记为选中状态,这就是你未主动选中控件仍会弹出第一个 ListView 选中项提示的原因。
解决方案
场景1:仅判断当前处于激活状态(焦点所在)的 ListView
Private Sub CommandButton8_Click() Dim i As Integer For i = 1 To 4 If Me.ActiveControl.Name = "ListView" & i Then MsgBox "当前激活的控件为:" & Me("ListView" & i).Name End If Next i End Sub
场景2:判断存在选中项且处于激活状态的 ListView
如果需要同时满足控件激活、且有选中项两个条件,使用如下代码:
Private Sub CommandButton8_Click() Dim i As Integer Dim lv As Object For i = 1 To 4 Set lv = Me("ListView" & i) ' 先判断是否存在选中项,避免对象为空触发运行时错误 If Not lv.SelectedItem Is Nothing Then ' 额外判断控件是否为当前焦点控件,排除失去焦点后残留的选中状态 If Me.ActiveControl.Name = lv.Name Then MsgBox "ListView" & i & " 选中项内容为:" & lv.SelectedItem.Text End If End If Next i End Sub
注意事项
- 如果希望 ListView 失去焦点后不保留选中项的高亮显示,可以在
UserForm_Initialize事件中为每个 ListView 设置ListViewX.HideSelection = True,即可避免未激活的 ListView 仍返回选中项的问题。 - 访问
SelectedItem属性前必须先判断对象是否为Nothing,否则当 ListView 没有任何选中项时会触发运行时错误。
内容的提问来源于stack exchange,提问作者Michał
相关产品推荐
相关产品推荐

