[英]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.