#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
Заранее благодарю вас за идеи.
Ответ №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. пожалуйста. извините, у меня не было времени закодировать добавление нового сотрудника. было уже поздно. пожалуйста, отметьте ответ, если вы довольны решением.