С помощью различных веб-сайтов я разработал макрос Excel, который проверяет, существует ли уже запись, если она существует, используйте myRecordset.Open, чтобы внести изменения, но если она не существует, используйте myRecordset.AddNew. добавить запись.
На самом деле это работает, я имею в виду, это делает то, что я хочу, но я думаю, что должен быть способ уменьшить код, так как я использую два разных метода (потому что моя база данных имеет пароль), но я не эксперт по Access (я начал программировать в Access примерно как месяц go), поэтому я не уверен, возможно ли это
Вот мой код:
Sub Add
new_combined_with_Open_in_a_Cycle()
Dim myRecordset As DAO.Recordset
Dim DB As DAO.Database
Dim wrkspc As DAO.Workspace
Dim SH As Worksheet
Dim i As Integer
Dim myRecordset2 As ADODB.Recordset
Dim strConn As String
Dim SS As Integer 'Sheet Size
Set SH = ThisWorkbook.Sheets("Main")
SS = SH.Range("A50000").End(xlUp).Row
'To add a record
Set wrkspc = Access.DBEngine(0)
Set DB = wrkspc.OpenDatabase("D:\Onedrive\Programación\Inventario.accdb", False, False, "MS Access;PWD=Dualipa")
Set myRecordset = DB.OpenRecordset("Employees", dbOpenTable, dbConsistent, dbOptimistic)
'To open an specific record:
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=D:\Onedrive\Programación\Inventario.accdb;" & "Jet OLEDB:Database Password=Dualipa;"
Set myRecordset2 = New ADODB.Recordset
'To check if a record exists:
Set cnLogs = CreateObject("ADODB.Connection")
Set rsData = CreateObject("ADODB.Recordset")
cnLogs.Open strConn
rsData.ActiveConnection = cnLogs
'Cycle starts to check:
For i = 2 To SS
rsData.Open "SELECT * FROM Employees WHERE EmployeeID = " & SH.Cells(i, 1).Value & ";"
If rsData.EOF Then
With myRecordset
.AddNew
!EmployeeID = SH.Cells(i, 1).Value
!LastName = SH.Cells(i, 2).Value
!Name = SH.Cells(i, 3).Value
!Position = SH.Cells(i, 4).Value
.Update
.Close
End With
Else
With myRecordset2
.Open "SELECT * FROM Employees WHERE EmployeeID = " & SH.Cells(i, 1).Value, _
strConn, adOpenKeyset, adLockOptimistic
!Position = SH.Cells(i, 4).Value
.Update
.Close
End With
End If
rsData.Close
Next i
'Release memory and exit:
Set cnLogs = Nothing
Set rsData = Nothing
Set myRecordset = Nothing
Set myRecordset2 = Nothing
Set wrkspc = Nothing
Set DB = Nothing
Set SH = Nothing
End Sub