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
代码改动说明
- 遍历选中项目的正确方式:用
For Each varItem In Me.SelectTreatment.ItemsSelected直接遍历所有选中项的索引,比原代码的For循环更高效,也不会出现判断错误。 - 处理Null值:
Nz(值, 替代值)函数会自动把Null转换成指定的替代值(这里是0),彻底避免空值相加的错误。 - 补充结果赋值:最后加上了把总和赋值给文本框的代码,你需要将
txtTotalDuration替换成表单中实际用来显示结果的文本框名称。
额外建议
如果你的时长数据可能包含小数(比如1.5小时),建议把sumduration的类型从Integer改成Double,避免精度丢失。
内容的提问来源于stack exchange,提问作者user9786191




