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

Excel VBA:用户窗体ListBox加载指定条件工作表数据的问题排查

问题分析与修正方案

原代码的核心问题

  1. 变量名拼写错误:声明的是filtrRow() As String,但实际使用的是filterRow——这是未声明的隐式变量,导致类型匹配错误,尤其是当单元格数据类型与字符串不兼容时(比如i=11列是数字/日期),触发“无效属性”错误。
  2. 对象赋值错误:如果想把filterRow作为Range对象使用,必须用Set关键字赋值(Set filterRow = shDSR.Range(Row.Address)),否则会把单元格值赋值给变量,变成Variant数组,后续索引访问容易出问题。
  3. 数据覆盖问题:最后执行的Me.lstRecords.List() = AllData会覆盖之前手动添加到ListBox的行,导致仅显示数组中的数据(而非手动填充的内容)。
  4. 不连续区域遍历隐患:AutoFilter返回的可见区域可能由多个不连续的Area组成,直接遍历rng.Rows可能导致行索引混乱。

无需数组的修正代码

直接遍历可见区域的行,逐行填充ListBox,避免数组中转:

Dim i As Long
Dim shDSR As Worksheet
Dim last_Row As Long
Dim rng As Range
Dim area As Range
Dim targetRow As Range
Dim rowIndex As Long

' 初始化工作表对象
Set shDSR = mydata1.Sheets("DSR")
' 获取数据最后一行(从A列判断)
last_Row = shDSR.Cells(shDSR.Rows.Count, 1).End(xlUp).Row

' 清除原有筛选
shDSR.AutoFilterMode = False
' 对AQ列(第43列)筛选"Closed"
shDSR.Range("A6:AQ" & last_Row).AutoFilter Field:=43, Criteria1:="CLOSED"

' 获取可见数据行(跳过第6行表头,从第7行开始)
On Error Resume Next
Set rng = shDSR.Range("A7:AQ" & last_Row).SpecialCells(xlCellTypeVisible)
On Error GoTo 0

' 初始化ListBox
Me.lstRecords.Clear
Me.lstRecords.ColumnCount = 43 ' A到AQ共43列

If Not rng Is Nothing Then
    rowIndex = 0
    ' 遍历每个不连续的可见区域
    For Each area In rng.Areas
        ' 遍历区域内的每一行
        For Each targetRow In area.Rows
            Me.lstRecords.AddItem
            ' 遍历当前行的每一列,填充到ListBox
            For i = 1 To 43
                Me.lstRecords.List(rowIndex, i - 1) = targetRow.Cells(1, i).Value
            Next i
            rowIndex = rowIndex + 1
        Next targetRow
    Next area
Else
    MsgBox "No data matches the filter criteria."
End If

' 可选:清除筛选状态
shDSR.AutoFilterMode = False

关键优化点

  • 明确遍历每个Area:处理AutoFilter后的不连续区域,避免行索引混乱。
  • 跳过表头行:直接从第7行数据行获取可见区域,无需处理表头。
  • 直接访问单元格值:通过targetRow.Cells(1,i).Value直接读取数据,避免变量拼写和类型转换错误。
  • 移除数组覆盖代码:注释/删除Me.lstRecords.List() = AllData,确保手动填充的行不会被覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:10:35