如何解决将用户窗体列表框选中项写入Excel单元格时的Error 91错误
解决Error 91及实现多选列表框内容写入Excel单元格
错误原因分析
Error 91(对象变量或With块变量未设置)核心问题是lstCategory对象未被正确引用,常见诱因:
- 窗体
InvestorForm未加载,或窗体名称拼写错误 - 列表框控件名称
lstCategory与用户窗体上的实际控件名不一致 - 直接使用
[Counta(Database!B:B)]的单元格引用方式稳定性差,易引发对象关联问题
修正后的完整代码
Sub Submit() Dim sh As Worksheet Dim iRow As Long Dim Itemsselected As String Dim x As Long Dim lstCategory As MSForms.ListBox '明确指定为窗体控件类型 ' 稳定获取目标工作表和下一行行号 Set sh = ThisWorkbook.Worksheets("Database") iRow = sh.Cells(sh.Rows.Count, "B").End(xlUp).Row + 1 ' 确保窗体已加载并获取列表框对象 If Not InvestorForm.Visible Then InvestorForm.Show vbModeless '非模态加载避免代码阻塞 End If Set lstCategory = InvestorForm.lstCategory ' 遍历列表框选中项并拼接 With lstCategory For x = 0 To .ListCount - 1 '利用With块简化对象引用 If .Selected(x) Then Itemsselected = Itemsselected & .List(x) & ", " End If Next x End With ' 清理多余符号并写入目标单元格 If Len(Itemsselected) > 0 Then Itemsselected = Left(Itemsselected, Len(Itemsselected) - 2) End If sh.Cells(iRow, "B").Value = Itemsselected '写入Database表B列的下一行 End Sub
关键注意点
- 核对VBA编辑器属性窗口中的窗体名称(需为
InvestorForm)和列表框控件名称(需为lstCategory) - 若窗体是通过
Load InvestorForm后台加载而非显示,同样可正常获取控件对象 - 若需在窗体关闭后保留选中内容,需确保窗体实例未被销毁,或在窗体关闭前提前保存选中项
内容的提问来源于stack exchange,提问作者LinaB
相关产品推荐
相关产品推荐

