首页 > 解决方案 > 通过 Excel VBA 在 Excel 记录集中插入一行

问题描述

我试图在记录集的最后一行插入一些值,在这种情况下,它是一个用作我的数据库的 Excel 文件。我有下面的代码,用于将文本框的值插入到 excel 记录集的最后一行。但是,它没有创建插入值的新表行。

Sub CreaterRow()
    Dim strFile As String
    Dim strConnect As String
    Dim strSQL As String
    Dim lngCount As Long
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    strFile = "C:\Excel\Test.xlsx"
    strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile & _
    ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
    cnn.Open ConnectionString:=strConnect
    strSQL = "SELECT [ID] FROM [Sheet1$]"
    rst.Open Source:=strSQL, ActiveConnection:=cnn, CursorType:=adOpenForwardOnly, Options:=adCmdText

    With rst
        .AddNew
           .Fields("ID").Value = tbx_ID.Value 'Inserting this in the recordset did not create a new row
         .Update
    End with 

    rst.Close
    cnn.Close
End Sub

表如何自动创建一个新行,其中包含插入到 lastrow 中的值?谢谢你。

标签: excelvba

解决方案


这对我有用。您需要有正确的光标和锁定类型。

Sub CreaterRow()
    Dim strFile As String
    Dim strConnect As String
    Dim strSQL As String
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset

    strFile = ThisWorkbook.Path & "\Data.xlsx"

    strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""" & strFile & _
                """;Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
    cnn.Open ConnectionString:=strConnect
    strSQL = "SELECT [ID] FROM [Sheet1$]"

    rst.Open strSQL, cnn, adOpenKeyset, adLockOptimistic

    With rst
        .AddNew
        .Fields("ID").Value = "ID00020"
        .Update
    End With

    rst.Close
    cnn.Close
End Sub

编辑:如果您从 Table/Listobject 查询数据,则附加记录不会调整列表的大小以包含添加的记录。请参阅:ADO:Excel:是否可以在表名上打开记录集?

EDIT2:如果您使用命名范围而不是 ListObject,那么您可以按名称查询它(而不是使用工作表名称),并且当您插入新行时范围将调整。


推荐阅读