У меня есть рабочая тетрадь с двумя листами; Вход и база данных. То, что я пытаюсь сделать, это получить данные из ввода ввода в базу данных. Однако предостережение заключается в том, что если ячейка B4 на входе показывает «Начальный», я хочу, чтобы данные были добавлены в новую строку в отформатированной таблице в базе данных. В качестве альтернативы, если ячейка B4 на входе показывает «Повторить 1», я хочу, чтобы данные добавлялись в ту же строку, что и предыдущий набор данных этого человека, как указано идентификатором в ячейке B3 на входе. Мне удалось заставить первую часть работать с некоторой помощью (если в ячейке B4 на вводе отображается «Initial»), однако я не могу заставить работать часть «Repeat 1». Код, который у меня есть до сих пор:
Sub test()
Dim inputWks As Worksheet
Dim databaseWks As Worksheet
Dim tbl As ListObject
Dim newRow As Range
Set inputWks = Worksheets("Input")
Set databaseWks = Worksheets("Database")
Set tbl = databaseWks.ListObjects("Table1")
Application.ScreenUpdating = False
If inputWks.Range("B4").Value = "Initial" Then
Set newRow = tbl.ListRows.Add.Range
With newRow
.Range("A1").Value = inputWks.Range("B3").Value
.Range("B1").Value = inputWks.Range("B4").Value
.Range("S1").Value = inputWks.Range("B2").Value
.Range("C1").Value = inputWks.Range("B5").Value
.Range("D1").Value = inputWks.Range("B6").Value
.Range("F1").Value = inputWks.Range("B7").Value
.Range("G1").Value = inputWks.Range("B8").Value
.Range("I1").Value = inputWks.Range("B9").Value
.Range("J1").Value = inputWks.Range("B10").Value
.Range("K1").Value = inputWks.Range("B11").Value
.Range("L1").Value = inputWks.Range("B12").Value
End With
ElseIf inputWks.Range("B4").Value = "Repeat 1" Then
fu_row = databaseWks.Range("A:A").Find(What:=inputWks.Range("B3"), LookIn:=xlValues).Row
fu_row.Range("EY").Value = inputWks.Range("B2").Value
fu_row.Range("FA").Value = inputWks.Range("B4").Value
fu_row.Range("FB").Value = inputWks.Range("B7").Value
fu_row.Range("FC").Value = inputWks.Range("B8").Value
fu_row.Range("FD").Value = inputWks.Range("B12").Value
End If
Application.ScreenUpdating = True
End Sub
Причина, по которой объем передачи данных отличается, заключается лишь в том, что некоторая информация не требуется при последующих посещениях. Кроме того, мне известна функция «Формы» в Excel, однако наш набор данных будет состоять из более чем 32 элементов, что является пределом форм из того, что я прочитал.
Надеюсь, кто-то сможет дать некоторые рекомендации. Спасибо!