【问题标题】:Running an Access Query from Excel从 Excel 运行 Access 查询
【发布时间】:2014-08-17 17:26:22
【问题描述】:

我正在尝试从 excel 访问中运行查询,然后使用 VBA 中的 ADO 将这些结果提取到 excel 文档中。不幸的是,我无法弄清楚如何运行访问查询,以便将 Excel 工作表的活动单元格中的数据用作访问查询中的条件。

我正在运行 Excel 和 Access 2007。我在下面包含了我目前拥有的代码。在此先感谢您的帮助。

Sub testdb()

Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Set con = New ADODB.Connection
With con
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open "H:\WBC\Lukas\STOP.accdb"
End With
con.Execute "HPRSearch"
   'the criteria field is 'Input', and I need to pull it from the active cell on the Excel Sheet
End Sub

【问题讨论】:

    标签: vba excel ms-access-2007 ado


    【解决方案1】:

    您需要做的第一件事是在 Access 中设置参数化查询。比如说,Query1 是(其中 ID 是一个整数):

    SELECT ID FROM Table1 WHERE ID = [MyID];
    

    [MyID] 周围的括号如果不能解析为字段名称,将被视为参数。现在,假设我们要恢复 ID 为 1 的记录。在 Excel 中设置您的代码:

    Sub testdb()
    
        Dim con As ADODB.Connection
        Dim cmd As ADODB.Command
        Dim prm As ADODB.Parameter
        Dim rs As ADODB.Recordset
    
        Set con = New ADODB.Connection
        Set cmd = New ADODB.Command
    
        With con
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .Open "H:\WBC\Lukas\STOP.accdb"
        End With
    
        With cmd
            .ActiveConnection = con
            .CommandText = "Query1"
            .CommandType = adCmdStoredProc
    
            .Parameters.Append cmd.CreateParameter("MyID", adInteger, adParamInput)
            .Parameters("MyID") = 1
        End With
    
        Set rs = New ADODB.Recordset
        rs.Open cmd
    
        Do Until rs.EOF
            Debug.Print rs.Fields("ID").Value
            rs.MoveNext
        Loop
    
        rs.Close
        con.Close
    
        Set cmd = Nothing
        Set rs = Nothing
        Set prm = Nothing
        Set con = Nothing
    
    End Sub
    

    在这一行找到这个引用 adInteger

    .Parameters.Append cmd.CreateParameter("MyID", adInteger, adParamInput)
    

    应替换为代表查询中参数的变量类型的适当常量(参见此处:http://www.w3schools.com/ado/met_comm_createparameter.asp)。在您的情况下,您将设置此行中表示的参数值

    .Parameters("MyID") = 1
    

    使用单元格中的值。

    就是这样。因此,您创建 Connection,创建 Command 对象(本质上是对 Access 查询的引用),设置 Command 对象的属性,包括参数,然后将结果带回记录集中。然后循环遍历记录集并使用这些值执行您想要的操作。

    【讨论】:

    • 感谢您的帮助。不幸的是,我仍然在 .Parameters.Append 行上遇到错误。 Excel 告诉我“参数对象定义不正确。提供的信息不一致或不完整。知道为什么会发生这种情况吗?
    • 查看此页面:tutorials.aspfaq.com/8000xxxxx-errors/…。您是否为变量类型指定了大小?
    • 是的,这就是问题所在。谢谢!最后一个问题。您呈现的第一行是 SELECT ID 行,是放在 Excel 宏还是 Access Query 中?我现在遇到了一个额外的错误(找不到项目),我想它与此有关。
    • 这是您的 Access 查询。
    • 这在我的机器上完美运行。抱歉迟到了,但非常感谢。还有一个问题。我更改了引用实际数据库的路径(这里的数据库只是我机器上的一个测试数据库,实际数据库在所有员工都可以访问的服务器上)。但是,我现在得到一个看似随机的错误 rs.Open cmd 行,说函数 'FormatPercent' 没有定义。我完全不知道这是从哪里来的,因为我没有定义这样的函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多