"运行时错误3464" - 条件表达式中的数据类型不匹配

时间:2013-03-10 16:01:11

标签: excel vba

[下面我在vba中设置参数以发送到访问查询。查询采用开始日期,结束日期,原因代码和子组。所有标准都是String,除了Sub Group是一个整数。

Sub FinalDrill()

'Step 1: Declare your variables
Dim DatabasePath As String
DatabasePath = ThisWorkbook.Path & "\SpreadSheetData.accdb"
Dim MyDatabase As DAO.Database
Dim MyQueryDef As DAO.QueryDef
Dim MyRecordset As DAO.Recordset
Dim i As Integer

'Step 2: Identify the database and query
Set MyDatabase = DBEngine.OpenDatabase _
(DatabasePath)
Set MyQueryDef = MyDatabase.QueryDefs("FinalDrill")

'Step 3: Define the Parameters


With MyQueryDef
    .Parameters("[Start Date]") = GetStartDate()
    .Parameters("[End Date]") = GetEndDate()
    .Parameters("[Reason Code]") = "C"
    .Parameters("[Sub Group]") = 2
End With



'Step 4: Open the query
Set MyRecordset = MyQueryDef.OpenRecordset

最后一行抛出“运行时错误3464” - 条件表达式中的数据类型不匹配

我没有得到它,因为我已经从不同的潜艇运行这种确切类型的查询,只有开始日期和结束日期,它有效....即使是我评论

'.Parameters("[Reason Code]") = "C"
'.Parameters("[Sub Group]") = 2

并将访问查询更改为除开始日期和结束日期之外我得到相同的错误。

也许我累了,错过了一些明显的东西,任何帮助都会很棒。

更新

以下查询有效,所以我猜测问题出在我的访问查询中。

'Step 1: Declare your variables
Dim DatabasePath As String
DatabasePath = ThisWorkbook.Path & "\SpreadSheetData.accdb"
Dim MyDatabase As DAO.Database
Dim MyQueryDef As DAO.QueryDef
Dim MyRecordset As DAO.Recordset
Dim i As Integer

'Step 2: Identify the database and query
Set MyDatabase = DBEngine.OpenDatabase _
(DatabasePath)
Set MyQueryDef = MyDatabase.QueryDefs("levelOnePie")

'Step 3: Define the Parameters


With MyQueryDef
    .Parameters("[Start Date]") = GetStartDate()
    .Parameters("[End Date]") = GetEndDate()
End With



'Step 4: Open the query
Set MyRecordset = MyQueryDef.OpenRecordset

一旦找到,就会更新更多结果。

1 个答案:

答案 0 :(得分:0)

好吧,即使函数GetStartDate()和GetEndDate()适用于其他subs()中的先前查询,我想到了Wawrzyniec所说的内容,并将日期参数更改为包含它们的单元格。

With MyQueryDef
    .Parameters("[Start Date]") = Sheets("DASHBOARD").[C4]
    .Parameters("[End Date]") = Sheets("DASHBOARD").[C5]
    .Parameters("[Reason Code]") = "C"
    .Parameters("[Sub Group]") = 2
End With

我有这些函数来获取日期的原因是仪表板中的一个功能是,如果StartDate单元格为空,它将使用数据开始的日期,没有结束日期意味着它将使用今天的日期。

在此之前执行另外两个下钻时,我将把日期放在单元格中,这样就可以在最后的下钻中抓取它们。