【问题标题】:Excel VBA xlDateBetween Throws Application-defined or object-defined errorExcel VBA xlDateBetween 引发应用程序定义或对象定义的错误
【发布时间】:2018-05-25 04:47:14
【问题描述】:

我有一个日期时间列,我试图在它们之间进行过滤,无论我如何尝试格式化它,我都会收到运行时错误

'1004' 应用程序定义或对象定义的错误

这是我的代码:

Option Explicit

Sub filterDate()
''' Manually filters a datetime range '''
Dim hourly_picks As Worksheet
Dim pickCount As PivotTable
Dim picked_at As PivotField
Dim beginDate As Date
Dim endDate As Date



' set variables
Set hourly_picks = ThisWorkbook.Sheets("Hourly Pick Count by Employee")
Set pickCount = hourly_picks.PivotTables("PivotTable2")
Set picked_at = pickCount.PivotFields("picked_at")
beginDate = Format(hourly_picks.Range("L2").Value, "M/d/yyyy h:mm:ss")
endDate = Format(hourly_picks.Range("S2").Value, "M/d/yyyy h:mm:ss")    

' clear all filters then filter by picked_at range

pickCount.ClearAllFilters
picked_at.PivotFilters.Add Type:=xlDateBetween, Value1:=beginDate, Value2:=endDate

End Sub

我的beginDateendDate 是由用户输入的,当前的值是12/6/2017 23:01:0012/7/2017 7:30:00。使用MsgBoxDebug.Print 检查变量会得到12/6/2017 11:01:00 PM12/7/2017 7:30:00 AM。数据来自 mm/dd/yyyy h:mm:ss 格式的 postgreSQL 数据库。如果我将过滤列从pick_at更改为day_picked(仅显示mm/dd/yyyy的日期),那么它过滤没有问题。

beginDate/endDate 的格式有问题吗?如何准确判断 excel 是如何读取pick_at 的格式的?

【问题讨论】:

  • 如果你使用Debug.Print TypeName(hourly_picks.Range("L2").Value),你会得到String,还是Date
  • 1004错误在哪一行?
  • xlDateBetween 行出现错误。下面的代码打印以下内容:字符串、日期; Debug.Print (TypeName(hourly_picks.Range("L2").Value)) Debug.Print (TypeName(beginDate))

标签: vba excel date datetime


【解决方案1】:

更新:问题不是.Add 方法或我的参数的格式/数据类型有关。我试图过滤数据透视表过滤器部分中的数据透视字段。 在过滤器部分过滤数据透视字段的唯一方法是遍历每个数据透视项并将可见性设置为 True 或 False。这对我来说不是一个解决方案,因为我的数据透视字段有超过 17k 的数据透视项目,所以我必须找到另一种方法。

此外,我从研究这个问题中发现,在这里使用.Add 是不正确的——我应该改用.Add2。根据我的发现,.Add2 适用于所有 2013 及更高版本的 excel。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多