Excel VBA交叉引用Excel表与SQL表

我一直在使用下面的VBA代码使用Excel VBA运行SQL查询 (注意在这个链接upvoted答案是我使用的方法),这使我可以在Excel单元格中input一个值,并从SQL结果转储到另一列。

然而,我现在的问题是我想运行在Excel列(而不是一个单一的单元格)内的多个单元格,并希望从另一列(像一个Vlookup)从SQL状态提供给我。

我有数据,包含大约20000行,我需要检查状态列中的SQL 100万+logging的状态。

不可能一一使用链接的方法,我不知道是否在我的StrQuery中使用'" & Range("A3") & "'"我可以使用表吗?

说这是我正在使用:

  Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim ConnectionString As String Dim StrQuery As String ConnectionString = "Provider=SQLOLEDB.1;Password=PASSWORD;Persist Security Info=True;User ID=USERNAME;Data Source=REMOTE_IP_ADDRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=DATABASE" cnn.Open ConnectionString cnn.CommandTimeout = 900 StrQuery = "SELECT StatusColumn FROM Status WHERE Contact = " & Range("A2") & "'" 'Performs the actual query rst.Open StrQuery, cnn Sheets(1).Range("B2").CopyFromRecordset rst End Sub 

我想知道范围内,如果我可以更改范围在我的SQL查询从A2到A:A或A2:A20000和转储在B:B或B2:B20000,但这不起作用。

编辑:我已经半成功地再次运行这个,但随着范围增加1,但是用尽了空间,可以循环帮助?

考虑一个分布式查询 ,其中您将Excel工作簿用作自己的表,并将内部联接到本地SQL Server表中。 这假定启用临时分布式查询权限 。

下面假定Excel数据维护标题列(其中一个名为status_column ),并从SheetName的第一个单元格A1开始:

 SELECT * FROM mySQLServerTable s INNER JOIN (OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Data Source=C:\Path\To\File.xlsx;Extended Properties=Excel 12.0', SheetName$)) e ON s.status_column = e.status_column