Оптимизируйте макрос Excel для добавления, проверки существующей записи, открытия и редактирования. - PullRequest
0 голосов
/ 11 апреля 2020

С помощью различных веб-сайтов я разработал макрос 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...