![](/img/trans.png)
[英]Accessing an SQL Server stored procedure (containing no SELECT statement) from Excel VBA, ideally without using Excel Data Connections?
[英]Select data from mssql using excel vba and where statement
我需要使用 Excel 从数据库中选择数据。 我只想从数据库中选择一列,我需要使用where
语句(仅选择与 Excel 工作表中的数据具有相同唯一值的数据)
我试过这个
Sub DB_RTVresult()
Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim SQLStr As String
Dim myRes As ADODB.Recordset
Server_Name = "123" ' Enter your server name here
Database_Name = "DBName" ' Enter your database name here
User_ID = "UserName" ' enter your user ID here
Password = "Pass" ' Enter your password here
Set myCon = New ADODB.Connection
Worksheets(2).Select
LastRow = GetRowCnt
For bl = LastRow To 5 Step -1
myCon.ConnectionString = "Driver={SQL Server};Server=" & Server_Name & _
";Uid=" & User_ID & ";Pwd=" & Password & ";Database=" & Database_Name & ";"
myCon.Open
SQLStr = "SELECT [RTV_RESULT]" & _
"FROM [WSCZWMS].[WSCZWMS].[OMEGA_E2E_REPORT] WHERE [SME_TRACK_NO] ='" & Cells(bl, "CC").Value & "'"
Set myRes = myCon.Execute(SQLStr)
Worksheets("HelpTables").Range("E2" & Rows.Count).End(xlUp).Offset (1)
StrQuery = "OMEGA_SPEQ_REPORT"
myCon.Close
Set myRes = Nothing
Set myCon = Nothing
Next
End Sub
但是当我运行它时,它会写入应用程序定义或对象定义错误。 并给这条线上色
Worksheets("HelpTables").Range("E2" & Rows.Count).End(xlUp).Offset(1).CopyFromRecordset myRes
这一行将选择数据放入 E 列中的第一个空行(从第 3 行开始)
你知道如何解决这个问题吗?
您的问题的原因是,您已经在引用.Range("E2" & Rows.Count)
的 Row 。
如果您将上述行修改为以下内容,它应该可以正常工作:
Worksheets("HelpTables").Cells(Rows.Count, 5).End(xlUp).Offset(1).CopyFromRecordset myRes
的5
在.Cells(Rows.Count, 5)
是用于第五列( 'E')。
我不确定,但似乎您的 excel 对象 Cells dans Rows 应该受到影响并且您的工作表被选中。
我会写
For b1=...
Worksheets(2).select
...
... Worksheets(2).cells(b1,"CC").value
...
Worksheets("HelpTables").select
Worksheets("HelpTables").Range("E" & _
Worksheets("HelpTables").Range("E:E").Rows.Count).End(xlUp).Offset(1) ...
...
注意:
“CC”是 Excel 值的名称?
如果有 100 行,您是否希望 Range("E2" & rows.count) 转到 E2100? 这就是为什么我在命题中写了“E”而不是“E2”。 但是您可能想要 (...rows.count+2) 吗?
希望能帮助到你。 皮埃尔。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.