Excel VBA:多列列表框填充指定单元格报424错误求助
解决VBA代码中'424 对象必需'错误的问题
嗨,我来帮你排查这个问题~你遇到的'424 对象必需'错误,核心原因是代码里对列表框List属性的使用有误:
lbxStN.List(i, 0).Value = myVar4
这里的List属性本身就是直接返回列表项的值,它不是一个带有.Value属性的对象,所以你加上.Value就会触发对象缺失的错误。另外,原代码还有个逻辑反了的问题——你是想把列表框的值存到变量里,结果写成了把变量赋值给列表框,这也达不到你要的效果。
再加上你的列表框是fmMultiSelectSingle单选模式,完全没必要遍历所有项,直接用ListIndex获取选中项的索引就够了,代码会更简洁高效。
下面是修正后的完整代码:
Private Sub cmdBtnSelect2_Click() Dim selectedIndex As Long Dim wsDeN As Worksheet ' 获取选中项的索引(单选模式下未选中时,ListIndex会返回-1) selectedIndex = lbxStN.ListIndex ' 先判断是否有选中项,避免用户没选就点击按钮导致错误 If selectedIndex <> -1 Then ' 先引用DeN工作表,避免重复写冗长的路径 Set wsDeN = ThisWorkbook.Sheets("DeN") ' 直接从列表框取值并写入对应单元格,不需要中间变量(当然如果需要变量也可以加) wsDeN.Range("F19").Value = lbxStN.List(selectedIndex, 0) wsDeN.Range("C22").Value = lbxStN.List(selectedIndex, 1) wsDeN.Range("H22").Value = lbxStN.List(selectedIndex, 2) Else ' 可选:给个提示,告诉用户得先选东西 MsgBox "请先在列表框中选择一项哦!", vbExclamation End If End Sub
关键改动说明:
- 移除了多余的循环:单选模式下
ListIndex直接给出选中项的位置,不用遍历所有项 - 去掉了错误的
.Value调用:lbxStN.List(selectedIndex, 列号)直接返回对应的值 - 添加了未选中判断:防止用户没选就点击按钮时出现意外错误
- 用变量引用工作表:让代码更简洁,后续修改工作表名称时只改一处就行
内容的提问来源于stack exchange,提问作者Parus
相关产品推荐
相关产品推荐

