我如何使Excel过滤macros使用date区域设置正确?

我发现macros代码(对我的来源道歉,我无法find我从哪里得到这个)做一些过滤,并修改它包括一个date范围。 这里是代码片段:

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 

我试图过滤的date范围是今年2月1日至2月28日。 当我单步执行代码,并在“start_date”variables上隐藏时,它显示date是一月份的第二天,电子表格中的二月一日(这是 电子表格 中的内容)。在它创build的filter中,正确地放入结束date,但是开始date是1月2日。

我怎样才能做这个工作? 我的语言环境(明智)首先从最小的date单位开始,即日,月,年。 Excel偏向于月,日,年。

代码行后:

 startDate = Range("start_date").Value 

我想你插入:

 MsgBox startDate & vbCrLf & Range("start_date").Value & vbCrLf & Range("start_date").Text 

你看到了什么??

编辑:

根据我们的实验,我们可以强制VBA正确解释date。 我放置文本string:

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 

基本上,迫使macros按照我的意愿解释string!

这只是一个解决方法…………..我不明白为什么VBA是错过行为。