【问题标题】:How to send parameters to microsoft access query so that I can import an access parameter query to excel?如何将参数发送到 Microsoft 访问查询,以便我可以将访问参数查询导入到 Excel?
【发布时间】:2019-03-10 03:57:36
【问题描述】:

我需要将具有弹出输入参数的 microsoft access 查询导入到 excel 中。我尝试了下面的代码,但它不起作用。我收到错误 93,告诉我未设置对象或对象变量。

我希望能够在 excel 中引用两个包含当前和上个月值的单元格,然后将这些值作为输入发送到访问查询,但现在我在 VBA 中输入它们以保持简单。

任何帮助将不胜感激!

谢谢!

Sub Acess_Connection()
     Dim dbs As DAO.Database
     Dim rst As DAO.Recordset
     Dim qdf As DAO.QueryDef
     Dim i As Long
     Dim wsh As Worksheet

     Set dbs = DBEngine.OpenDatabase("filepath")                         
     Set qdf = dbs.QueryDefs("parameter_query")

     qdf.Parameters("Date_PreviousMonth") = "31.12.2018"
     qdf.Parameters("Date_CurrentMonth") = "31.01.2019"

     Set rst = qdf.OpenRecordset("parameter_query")          
     Set wsh = Worksheets("Sheet1")

     For i = 0 To rst.Fields.Count - 1   
         wsh.Cells(1, i + 1).Value = rst.Fields(i).Name      
     Next

     wsh.Range("A1").Resize(ColumnSize:=rst.Fields.Count).Font.Bold = True
     wsh.Range("A2").CopyFromRecordset rst

     rst.Close
     Set rst = Nothing
     dbs.Close
     Set dbs = Nothing
 End Sub

【问题讨论】:

  • “不起作用”是什么意思 - 错误消息,错误结果,什么也没有发生?查询对象中是否有 PARAMETERS 子句?需要在每个模块头中有Option Explicit。变量存在拼写错误:Set qfd 应为 Set qdf
  • 我不知道参数子句是什么意思,所以我不确定。感谢您的反馈意见。它不起作用我的意思是我收到错误“数据类型转换失败”错误 3421,并且设置的第一行以黄色突出显示。
  • 查询 docs.microsoft.com/en-us/office/client-developer/access/… 中的 PARAMETERS 子句(或声明)。请参阅 Gustav 关于转换错误的回答。我假设您正在用适当的信息替换 filepathparameter_query
  • 不,我隐式声明了参数,即:select * from table1 where date = date_CurrentMonth。 (其中“日期”是“table1”中的一列)。是的,我纠正了拼写错误
  • 我有一个使用 DAO 记录集从 Access 中提取数据的工作簿,但无法再让它工作。希望你有更好的运气。

标签: excel vba ms-access parameters


【解决方案1】:

我用一个非常简单的查询测试了通过 VBA 设置查询参数,它适用于以下调整。

  1. 查询对象必须在适当的字段下有 PARAMETERS 子句和参数

  2. 使用# 分隔符作为日期条件#12/31/2018#

  3. Set rst = qdf 行不使用查询名称作为参数,变量 qdf 提供的名称如此正确 Set rst = qdf.OpenRecordset() 将使用默认记录集类型。

  4. 对于早期绑定,在 VBA 编辑器中选择 Microsoft Office 14.0 Access Database Engine Object Library,至少对于更新版本的 Excel 是这样

【讨论】:

  • 非常感谢您的帮助!我通过使其成为参数查询并将excel中的数据类型从短文本更改为日期来使其工作。我将输入保持在“2018 年 12 月 31 日”,它仍然有效。
【解决方案2】:

您可能必须将有效的日期值传递给参数:

qdf.Parameters("Date_PreviousMonth").Value = #12/31/2018#
qdf.Parameters("Date_CurrentMonth").Value = #01/31/2019#

【讨论】:

    【解决方案3】:

    尝试在参数名称周围添加方括号:

    qdf.Parameters("[" & "Date_PreviousMonth" & "]") = "31.12.2018"
    

    【讨论】:

    • 仅当名称包含空格或标点符号/特殊字符时才需要括号(仅下划线例外),但是,它们不应该受到伤害。不需要串联,但同样不应该受到伤害。
    • 啊,不知道。谢谢
    • 另外,如果名称是保留字,请使用括号。所以建议在命名约定中避免这些条件。
    猜你喜欢
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多