Excel VBA - если ячейка соответствует определенному значению в столбце, вставьте данные в соседний столбец - PullRequest
0 голосов
/ 09 октября 2018

Итак, у меня есть две формы в листе EmployeeForm (EmployeeForm1 & EmployeeForm2) и таблица Excel TableEmployee в листе EmployeeData, которая выглядит следующим образом: enter image description here

Данные в таблице получены из этих двух форм, но до сих пор мне удалось ввести только первую половину таблицы.

Данные в Employee Form 2 передаются только и только после отправки Employee Form 1 (могут быть дни, даже недели).

Теперь я хочу добитьсярабочий код VBA, который может соответствовать Employee ID в ячейке D13 и Employee ID в столбце H, и записать данные в D14: D17 в нужное место.

Таким образом, в приведенном выше примере, поскольку Employee ID равно 145, после нажатия кнопки отправки в форме 2 данные в D14: D17 должны быть сохранены в L7: O7.

Это мой код:

Sub Submit_Form1()

   Dim LastRow As Long, ws As Worksheet

   Set ws = Worksheets("EmployeeData")

   LastRow = ws.Range("H" & Rows.Count).End(xlUp).Row + 1

   ws.Range("H" & LastRow).Value = Worksheets("EmployeeForm").Range("D5").Value   'Employee ID
   ws.Range("I" & LastRow).Value = Worksheets("EmployeeForm").Range("D6").Value   'Employee Name
   ws.Range("J" & LastRow).Value = Worksheets("EmployeeForm").Range("D7").Value  'Place of Birth
   ws.Range("K" & LastRow).Value = Worksheets("EmployeeForm").Range("D8").Value  'Working Experience


 End Sub

И для формы 2

Sub Submit_Form2()

    Dim LastRow As Long, ws As Worksheet
    Dim H As String

   Set ws = Worksheets("EmployeeData")
    employeeid = Sheets("EmployeeForm").Range("D13").Value

    If Cells(H) = employeeid Then

     ws.Range("L" & LastRow).Value = Worksheets("EmployeeForm").Range("D14").Value   'Education
     ws.Range("M" & LastRow).Value = Worksheets("EmployeeForm").Range("D15").Value   'Last Company
    ws.Range("N" & LastRow).Value = Worksheets("EmployeeForm").Range("D16").Value  'Join Date
    ws.Range("O" & LastRow).Value = Worksheets("EmployeeForm").Range("D17").Value  'Position

 End Sub

Конечно, второй макрос не работает, но кто-нибудь может, пожалуйста, просветить меня, как это сделатьправильно?Большое спасибо!

1 Ответ

0 голосов
/ 09 октября 2018

Можете ли вы попробовать это?

Sub Submit_Form2()

Dim ws As Worksheet, v As Variant

Set ws = Worksheets("EmployeeData")
employeeid = Sheets("EmployeeForm").Range("D13").Value

v = Application.Match(employeeid, ws.Range("H:H"), 0)

If IsNumeric(v) Then
    ws.Range("L" & v).Value = Worksheets("EmployeeForm").Range("D14").Value   'Education
    ws.Range("M" & v).Value = Worksheets("EmployeeForm").Range("D15").Value   'Last Company
    ws.Range("N" & v).Value = Worksheets("EmployeeForm").Range("D16").Value  'Join Date
    ws.Range("O" & v).Value = Worksheets("EmployeeForm").Range("D17").Value  'Position
End If

End Sub

Проблема с вашим кодом была

If Cells(H) = employeeid Then

, который не является допустимым синтаксисом.Ячейки нуждаются в строке и столбце, ссылающихся на такие ячейки (1,1) или ячейки (1, «A»).Не говоря уже о том, что H не было определено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...