2014-09-02 55 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