2014-09-02 56 views
0

我想用VBA連接到我的Access表。我希望能夠輸入採購訂單號,並將查詢中的值引用到Access表中。我想將該查詢的結果打印到我的Excel工作表中。這是我到目前爲止..任何想法?使用VBA連接Access到Excel,不會輸出Access的任何記錄

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

一個關於你的初始查詢幾件事情:

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 

您的查詢值將被投進的動態範圍。

我沒有測試代碼,所以我可能沒有抓到所有東西,但那些跳到我身上。

希望有幫助!

Nate

+0

非常感謝您的回覆!擺脫循環是一個好主意。你知道一種方法來引用單元格A1,而不是使用myValue。我試過「WHERE PO_NO ='&Sheet1.Range(A1).Value';」但它似乎並不奏效。任何見解? – Savino 2014-09-02 23:45:06

+0

表格(「Sheet1」)。範圍(「A1」)應該有效。如果你沒有用引號括起「A1」,Excel會將其視爲一個變量。 – 2014-09-02 23:47:09

+0

由於某些原因VBA不喜歡(「A1」)..我認爲這是「」,這是造成問題!儘管我很接近! – Savino 2014-09-03 00:10:31