我有一张桌子ReportContent_Table,我想用 VBA 做以下事情:
- 按特定列过滤表
- 按特定列对表进行排序
- 将过滤后的表获取到数组
Sub Test
Dim ReportContent As ListObject
Set ReportContent = ThisWorkbook.Worksheets("ReportContent").ListObjects("ReportContent_Table")
Dim rng As Range
Set rng = ThisWorkbook.Worksheets("ReportContent").Range("ReportContent_Table[Sorting_Column]")
''' Clear table filter
ReportContent.AutoFilter.ShowAllData
''' Change the Date column to short date format: m/d/yyyy
ReportContent.ListColumns("Date").DataBodyRange.NumberFormat = "m/d/yyyy"
''' Filter table by column 3
ReportContent.Range.AutoFilter Field:=3, Criteria1:="=12/21/2019", Operator:=xlAnd
''' Filter table by column 2
ReportContent.Range.AutoFilter Field:=2, Criteria1:="=A", Operator:=xlAnd
''' Sort the table in ascending order
With ReportContent.Sort
.SortFields.Clear
.SortFields.Add Key:=rng, SortOn:=xlSortOnValues, Order:=xlAscending
.Header = xlYes
.Apply
End With
End Sub
在上面的代码之后,我的表格正在被过滤和排序(表格数据模糊):

然后我想把表数据放到一个数组中:
''' Get the report content data to an array
Dim ReportData() As Variant
ReportData = ReportContent.DataBodyRange.SpecialCells(xlCellTypeVisible).Value
我预计 ReportData 数组将包含 25 个项目,但是,它只有 1 个项目。

我的代码有什么问题?谢谢。