繁体   English   中英

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

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

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