所以这就是我的困境我正在尝试创建一个宏,该宏运行查询位于单元格中的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
答案 0 :(得分:1)
您可能没有为ADODB对象设置引用。
您可以通过早期绑定来执行此操作:
(完全不知道名字。我使用的是德语Excel) 附加功能 - 参考:只需在项目的复选框中单击即可添加引用Microsoft ActiveX Data Objects vXXX。
或者你可以通过后期绑定来做到这一点。在这种情况下,您必须将变量声明为Object
并通过CreateObject
进行实例化。请在此处找到相关问题:Excel VBA: Late binding reference