Excel 特殊单元格(12)。值在第一个隐藏行之后停止

Excel 特殊单元格(12)。值在第一个隐藏行之后停止,excel,vba,powerpoint,Excel,Vba,Powerpoint,我当前正在尝试将筛选列复制到数组中,以填充Powerpoint演示文稿中的组合框。 我使用的代码行是: ar = tbl.ListColumns(ColNumber).Range.SpecialCells(12).Value 其中“ar”是目标数组,“tbl”是源表,“ColNumber”是我试图复制的列数 我试图复制的筛选列有大约180条记录,但我注意到目标数组有6个值,因为它只选择了范围中的第一个“隐藏”行,并跳过了此后的每一个可见行 是否有一种方法可以获取每个可见行的值,而不仅仅是第一行

我当前正在尝试将筛选列复制到数组中,以填充Powerpoint演示文稿中的组合框。 我使用的代码行是:

ar = tbl.ListColumns(ColNumber).Range.SpecialCells(12).Value
其中“ar”是目标数组,“tbl”是源表,“ColNumber”是我试图复制的列数

我试图复制的筛选列有大约180条记录,但我注意到目标数组有6个值,因为它只选择了范围中的第一个“隐藏”行,并跳过了此后的每一个可见行


是否有一种方法可以获取每个可见行的值,而不仅仅是第一行的值?

由于范围不连续,您将面临这个问题。对于非连续范围,不能使用方法
Array=Range.Value
。有两种方法可以实现你想要的

方式1确定范围,循环单元格并填充数组。适合您的情况,因为您正在处理单栏

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim ar As Variant
    Dim i As Long, n As Long, ColNumber As Long
    Dim aCell As Range, rng As Range
    
    '~~> Change this to the relevant sheet
    Set ws = Sheet1
    
    '~~> Change this to the relevant table
    Set tbl = ws.ListObjects("Table1")
    
    ws.AutoFilterMode = False
    
    '~~> Change to relevant column number
    ColNumber = 1
    
    '~~> Autofilter as required
    tbl.Range.AutoFilter Field:=ColNumber, Criteria1:="Blah1"
    
    '~~> Set your range
    Set rng = tbl.ListColumns(ColNumber).Range.SpecialCells(12)
    
    '~~> Get the count of cells in that range
    n = rng.Cells.Count
        
    '~~> Resize the array to hold the data
    ReDim ar(1 To n)
        
    n = 1
        
    '~~> Store the values from that range into the array
    For Each aCell In rng.Cells
        ar(n) = aCell.Value
        n = n + 1
    Next aCell
    
    For i = LBound(ar) To UBound(ar)
        Debug.Print ar(i)
    Next i
End Sub
方式2确定范围,循环整个区域,然后循环该
区域中的单元格,然后填充数组。与上面的代码非常相似

在行动中


设置断点并键入
?tbl.ListColumns(ColNumber).Range.address在直接窗口中检查
tbl
是否包含所有行。