如何使用vba将sql server数据库表列的数据插入excel

时间:2017-11-15 09:04:09

标签: excel vba excel-vba adodb

我试图通过vba编码的帮助将sql server数据库表中的所有数据插入到excel宏中

这是我的代码 -

Private Sub CommandButton1_Click()

    Dim myConn As ADODB.Connection
    Dim myCommand As ADODB.Command
    Dim DB_CONNECT_STRING As String
    Const DB_CONNECT_STRING = "Provider=SQLOLEDB.1;Data Source=P3A-B1YH882\SQLOPER;Initial Catalog=master;Integrated Security=SSPI"
    Set myConn = CreateObject("ADODB.Connection")
    Set myCommand = CreateObject("ADODB.Command")
    myConn.Open DB_CONNECT_STRING
    Set myCommand.ActiveConnection = myConn
    myCommand.CommandText = "SELECT *FROM Table_1"
    myCommand.Execute
    myConn.Close

End Sub

我的代码没有成功运行,它显示了一些未定义的编译错误用户定义类型。

加上我也不知道在代码中写什么来分配宏值。 我不知道该怎么做任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

您遇到的问题是" 早期绑定" vs" 后期绑定"。这两种方法都有优点 如果您想使用" 早期绑定",您必须通过添加引用告诉VBA编译器ADODB.Connection之类的内容:在VBA编辑器中,选择Tools->References并在其中一个列出的Active X DataObject库上设置复选标记。可能您缺少此引用,导致编译器错误。

我举两个适合你的方法的例子 - 阅读有关约束的内容并决定哪种方式更适合你 请注意,需要由您创建Connection和Command对象(因此var声明中的new支持CreateObject),而RecordSet对象是由Execute方法创建的。

要将记录集中的数据导入工作表,最简单的方法是Range.CopyFromRecordSet方法。作为替代方案,您可以循环记录集并手动编写 - 您可以在互联网上找到足够的示例。

Sub EarlyBinding()
    Const DB_CONNECT_STRING = "Provider=SQLOLEDB.1;Data Source=P3A-B1YH882\SQLOPER;Initial Catalog=master;Integrated Security=SSPI"

    Dim myConn As New ADODB.Connection
    Dim myCommand As New ADODB.Command
    Dim myRs As ADODB.Recordset

    myConn.Open DB_CONNECT_STRING
    Set myCommand.ActiveConnection = myConn
    myCommand.CommandText = "SELECT * FROM Table_1"
    Set myRs = myCommand.Execute

    ThisWorkbook.Worksheets("Sheet1").Range("A1").CopyFromRecordset myRs 

    myConn.Close    
End Sub

Sub LateBinding()
    Const DB_CONNECT_STRING = "Provider=SQLOLEDB.1;Data Source=P3A-B1YH882\SQLOPER;Initial Catalog=master;Integrated Security=SSPI"

    Dim myConn As Object
    Dim myCommand As Object
    Dim myRs As Object

    Set myConn = CreateObject("ADODB.Connection")
    myConn.Open DB_CONNECT_STRING
    Set myCommand = CreateObject("ADODB.Command")
    Set myCommand.ActiveConnection = myConn

    myCommand.CommandText = "SELECT * FROM Table_1"
    Set myRs = myCommand.Execute

    ThisWorkbook.Worksheets("Sheet1").Range("A1").CopyFromRecordset myRs 

    myConn.Close
End Sub