1

我是 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
4

1 回答 1

0
  1. 您将遇到的第一个错误是在.AutoFilterMode = FalseAutofilter 之前的 Notice the DOT 行。您必须使用相关表格对其进行限定。例如,ThisWorkbook.Sheets("Sheet1").AutoFilterMode = False

  2. 当您尝试使用 查找 lastrow 时*请始终使用本文中提到的方法,否则如果工作表为空白,您将收到错误消息。

  3. 你的声明Dim datRight, datLeft As Date。在 VBA 中,只有最后一个变量将被声明为Date,第一个变量将被声明为Variant. 将其更改为Dim datRight As Date, datLeft As DateAlso 如果J1J2值不是日期值,那么您将收到错误消息。

现在到你的问题。您收到该错误是因为您缺少连续字符_

试试这个

ActiveSheet.Range("F2:F" & lastRow).AutoFilter Field:=7, _
Criteria1:=">=" & datLeft, _
Operator:=xlAnd, _
Criteria2:="<=" & datRight, VisibleDropDown:=True
于 2013-11-06T16:26:26.223 回答