Как использовать Dlookup для нескольких критериев для создания динамического поля со списком
У меня есть два Comboboxes от: txtKategorie и txtTyp. Значения для поля со списком frist (txtKategorie) исправлены! Я хочу, чтобы значения второго Combobox (txtTyp) изменялись в соответствии с тем, что пользователь выбирает в первом. Если пользователь выбирает "Регистратор данных", второе поле со списком должно содержать только "Базовый уровень Classic" и "Базовый уровень плюс", как видно на изображении. То же самое и с "Акселерометром".
Я поместил свой код в событие AfterUpdate первого поля со списком:
If txtKategorie.Value = "Datalogger" And txtTyp.ListCount = 0 Then
i = 1
Do While txtTyp.ListCount < DCount("ID", "tblNomenklatur", "[Kat] = 'K'")
txtTyp.AddItem DLookup("[Typ]", "tblNomenklatur", "[ID] =" & i And "[Kat] = 'K'")
'And "[Kat] = 'K'"
i = i + 1
Loop
Когда форма открывается, только первое поле со списком "txtKategorie" имеет значения. Когда пользователь выбирает Регистратор данных, код проверяет, сколько записей в таблице имеют [Kat] = "K", чтобы определить, как долго будет выполняться инструкция Do While. Затем "txtTyp.AddItem" -Statement должен добавить "Base Layer Classic" и "Base Layer Plus" в поле со списком "txtTyp". Но, к сожалению, Кодекс не работает. Есть проблема с Dlookup-Statement, содержащим два критерия. Если я удалю один из двух критериев, Код будет работать, но явно выдаст неверные результаты для второго поля со списком. Если я оставлю это так, второе поле со списком останется пустым. Кто-нибудь знает, что я делаю не так?
1 ответ
Вы можете легко сделать это с помощью кода ниже. Измените имя таблицы на свое имя.
Private Sub txtKategorie_AfterUpdate()
Me.txtTyp.RowSource = "SELECT DISTINCT Table1.Typ FROM Table1 WHERE Table1.Kategorie='" & Me.txtKategorie & "'"
Me.txtTyp.Requery
End Sub
Или вы можете сделать это графически из построителя запросов источника строк. Ниже приведены шаги.
- Поле со списком
txtKategorie
исправлено. Отлично! - Для второго поля со списком
txtTyp
выполните следующие шаги. - Выбрать поле со списком
txtTyp
. В окнах свойств выберитеRow Source
затем нажмите на построитель запросов...
маленькие три точки. Смотрите скриншот. - В окне конструктора запросов создайте запрос из таблицы данных, например снимок экрана, и установите критерии для
Kategorie
столбец[Forms]![Form1]![txtKategorie]
Сохраните и закройте окно составителя запросов.
Теперь о Combobox txtKategorie
в After Update
событие напишите ниже строку для запроса txtTyp
. Вы сделали!
Private Sub txtKategorie_AfterUpdate()
Me.txtTyp.Requery
End Sub