我正在将过滤器应用于日期列,并且它在我的计算机上运行良好(美国区域设置)。当我将工作簿发送给英国的用户时,相同的过滤器失败(英国区域设置)。没有错误,过滤器只是失败并且没有过滤行。如果我手动设置 VBA 代码中返回的日期,则过滤器起作用。
'/ ALERT_DATE : named Range containing date. Cell Format is set as date.
'/ Column 5 in wksTemp contains all valid dates in correct format.
'/ Following code works fine in US Regional Settings.
wksTemp.UsedRange.AutoFilter
wksTemp.UsedRange.AutoFilter Field:=5, Criteria1:= _
"<" & wksSettings.Range("ALERT_DATE")
wksTemp.UsedRange.SpecialCells(xlCellTypeVisible).Copy wksDest.Cells(1, 1)
Application.CutCopyMode = False
'/ Same code fails with UK settings.
尝试过,Value2
, Format
, DateSerial
Nothings 似乎以英国格式过滤行。
在英国设置中,如果我手动设置 "<" & wksSettings.Range("ALERT_DATE")
的值例如28/05/2017
在过滤器中,它起作用了。
任何想法。如何纠正这个问题,使其适用于英国和美国?
最佳答案
啊,DateFilter 的日期问题:)
最简单的解决方法是将日期转换为长日期。从 VBA 开始就有效,或者至少我这么认为。
wksSettings.Range("ALERT_DATE") ---->> Clng(wksSettings.Range("ALERT_DATE"))
试试这个:
wksTemp.UsedRange.AutoFilter
wksTemp.UsedRange.AutoFilter Field:=5, Criteria1:= _
"<" & Clng(wksSettings.Range("ALERT_DATE"))
wksTemp.UsedRange.SpecialCells(xlCellTypeVisible).Copy wksDest.Cells(1, 1)
Application.CutCopyMode = False
未经测试,但应该可以工作。
关于vba - 美国和英国设置之间奇怪的日期过滤器行为 : VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478877/