我正在尝试从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
答案 0 :(得分:3)
您需要做的第一件事是在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)
应替换为表示查询中Parameter的变量类型(请参阅此处:http://www.w3schools.com/ado/met_comm_createparameter.asp)的正确常量。在您的情况下,您可以设置在此行中表示的参数值
.Parameters("MyID") = 1
使用您单元格中的值。
就是这样。因此,您创建Connection,创建一个Command对象(实际上是对Access查询的引用),设置Command对象的属性(包括参数),然后将结果带回记录集。然后遍历记录集并使用值执行您想要的操作。