使用CopyFromRecordset时VBA运行时错误438

时间:2018-04-30 04:19:56

标签: excel vba

运行以下代码时,我在CopyFromRecordset行上收到438运行时错误。我弄清楚了我的错误,但谷歌搜索这个问题没有帮助,所以我想在这里发布解决方案。

以下代码的目的是从数据库中提取一组数据,将其粘贴到命名范围,然后调整命名范围的大小以适应新数据集。

Sub testCopyRecordset()
Dim rs As ADODB.Recordset
Dim conn As ADODB.Connection
Set rs = New ADODB.Recordset
Set conn = New ADODB.Connection

conn.Open connStr
rs.CursorType = adOpenStatic
rs.Open "Select * from Test;", conn
rs.MoveLast
rs.MoveFirst

With ThisWorkbook.Names.Item("targetRng")
    .RefersTo = .RefersToRange.Resize(rs.RecordCount)
    .CopyFromRecordset rs
End With  

conn.Close
End Sub

1 个答案:

答案 0 :(得分:0)

问题在于对命名范围的引用。从CopyFromRecordset语句中取With附加到正常引用的Range解决了错误,如下所示:

With ThisWorkbook.Names.Item("targetRng")
    .RefersTo = .RefersToRange.Resize(rs.RecordCount)
End With 
Range("targetRng").CopyFromRecordset rs