В настоящее время у меня есть пользовательская форма с различными объектами.Я хочу добавить функцию «поиск и заполнение формы», аналогичную той, которую я нашел здесь (только мне нужно сопоставить 4 поля вместо 1): https://www.experts -exchange.com / questions / 28706684 / VBA-Code-to-Populate-Userform-with-Existing-Records-Edit-them-and-add-them-back-to-worksheet.html Объектами, которые я ищу, являются 3 текстовых поля и 4-я выбранная кнопкакоторый я отформатировал для этой цели как:
If radio1 = True Then
criteria4 = "radio1"
ElseIf radio2 = True Then
criteria4 = "radio2"
ElseIf radio3 = True Then
criteria4 = "radio3"
ElseIf radio4 = True Then
criteria4 = "radio4"
End If
Я безуспешно пробовал несколько методов для компонента «поиск»:
-Использование функции соответствия (отформатирован различными способами одним изниже показано, что я не смог оценить независимо от того, что я пытался)
formula = "match(" & criteria1 & criteria2 & criteria3 & criteria4 & ",a2:a999&b2:b999&e2:e999&f2:f999, 0)"
r = Evaluate(formula)
-Использование цикла for в качестве средства для сопоставления на основе функции if (здесь я застрял в том, какчтобы получить номер строки для совпадения, которое будет выведено, чтобы я мог затем использовать его позже, чтобы заполнить форму соответствующими данными)
lastrow = ws.Cells(Rows.Count, 1).End(xlUp).row
'search for jb, sbj, pckg and jbtyp match
With ws.Range("A1,P" & lastrow)
For row = 2 To .Rows.Count
If .Cells(row, 1).Value Like criteria1 And .Cells(row, 2).Value Like criteria2 And .Cells(row, 5).Value Like criteria3 And .Cells(row, 6).Value Like criteria4 Then
***method of returning row number for the match that can then be use in later code to pull data from this row***
End If
Next
End With
Будем весьма признательны за любые указания, либо продолжая один из этих методов, либоальтернатива.
[РЕДАКТИРОВАТЬ] Я попробовал следующее, думая, что это работает, однако я начал использовать его снова и понял, что это позволяет мне искать только в первой строке (критерий1), пожалуйста, помогите ...
Set rfound = Columns("A").Find(criteria1, Cells(Rows.Count, "A"), xlValues, xlWhole)
If Not rfound Is Nothing Then
strfirst = rfound.Address
Do
If LCase(Cells(rfound.row, "B").Text) = criteria2 And LCase(Cells(rfound.row, "E").Text) = criteria3 And LCase(Cells(rfound.row, "F").Text) = criteria4 Then
r = rfound.row
End If
Set rfound = Columns("A").Find(criteria1, rfound, xlValues, xlWhole)
r = rfound.row
Me.txt1 = ws.Cells(r, "A")
...
Me.cmbengpos = ws.Cells(r, "I")
...
If ws.Cells(r, "F") = "radio1" Then
Me.radiopanels.Value = True
End If
...
Loop While rfound.Address <> strfirst
End If
End Sub