我试图通过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
我的代码没有成功运行,它显示了一些未定义的编译错误用户定义类型。
加上我也不知道在代码中写什么来分配宏值。 我不知道该怎么做任何帮助表示赞赏
答案 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