Есть ли возможность создать пользовательскую форму, которая может использовать несколько переменных для выполнения поиска строки в таблице Excel

#excel #vba

#excel #vba

Вопрос:

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

и мой код для поиска счета-фактуры

 Public Sub Search1()
row_Number = 0
Do
DoEvents
row_Number = row_Number   1
Item_in_Review1 = Sheets("Source").Range("E" amp; row_Number)
If Item_in_Review = Userform1.TextBox1.Text Then

> /*send relevant data to Userform3*/

UserForm3.TextBox5 = Sheets("Source").Range("B" amp; row_Number)
UserForm3.TextBox1 = Sheets("Source").Range("C" amp; row_Number)
UserForm3.TextBox2 = Sheets("Source").Range("D" amp; row_Number)
UserForm3.TextBox3 = Sheets("Source").Range("E" amp; row_Number)
UserForm3.TextBox6 = Sheets("Source").Range("F" amp; row_Number)
UserForm3.TextBox7 = Sheets("Source").Range("G" amp; row_Number)
UserForm3.TextBox8 = Sheets("Source").Range("H" amp; row_Number)
UserForm3.TextBox9 = Sheets("Source").Range("I" amp; row_Number)
UserForm3.TextBox4 = Sheets("Source").Range("J" amp; row_Number)
End If

Loop Until Item_in_Review = "" 

End Sub
  

и это работает, поэтому я решил попробовать добавить и другие параметры, например :

 Public Sub Search1()
row_Number = 0
Do
DoEvents
row_Number = row_Number   1
Item_in_Review1 = Sheets("Source").Range("E" amp; row_Number)
Item_in_Review2 = Sheets("Source").Range("B" amp; row_Number)
Item_in_Review3 = Sheets("Source").Range("I" amp; row_Number)
If Item_in_Review = Userform1.TextBox1.Text And Item_in_Review2 = Userform1.ComboBox1.Text And Item_in_Review3 = Userform1.ComboBox2.Text Then

UserForm3.TextBox5 = Sheets("Source").Range("B" amp; row_Number)
UserForm3.TextBox1 = Sheets("Source").Range("C" amp; row_Number)
UserForm3.TextBox2 = Sheets("Source").Range("D" amp; row_Number)
UserForm3.TextBox3 = Sheets("Source").Range("E" amp; row_Number)
UserForm3.TextBox6 = Sheets("Source").Range("F" amp; row_Number)
UserForm3.TextBox7 = Sheets("Source").Range("G" amp; row_Number)
UserForm3.TextBox8 = Sheets("Source").Range("H" amp; row_Number)
UserForm3.TextBox9 = Sheets("Source").Range("I" amp; row_Number)
UserForm3.TextBox4 = Sheets("Source").Range("J" amp; row_Number)
End If

Loop Until Item_in_Review = "" And Item_in_Review2 = "" And Item_in_Review3 = ""

End Sub


  

Но теперь я получаю ошибку несоответствия, где я ошибаюсь?
Идея заключается в том, что если Userform1.TextBox1.Text Userform1.ComboBox1.Text Userform1.ComboBox2.Text = диапазон B, E, I соответственно, он заполнит следующую пользовательскую форму всеми соответствующими данными. Кто-нибудь может помочь?

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

1. Как вы их определили Item_in_Review# ? Они должны быть определены как String и правильно присваивать значение. Вы присваиваете диапазон текстовому полю.

2. Я назначил диапазон в качестве параметра поиска, потому что для поиска потребуется много данных, поэтому выделение диапазона упрощает кодирование. и это работает.

3. Хотя это работает (VBE выполнил все преобразования, используя свойство по умолчанию), это не очень хорошая практика. Какая строка является несоответствием и какие значения имеют эти столбцы A: J, когда это происходит?