Вставить строку в набор записей Excel через Excel VBA - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь вставить некоторые значения в последний ряд набора записей, который в данном случае является файлом 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

Как таблица может автоматически создать новую строку, которая будет включать значение, вставленное в последнюю строку? Спасибо.

1 Ответ

1 голос
/ 23 января 2020

Это сработало для меня. Вам нужно иметь правый курсор и тип блокировки.

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

РЕДАКТИРОВАТЬ: если вы запрашиваете данные из таблицы / объекта списка, то добавление записей не будет изменять размер списка, чтобы включить добавлены записи. См .: ADO: Excel: можно ли открыть набор записей по имени таблицы?

EDIT2: Если вы используете именованный диапазон вместо ListObject, затем вы можете запросить его по имени (вместо использования имени листа), и диапазон будет настраиваться при вставке новых строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...