0

我有一张桌子ReportContent_Table,我想用 VBA 做以下事情:

  1. 按特定列过滤表
  2. 按特定列对表进行排序
  3. 将过滤后的表获取到数组
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 个项目。 在此处输入图像描述

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

4

0 回答 0