创建一个从SQL运行查询并将数据粘贴到Excel中的宏

时间:2015-10-27 19:22:36

标签: sql-server excel vba excel-vba

所以这就是我的困境我正在尝试创建一个宏,该宏运行查询位于单元格中的sql(表格(“SQL”)。范围(“G1”)),并将该查询中的数据粘贴到表( “数据”)。范围( “B1”)。我想出了下面的代码,但我不断收到编译错误:未定义用户定义的类型。如果对我所做的错误有任何见解,我们将不胜感激。

    Sub ConnectSqlServer()

    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sConnString As String
    Dim StrSQL As Variant

    Application.ScreenUpdating = False
    Application.Cursor = xlWait

    Set cnPubs = New ADODB.Connection
    Set rsPubs = New ADODB.Recordset

    StrSQL = " SET NOCOUNT ON "

    ' Create the connection string.
    sConnString = "Provider=SQLOLEDB; DATA SOURCE=CFS-SERVERSQL;" & _
                  "Initial Catalog=dmtrans;" & _
                  "Integrated Security=SSPI;"

    ' Create the Connection and Recordset objects.
    Set conn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    ' Open the connection and execute.
    conn.Open sConnString
    Set rs = conn.Execute(Sheets("SQL").Range("G1"))

    ' Check we have data.
    If Not rs.EOF Then
        ' Transfer result.
        Sheets("Data").Range("B4:S50000").ClearContents
        Sheets(Data).Range("b4").CopyFromRecordset rs
    ' Close the recordset
        rs.Close
    Else
        MsgBox "Error: No records returned.", vbCritical
    End If

    ' Clean up
    If CBool(conn.State And adStateOpen) Then conn.Close
    Set conn = Nothing
    Set rs = Nothing

End Sub

1 个答案:

答案 0 :(得分:1)

您可能没有为ADODB对象设置引用。

您可以通过早期绑定来执行此操作:

(完全不知道名字。我使用的是德语Excel) 附加功能 - 参考:只需在项目的复选框中单击即可添加引用Microsoft ActiveX Data Objects vXXX。

或者你可以通过后期绑定来做到这一点。在这种情况下,您必须将变量声明为Object并通过CreateObject进行实例化。请在此处找到相关问题:Excel VBA: Late binding reference