You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

列表框间项转移:最后一行选中项功能异常问题

解决Listbox单选模式下最后一项转移异常的问题

嘿,我一眼就瞅出问题出在哪了——你的循环范围写错啦!

问题根源

Listbox的索引是从0开始计数的,而Unsorted.ListCount返回的是列表里的总项数。比如你有5个项,索引就是0到4,但你的代码里写了For x = 0 To count(这里count等于ListCount=5),最后一次循环x会等于5,这时候访问Me.Unsorted.Selected(5)其实是在访问一个根本不存在的索引!这种越界访问会触发隐性错误,直接导致代码逻辑混乱,也就是你看到的“选中最后一项时清除上方所有值”的异常表现。

修正后的代码

把你的Add_Click事件代码改成下面这样,就能解决问题:

Option Explicit
Option Base 1

Private Sub Add_Click()
    Dim x As Integer, count As Integer
    count = Me.Unsorted.ListCount
    
    ' 先判断列表是否为空,避免空列表报错
    If count = 0 Then Exit Sub
    
    ' 遍历有效索引:从0到总项数-1
    For x = 0 To count - 1
        If Me.Unsorted.Selected(x) = True Then
            ' 将选中的项添加到Sorted列表
            Me.Sorted.AddItem Me.Unsorted.List(x)
            ' 单选模式下,找到选中项就直接退出循环,不用白跑
            Exit For
        End If
    Next x
End Sub

关键改动说明

  1. 修正循环范围:把For x = 0 To count改成For x = 0 To count - 1,确保只遍历Listbox的有效索引,不会触发越界错误
  2. 单选模式优化:因为是单选,找到选中项后直接Exit For,既提升效率,也避免后续循环可能带来的意外问题
  3. 空列表判断:先检查Unsorted是否为空,防止空列表时执行循环导致的错误

这样修改后,最后一项的选中转移逻辑就会和其他项完全一致啦!

内容的提问来源于stack exchange,提问作者William

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:41:07