美国和英国之间奇怪的日期过滤行为设置:VBA

时间:2017-04-18 17:41:58

标签: excel vba excel-vba

我将过滤器应用于日期列并在我的机器上正常工作(美国区域设置)。当我将工作簿发送给英国的用户时,相同的过滤器失败(英国区域设置)。没有错误,过滤器只是失败而不是过滤行。如果我手动设置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. 

尝试,Value2FormatDateSerial nothings似乎以英国格式过滤行。

在英国设置中,如果我在过滤器中手动设置"<" & wksSettings.Range("ALERT_DATE")的值,例如28/05/2017,则可以正常工作。

任何想法。如何纠正这一点,以便它适用于英国和美国?

1 个答案:

答案 0 :(得分:3)

啊,DateFilter的Date问题:)

最简单的修复,将您的日期转换为长。从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 

没有经过测试,但应该可以使用。