我被困在这个Excel宏的最后一位。我根据this template对其进行了调整,根据用户输入的条件对数据列表进行高级过滤。
我在线上得到了一个超出范围错误的下标
Sheets("Data (2)").ListObjects("table4").TableStyle = "TableStyleMedium2"
table4
我的所有数据都悬而未决;我通过选择相关的单元格然后命名该范围来命名。
在上面添加了Dim table4 As String
行;它不是在原始代码中,但当我在Excel中查找错误时,它说我需要先声明数组。数据只是文本字符串,所以string
很好 - 我不会在过滤完成后计算任何内容。
有什么想法吗?
Option Explicit
Private Sub btnFilter_Click()
Application.ScreenUpdating = False
' clear old data first
Dim n As Long
n = Cells(Rows.Count, "A").End(xlUp).Row
If n > 23 Then
Rows("24:" & CStr(n)).Delete Shift:=xlUp
End If
With Sheets("Data (2)")
.Select
' apply filter
.Range("A:AW").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=.Range("Criteria2"), Unique:=False
' select filtered rows
Dim rngFilter As Range
Set rngFilter = .Range("A2", .Cells(.Rows.Count, "A").End(xlUp)).Resize(, 9)
' count number of filtered rows
On Error Resume Next
n = 0
n = rngFilter.SpecialCells(xlCellTypeVisible).Rows.Count
On Error GoTo 0
If n = 0 Then
Sheets("Filter (2)").Select
' skip copying
GoTo skip_copying
End If
' copy selection
rngFilter.Select
Selection.Copy
End With
' paste new data
Sheets("Filter (2)").Select
Sheets("Filter (2)").Range("A24").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("Filter (2)").Range("A24").Select
skip_copying:
' remove filter
Sheets("Data (2)").ShowAllData
' table style
Dim table4 As String
Sheets("Data (2)").ListObjects("table4").TableStyle = "TableStyleMedium2"
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:0)
您创建了一个命名范围,而不是ListObject
,因此无法识别您对table4
的引用。以下是将您的数据范围转换为ListObject
:https://msdn.microsoft.com/en-us/library/eyfs6478.aspx