关闭对象时不允许运行时错误'3704'操作

时间:2015-11-26 10:17:36

标签: excel vba sql-server-2008 excel-vba

Noob在这里。 excel中的这个vba代码应该使用ADO连接到sql 2008,运行查询并在excel中填充sheet1。现在,标题错误不断弹出这一行  “Sheet1.Range(”A1“)。CopyFromRecordset rst”。

Sub Code1()

Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim SqlQuery As String

Application.ScreenUpdating = False

Const stADO As String = "Provider=SQLOLEDB.1;Password=NOPWDHERE;Persist Security Info=True;User ID=sa;Initial Catalog=StockControl;Data Source= PCSMIS01"

Set wbBook = ActiveWorkbook
Set WsSheet = wbBook.Worksheets(1)


SqlQuery = " SELECT * FROm dbo.Site "

Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset

With cnt
        .CursorLocation = adUseClient
        .Open stADO
        .CommandTimeout = 0
        Set rst = .Execute(SqlQuery)
End With

Sheet1.Range("A1").CopyFromRecordset rst

'With rst
'        .ActiveConnection = cnt
'        .Open SqlQuery
'        Sheet1.Range("A1").CopyFromRecordset rst
'        .Close
'End With

rst.Close
cnt.Close

Set rst = Nothing
Set cnt = Nothing

End Sub

我还尝试了一种替代方法,使用注释代码将数据复制到工作表中。我已尽可能在互联网上研究类似的主题,但我现在更加困惑。请帮忙。

1 个答案:

答案 0 :(得分:0)

Sheet1替换WsSheet(未被引用):

Sub Code1()

Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim SqlQuery As String

Application.ScreenUpdating = False

Const stADO As String = "Provider=SQLOLEDB.1;Password=NOPWDHERE;Persist Security Info=True;User ID=sa;Initial Catalog=StockControl;Data Source= PCSMIS01"

Set wbBook = ActiveWorkbook
Set WsSheet = wbBook.Worksheets(1)


SqlQuery = " SELECT * FROm dbo.Site "

Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset

With cnt
        .CursorLocation = adUseClient
        .Open stADO
        .CommandTimeout = 0
        Set rst = .Execute(SqlQuery)
End With

WsSheet.Range("A1").CopyFromRecordset rst

'With rst
'        .ActiveConnection = cnt
'        .Open SqlQuery
'        Sheet1.Range("A1").CopyFromRecordset rst
'        .Close
'End With