我发现宏代码(对我的来源道歉,我无法找到我从哪里得到)进行一些过滤并修改它以包含日期范围。以下是代码段:
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim copyFrom As Range
Dim lRow As Long '<~~ Not Integer. Might give you error in higher versions of excel
Dim strSearch As String
Dim startDate As Date
Dim endDate As Date
Set wb1 = ThisWorkbook
Set ws1 = wb1.Worksheets("Data")
strSearch = Range("client").Value
startDate = Range("start_date").Value
endDate = Range("end_date").Value
With ws1
'~~> Remove any filters
.AutoFilterMode = False
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
With .Range("A1:C" & lRow)
.AutoFilter Field:=1, Criteria1:="=*" & strSearch & "*"
.AutoFilter Field:=3, Criteria1:=">=" & startDate, Operator:=xlAnd, Criteria2:="<" & endDate
Set copyFrom = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
End With
'~~> Remove any filters
'.AutoFilterMode = False
End With
我想要过滤的日期范围是今年2月1日到2月28日。当我单步执行代码并粘贴'start_date'变量时,它显示的日期为1月2日的,其中在电子表格中, 2月1日(这是电子表格中的内容。当我查看它创建的过滤器时,它会正确地输入结束日期,但开始日期是1月2日。
我该如何使这项工作?我的语言环境(明智地)首先从最小的日期单位开始,即日,月,年。 Excel偏向于月,日,年。
答案 0 :(得分:2)
代码行之后:
startDate = Range("start_date").Value
我希望你插入:
MsgBox startDate & vbCrLf & Range("start_date").Value & vbCrLf & Range("start_date").Text
你看到了什么??
修改强>
根据我们的实验,我们可以强制 VBA 正确解释日期。我放置文本字符串:
28/2/2014
在单元格 D9 中运行:
Sub DoWhatsRight()
Dim s As String, d As Date
s = Range("D9").Text
ary = Split(s, "/")
d = DateSerial(ary(2), ary(1), ary(0))
MsgBox d
End Sub
基本上,强制宏来解释我想要的字符串!
这只是一种解决方法..............我不明白为什么 VBA 会表现不佳。