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

如何解决将用户窗体列表框选中项写入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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:55:03