Передача данных во внешний лист базы данных Excel на основе совпадения уникальных идентификаторов

#excel #vba #find #copy-paste

Вопрос:

Добрый день, у меня мало знаний о переменных excel VBA, и я несколько дней боролся за то, чтобы это сработало. Я назначил «Workbook2.xlsm» в качестве файла центральной базы данных. Он содержит все индивидуальные идентификаторы сотрудников в столбце A(начиная со столбца A2, A1-заголовок таблицы). Через раздел ввода в другой «Workbook1.xlsm» я пытаюсь запустить с помощью VBA, чтобы открыть книгу 2/Лист1, сопоставить индивидуальный идентификатор, введенный в ячейке A2 в книге 1, со списком идентификаторов в столбце A в книге 2, скопировать тип обучения, дату начала и окончания из книги 1 рядом с соответствующим идентификатором на листе 2, затем закрыть и сохранить лист 2.

Рабочий лист для ввода данных 1

База данных рабочего листа 2 для поиска идентификатора и вставки назначения, включения и выключения с рабочего листа 1

Заранее благодарю вас за идеи.

Ответ №1:

Я создал аналогичную книгу, которая в основном использует один лист для обновления другого листа. приведенный ниже код основан на одной рабочей книге. вы можете изменить для двух книг, добавив имя книги перед листом, отключить обновление экрана, открыть workbook2, присвоить значения, сохранить workbook2, включить обновление экрана.

я рекомендую создать таблицу, чтобы диапазон автоматически становился динамичным по мере добавления новых сотрудников «tblData». вы также можете сделать это с помощью именованного диапазона, но, по моему опыту, это немного громоздко. С немного большим количеством кода у вас может быть возможность добавить сотрудника. Назовите свою кнопку «AssignTrainBtn». Этот код будет находиться в объекте листа ManageAssignment, назначенном действию щелчка AssignTrainBtn

 Private Sub AssignTrainBtn_Click()
Dim formSheet As Worksheet
Dim dataSheet As Worksheet
Dim nextRow As Integer
Dim IDCol As Range
    
Set formSheet = Sheets("ManageAssignments")
Set dataSheet = Sheets("TempAssignments")
Set IDCol = dataSheet.Range("TblData[ID]")
     
ID = Range("a2")
    
    If ID <> vbNullString Then
    
    Set Rng = IDCol.Find(what:=ID, _
        LookIn:=xlValues, _
        LookAt:=xlWhole, _
        SearchOrder:=xlByRows, _
        MatchCase:=False)
        
    If Not Rng Is Nothing Then
    
        nextRow = Rng.Row
    
        Else
        MsgBox ("employee not found")
Exit Sub
    
    End If
        
    dataSheet.Cells(nextRow, 2).Value = formSheet.Range("b2").Value
    dataSheet.Cells(nextRow, 3).Value = formSheet.Range("c2").Value
    dataSheet.Cells(nextRow, 4).Value = formSheet.Range("d2").Value
    
    End If
End Sub
 

Комментарии:

1. Привет, Роб, искренне благодарю тебя за помощь. Я действительно боролся с этим произведением. Я перепрофилировал ваш код для конкретного проекта, и он отлично сработал. С наилучшими пожеланиями вам и еще раз спасибо.

2. пожалуйста. извините, у меня не было времени закодировать добавление нового сотрудника. было уже поздно. пожалуйста, отметьте ответ, если вы довольны решением.