我想使用VBA连接到我的Access表。我希望能够输入采购订单编号,并将查询中的值引用到Access表中。我想将该查询的结果打印到我的Excel工作表。这就是我到目前为止......任何想法?
Sub CommandButton1_Click()
Dim myValue As Variant
myValue = InputBox("Enter Purchase Order Number:")
Range("A1").Value = myValue
Call ADO_Conn(myValue)
End Sub
Sub ADO_Conn(myValue)
Dim conn As New Connection
Dim rstAnswer As New ADODB.Recordset
Dim connected As Boolean
Dim RootPath, DBPath As String
Dim tempString As String
connected = False
RootPath = "Z:\BSD Internship Program\FY14 Intern Files\John Jameson\Vouchers"
DBPath = RootPath & "Acquisition Support Datamart Build 9.11-03.accdb"
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source= Z:\BSD Internship Program\FY14 Intern Files\John Jameson\Vouchers\Acquisition Support Datamart 9.1103.accdb;"
connected = True
rstAnswer.Open "SELECT VW_PUB_PURCHASE_ORDER.PO_NO FROM VW_PUB_PURCHASE_ORDER " & _
"WHERE VW_PUB_PURCHASE_ORDER.PO_NO = ' " & myValue & " ';", conn, adOpenKeyset, adLockOptimistic
Do Until rstAnswer.EOF
tempString = CStr(rstAnswer!VW_PUB_PURCHASE_ORDER)
Application.ActiveWorkbook.Worksheets("Sheet1").Range("A5").Value = tempString
rstAnswer.MoveNext
Loop
rstAnswer.Close
conn.Close
connected = False
End Sub
答案 0 :(得分:0)
关于初始查询的一些事项:
rstAnswer.Open "SELECT VW_PUB_PURCHASE_ORDER.PO_NO FROM VW_PUB_PURCHASE_ORDER " & _
"WHERE VW_PUB_PURCHASE_ORDER.PO_NO = ' " & myValue & " ';", conn, adOpenKeyset, adLockOptimistic
您在此查询中仅搜索PO_NO,因此这是唯一将返回的值。如果你想要的不仅仅是那些数据(我假设你可能),那么你想要这个:
rstAnswer.Open "SELECT * FROM VW_PUB_PURCHASE_ORDER " & _
"WHERE VW_PUB_PURCHASE_ORDER.PO_NO = ' " & myValue & " ';", conn, adOpenKeyset, adLockOptimistic
...星号表示"全部"。
另外,这一点让我担心:
' " & myValue & " '
您要在搜索字词中添加前导和尾随空白。这可能是也可能不是你想要的,但我认为你不想要这个。你可能想要:
'" & myValue & "'
如果您的PO_NO是数值,则需要省略撇号:
" & myValue & "
最后,我不认为你想要循环。 SELECT查询将返回所有结果,而不需要您迭代行。也许你应该尝试摆脱你的"做"循环并使用它代替:
Worksheets("Sheet1").Range("A5").CopyFromRecordset rstAnswer
然后,您的查询值将被放入指定表格&的动态范围内。细胞
我没有对代码进行测试,所以我可能没有抓到所有内容,但是那些代码跳出来了。
希望有所帮助!
内特