动态表值过滤器中的日期转换错误

时间:2016-05-16 20:31:18

标签: excel vba excel-vba date dynamic-tables

使用excel-Access VBA环境。 excel页面中的vba代码将日期单元格的值分配给日期过滤器。由于我总是使用panama locale工作dd / mm / yyyy格式,因此代码适用于12日之后的日期(意味着没有指定月份的歧义),但是对于小于13的日期,它将日期转换为它的数值,我收到一条错误消息,说42502(例如,12月16日)不是过滤器的有效值。当这一天过去了12日,它运作正常。我如何捕获此错误并解决它?

代码:

ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh

    ' Range R1 contains the value we desire to filter the date of dynamic table

    ' Range B1 contains the date filter of the dynamic table    

    Range("B1").Select

    ActiveSheet.PivotTables("PivotTable1").PivotFields("fecha").ClearAllFilters

    Application.ScreenUpdating = False
    'ActiveSheet.Range("B1") = Range("R1").Value
    ff = Range("R1").Value
    ActiveSheet.Range("B1") = Right("00" & Day(ff), 2) & "/" & Right("00" & Month(ff), 2) & "/" & Year(ff)
    Application.ScreenUpdating = True

这是我试图解决这个问题的众多方法之一,但只能在本月12日之后工作几天

2 个答案:

答案 0 :(得分:1)

如果您发布了一些代码会很有帮助,但我相信问题是您需要在代码中指定您使用的格式,而不是让VBA为您猜测。由于Microsoft是美国公司,我们使用MM / DD / YYYY格式,它可能默认为美国格式,但是当它达到13日时,它默认为日期上下文中的非美国格式。 / p>

答案 1 :(得分:0)

试试这个:

Dim lastRow, i As Long
Dim datStg As String

lastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

For i = 2 To lastRow
    dateStg = Cells(i, "R").Text
    If datStg <> "" Then
        Cells(i, "B").Value = DateSerial(Mid(dateStg, 8, 4), Mid(dateStg, 5, 2), Mid(dateStg, 2, 2))
        Cells(i, "B").NumberFormat = "dd/mm/yyyy"
    End If
Next i