Sql server 使用excel vba和where语句从mssql中选择数据

Sql server 使用excel vba和where语句从mssql中选择数据,sql-server,excel,vba,Sql Server,Excel,Vba,我需要从数据库中选择数据,使用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

我需要从数据库中选择数据,使用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列的第一个空行(从第三行开始)


您知道如何解决这个问题吗?

问题的原因是,您已经在引用
范围(“E2”和Rows.Count)中的行了。

如果将上述行修改为以下内容,则应能正常工作:

Worksheets("HelpTables").Cells(Rows.Count, 5).End(xlUp).Offset(1).CopyFromRecordset myRes

.Cells(Rows.Count,5)
中的
5
用于第五列('E')。

我不确定,但您的excel对象单元格和行似乎应该受到影响,并且您的工作表应该被选中

我会写的

    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行,是否希望范围(“E2”和rows.count)转到E2100?这就是为什么我在命题中写“E”而不是“E2”。但可能您需要(…行数+2)

希望能有帮助。 皮埃尔