由于某种原因,自动过滤器未将所有行都包含在信息中。我大约有40行信息,但他只包括15行(您可以在图片中看到,似乎自动筛选器表将行号置于蓝色)
Option Explicit
Private Sub Worksheet_Change(ByVal target As Range)
ActiveSheet.Unprotect
Application.EnableEvents = False
Dim sht As Worksheet
Dim LastRow As Long
Set sht = ActiveSheet
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
If target.Row = 1 Then
If target.Column > 1 Then
If target.Column = 5 Then
Cells(target.Row, 6).NumberFormat = "0"
Cells(target.Row, 9).NumberFormat = "General"
Cells(target.Row, 9).Value = "Figueira da Foz"
End If
End If
With ActiveSheet
Dim tableData As ListObject
Set tableData = .ListObjects("Tabela1")
If Not tableData Is Nothing Then
With Range("A3")
.AutoFilter Field:=1, VisibleDropDown:=False
.AutoFilter Field:=2, VisibleDropDown:=False
.AutoFilter Field:=3, VisibleDropDown:=False
.AutoFilter Field:=4, VisibleDropDown:=False
.AutoFilter Field:=5, Criteria1:="*" & Cells(target.Row, 5).Value & "*", VisibleDropDown:=False
.AutoFilter Field:=6, VisibleDropDown:=False
.AutoFilter Field:=7, Criteria1:="*" & Cells(target.Row, 7).Value & "*", VisibleDropDown:=False
.AutoFilter Field:=8, Criteria1:="*" & Cells(target.Row, 8).Value & "*", VisibleDropDown:=False
.AutoFilter Field:=9, VisibleDropDown:=False
If target.Column = 10 Then
If target.Value = vbNullString Then
.AutoFilter Field:=10, VisibleDropDown:=False
Else
.AutoFilter Field:=10, Criteria1:="" & Cells(target.Row, 10).Value, VisibleDropDown:=False
End If
End If
End With
End If
End With
End If
End Sub
如果我改为使用.Range(“ A3:A”&LastRow)放置,则会给出错误“运行时错误'1004':范围类的AutoFilter方法失败”。这个想法是让自动过滤器过滤所有数据,直到最后填充的行,而不仅仅是15
不知道如何解决此问题,有人可以帮助我吗?
答案 0 :(得分:0)
我建议您将其范围更改为表格(菜单项:格式为表格)。它们在VBA中更容易处理。
当过滤器不适用于工作表中的所有行时,没有一种简单的方法可以告诉您(这就是您所经历的)。
另一方面,表本身可以管理自己的行,即,如果您添加更多数据,它就可以增长。
ListObject
Set MyLO = Worksheets(1).ListObjects(1)
Set MyLO = Worksheets(1).ListObjects("TableName")
If Not MyLo.<Range as defined below> Is Nothing
)。SomeCell.End(xlDown)...
:
MyLO.HeaderRowRange
MyLO.DataBodyRange
MyLO.InsertRowRange
MyLO.TotalsRowRange
With MyLO.AutoFilter
...
End With