Перезаписать базу данных доступа из таблицы Excel, используя VBA - PullRequest
0 голосов
/ 28 июня 2018

Я искал на этом сайте свой вопрос, но не смог найти решение. Я новичок в Excel VBA. Нужна помощь в обновлении старых данных в базе данных доступа новыми данными из таблицы Excel с использованием Excel-VBA.

Из Интернета я создал следующие шаги.

Шаг 1: загрузка начальных данных (у меня есть рабочий макрос VBA для этого шага):

Загрузить таблицу Excel:

Upload excel table

Шаг 2. Загрузка данных из доступа в Excel (для этого шага у меня работает макрос VBA)

Скачать с доступа:

Download from access

Шаг 3: Теперь я хочу перезаписать всю таблицу доступа пересмотренными данными из таблицы Excel. Я не могу найти макрос для этого шага.

Перезаписать из Excel для доступа:

Overwrite from excel to access

Пожалуйста, помогите мне с программой VBA или любой ссылкой на сайт для этого шага.

Я не могу прикрепить лист Excel здесь.

1 Ответ

0 голосов
/ 05 июля 2018

Наконец нашел макрос из другого источника, поделился кодом для любого другого новичка

Sub Modify()

Dim dbs As ADODB.Connection
Dim rset1 As ADODB.Recordset
Dim sql As String
Dim ws As Worksheet
Dim lr As Long
Dim FName As String
Dim i As Long, j As Integer

FName = "C:\Users\temp\Database - Copy.accdb" 'change as needed
Set dbs = New ADODB.Connection
 dbs.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
 "Data Source=" & FName
Set rset1 = New ADODB.Recordset: rset1.CursorLocation = adUseClient

Set ws = Worksheets("Import") 'update sheet name as needed.
lr = ws.Range("B" & Rows.Count).End(xlUp).Row
For i = 10 To lr
    rset1.Open "SELECT * FROM [DB] WHERE [ID] = " & ws.Range("B" & i).Value, dbs, , adLockOptimistic
    With rset1
        For j = 1 To rset1.Fields.Count - 1
            .Fields(j).Value = ws.Range("B" & i).Offset(0, j).Value
        Next j
        .Update
        .Close
    End With
Next i

Set rset1 = Nothing
dbs.Close: Set dbs = Nothing

End Sub
...