2013-10-18 35 views
0

我有一个Excel工作表,其Sheet1列A列有大约1000个项目编号。目前,我导入工作表Sheet1到一个名为ItemNumbers Access表和运行以下查询:Excel VBA - 如何查询使用列值作为参数的Access数据库?

SELECT MyTable.ItemNumber, MyTable.ItemName, MyTable.ItemPrice 
FROM [ItemNumbers] INNER JOIN MyTable ON [ItemNumbers].ItemNumber = MyTable.ItemNumber 
ORDER BY MyTable.ItemNumber; 

然后我复制/粘贴输出到Sheet2。

如何在Excel中的VBA中执行此操作并将结果放入记录集中?我可以弄清楚如何遍历记录集并将结果放入Sheet2中。我只是不确定在运行查询的代码。

到目前为止我有以下内容。它只是需要修改,以使用Sheet1列A中的值。

Dim cn As Object 
Dim rs As Object 
Dim strSql As String 
Dim strConnection As String 
Set cn = CreateObject("ADODB.Connection") 
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
    "Data Source=C:\MyDatabase.accdb" 
strSql = "SELECT MyTable.ItemNumber, MyTable.ItemName, MyTable.ItemPrice " & _ 
     "FROM MyTable " & _ 
     "WHERE WHERE (((MyTable.ItemNumber)= ??? IS IN Sheet1!A:A ??? )) " & _ 
     "ORDER BY MyTable.ItemNumber;"    
cn.Open strConnection 
Set rs = cn.Execute(strSql) 
rs.Close 
Set rs = Nothing 
cn.Close 
Set cn = Nothing 

谢谢!

+1

Jeff,你为什么要删除[在尝试INSERT INTO Access DB时出现自动化错误](http://stackoverflow.com/questions/19454094/excel-vba-automation-error-when-trying-insert-into-访问DB)? – HansUp

+0

OOPS!我认为这是我正在做的其他事情的重复,但我忘记了这是今天早上我正在做的一些事情。我不小心将它删除了! –

回答

0

如果我理解正确;你问什么是join Access中的表格与Excel中的表格(ADODB)。

检查从SO此链接,看看它的帮助:
Selecting 2 tables from 2 different databases (ACCESS)

我还没有尝试过Access和Excel结合起来,但我的猜测是,它会为Excel正常工作。

的另一种方法(以及当然将工作):

  1. 运行而不WHERE子句查询,并将结果存储在一个记录 ;
  2. 将您需要的Excel工作表中的数据存储在字典中, 其中ItemNumber(PK?)是关键;
  3. 运行记录集,并检查典型字典Exists函数 如果每个记录的ItemNumber在字典中可用;
  4. 如果记录可用,将 记录集值存储在单独的数组(或字典)中,您可以使用 进行进一步操作(或者如果这是您想要执行的操作,则执行直接操作)。
+0

谢谢!我会检查链接。如果我在没有'WHERE'子句的情况下运行查询,结果记录集将超过100,000条记录。会导致问题吗? –

+1

检查100000条记录需要一些时间(使用我提出的替代方案),尽管我不确定它需要多长时间。你可以测试它是否可行;你会每天做些什么? 当然,尽量让连接;这将是最快的。或者可以先将数据导出到Access并在那里进行查询?这也是一个可以考虑的选项。 – Trace

+0

我目前正在尝试将“Sheet1”值放入Access中的“DoCmd.Transferspreadsheet acImport”中,然后执行查询。感谢您的帮助! –

相关问题