You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Multiselect List Box求和报错‘Invalid Use of Null’,求排查与解决方案

Access VBA:解决Multiselect List Box求和时的「Invalid Use of Null」错误

我来帮你排查这个问题哈,你的代码里有两个关键问题导致了「Invalid Use of Null」错误,咱们一步步来解决:

问题分析

  • ItemsSelected集合用法错误:你用Me.SelectTreatment.ItemsSelected(i)来判断是否选中是不对的——ItemsSelected是存储选中项目索引的集合,不是布尔数组,不能通过索引下标直接访问判断。
  • 未处理Null值:List Box的第5列(Column(4),因为VBA里列索引从0开始计数)如果存在Null值,直接相加就会触发「Invalid Use of Null」错误,必须先将Null转换为0再计算。

修正后的代码

Private Sub SelectTreatment_Click()
    Dim varItem As Variant
    Dim sumduration As Integer
    
    sumduration = 0
    ' 遍历所有选中的项目
    For Each varItem In Me.SelectTreatment.ItemsSelected
        ' 用Nz函数把Null转为0,避免空值相加错误
        sumduration = sumduration + Nz(Me.SelectTreatment.Column(4, varItem), 0)
    Next varItem
    
    ' 将结果填入目标文本框,记得把txtTotalDuration改成你实际的文本框控件名
    Me.txtTotalDuration.Value = sumduration
End Sub

代码改动说明

  1. 遍历选中项目的正确方式:用For Each varItem In Me.SelectTreatment.ItemsSelected直接遍历所有选中项的索引,比原代码的For循环更高效,也不会出现判断错误。
  2. 处理Null值Nz(值, 替代值)函数会自动把Null转换成指定的替代值(这里是0),彻底避免空值相加的错误。
  3. 补充结果赋值:最后加上了把总和赋值给文本框的代码,你需要将txtTotalDuration替换成表单中实际用来显示结果的文本框名称。

额外建议

如果你的时长数据可能包含小数(比如1.5小时),建议把sumduration的类型从Integer改成Double,避免精度丢失。

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

火山引擎 最新活动