繁体   English   中英

Excel VBA-基于单元格范围值从SQL获取数据

[英]Excel VBA - Get Data from SQL based of Cell range values

我的任务是根据第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

我的建议是:

1.)

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

2.)编写一个循环,循环查找范围并将值一一添加到表中,如下所示:

i = 1,而cells(i,3).value <>“” ...插入到临时表值中(参数1,参数2等)

我=我+1温德

3.)

修改您的sql语句,以便将表和参数合并在一起,并在其中添加要粘贴和粘贴的数据的记录集。

您可以尝试像这样构建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),"','") & "')"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM