我是VBA的新手,并将这个宏拼凑在一起,搜索“如何在excel中的两个特定日期之间进行过滤”。我试图让它从两个单元格中读取日期,并将显示的数据限制为这些日期之间的数据。工作簿的输入数据是一个随时间增长的SQL表,因此我需要将范围的左边界作为最后一行,并在其中包含值。我的AutoFilter部件中的每一行都返回“预期命名参数”错误,并突出显示:=符号。从论坛我读到这是因为使用VBA保留字作为变量名,但我不认为在这种情况下就是这种情况。
这是我的代码:
Public Sub MyFilter()
.AutoFilterMode = False
Dim datRight, datLeft As Date
Dim lastRow As Long
datLeft = Range("J1").Value
datRight = Range("J2").Value
lastRow = Range("A:A").Find("*", Range("A2"), searchdirection:=xlPrevious).Row
ActiveSheet.Range("F2:F" & lastRow).AutoFilter Field:=7,
Criteria1:=">=" & datLeft, _
Operator:= xlAnd,
Criteria2:="<=" & datRight, VisibleDropDown:=True
End Sub
答案 0 :(得分:0)
您将收到的第一个错误是.AutoFilterMode = False
行。请注意自动过滤前的DOT。您必须使用相关表格对其进行限定。例如,ThisWorkbook.Sheets("Sheet1").AutoFilterMode = False
当您尝试使用*
查找lastrow时,请始终使用THIS中提到的方法,否则如果工作表为空,则会出现错误。
您的声明Dim datRight, datLeft As Date
。在VBA中,只有最后一个变量将声明为Date
,第一个变量将声明为Variant
。将其更改为Dim datRight As Date, datLeft As Date
如果J1
和J2
值不是日期值,那么您将收到错误。
现在你的问题。您收到该错误是因为您缺少连续字符_
试试这个
ActiveSheet.Range("F2:F" & lastRow).AutoFilter Field:=7, _
Criteria1:=">=" & datLeft, _
Operator:=xlAnd, _
Criteria2:="<=" & datRight, VisibleDropDown:=True