vba listobject CopyFromRecordset

ebe*_*air 5 excel vba

如何将记录集中的数据填充到列表对象中?下面的代码并不完全有效:

oCN.ConnectionString = "DRIVER={SQL Server};Server=SRVSQL;Database=TEST;"
oCN.Open
Dim sqlString As String
sqlString = "SELECT * FROM MYTABLE"
oRS.Open sqlString, oCN

With Feuil3.ListObjects("TableArticles")
    If Not .DataBodyRange Is Nothing Then
        .DataBodyRange.Delete
    End If

    ' This make a 91 error
    Call .DataBodyRange.CopyFromRecordset(oRS)
    ' This copy data into sheet, not into listobject
    Call Feuil3.Range("A2").CopyFromRecordset(oRS)
End With
Run Code Online (Sandbox Code Playgroud)

Gra*_*ate 6

如果您总是删除第.DataBodyRange一个,则可以使用“.InsertRowRange”。

With Feuil3.ListObjects("TableArticles")
    If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
    .InsertRowRange.CopyFromRecordset(oRS)
End With
Run Code Online (Sandbox Code Playgroud)


ebe*_*air 2

最后我找到了解决方案。只需调整列表对象的大小以适应内容:

With Feuil3.ListObjects("TableArticles")
    If Not .DataBodyRange Is Nothing Then
        .DataBodyRange.Delete
    End If

    Call .Range(2, 1).CopyFromRecordset(oRS)
    Call .Resize(Feuil3.UsedRange)
End With
Run Code Online (Sandbox Code Playgroud)