Excel VBA - 根据Cell范围值从SQL获取数据

时间:2017-07-31 14:13:02

标签: excel vba excel-vba

我的任务是根据第A列第3行中的值从SQL DB获取数据。

Excel表格示例:

ITEM   | QTY TO PICK | QTY ON ORDER | Column 2 | Column 3 etc

PART 1 |      5      | <Data will be populated here>

PART 2 |      12     | <Data will be populated here>

此代码通过命令按钮运行。

从C3开始填充从SQL中提取的数据。

但是,我的下面的代码一次只返回一行。

我知道在哪里需要做出改变,我只是不知道是什么。在谷歌搜索至少2个小时后,我彻底难倒了。

ItemNumber = Range("A3").Value

我已经尝试过修改("A3:A100").Value,但我发现错误。

以下完整代码;

Private Sub CommandButton2_Click()

' Create a connection object.
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection

' Provide the connection string.
Dim strConn As String

'Use the SQL Server OLE DB Provider.
strConn = "Provider=SQLOLEDB;"

'Connect to the Pubs database on the local server.
strConn = strConn & "server=<server name>;INITIAL CATALOG=<DB Name>;"

'Use an integrated login.
strConn = strConn & " INTEGRATED SECURITY=sspi;"

'Now open the connection.
cn.Open strConn

'
'

ActiveSheet.Range("C3:G10000").Clear ' clear out existing data
Dim ItemNumber As String

ItemNumber = Range("A3").Value

' Create a recordset object.
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

SQLStr = "Select * from vw_WorksOrder WHERE ITEMNO = " & ItemNumber & ""

rs.Open SQLStr, cn

' Copy the records into cell A1 on Sheet1.
Sheet4.Range("C3").CopyFromRecordset rs

' Tidy up

rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing

2 个答案:

答案 0 :(得分:0)

我的建议是:

1)

在SQL Server上创建一个表,其中包含sql语句的参数(itemnumber = 1)

2)。 编写一个循环,循环遍历范围并逐个向表中添加值,如:

i = 1 而细胞(i,3).value&lt;&gt; &#34;&#34; ...插入临时值(参数1,参数2等)

i = i + 1 WEND

3。)

修改加入表的记录集的sql语句,其中包含您要提取的参数和数据以及粘贴该数据。

答案 1 :(得分:0)

您可以尝试像这样构建SQL

"Select * from vw_WorksOrder WHERE ITEMNO in (" & _
join(application.transpose(range("a1:a5").Value),",") & ")"

或者,对于字符串。

  "Select * from vw_WorksOrder WHERE ITEMNO in ('" & _
join(application.transpose(range("a1:a5").Value),"','") & "')"