Vba 填充由3个组合框筛选的表中的文本框

Vba 填充由3个组合框筛选的表中的文本框,vba,ms-access,Vba,Ms Access,我有一个包含14个字段的表tblUniqueRec。我使用一个表单,frmUniqueRec在文本框中显示这些字段,并使用3个组合框过滤记录。14个字段中的3个将用作筛选条件。有关示例,请参见下表: Value1、Value2、Value3是3个单独组合框中的3个值,根据所选的组合框,它将显示符合所有3个条件的字段4-Field14 我尝试了以下方法: 通过将文本框的控制源设置为查询,使用VBA中的查询填充每个文本框: 1Val = Nz(Me.Value1.Value, "&quo

我有一个包含14个字段的表
tblUniqueRec
。我使用一个表单,
frmUniqueRec
在文本框中显示这些字段,并使用3个组合框过滤记录。14个字段中的3个将用作筛选条件。有关示例,请参见下表:

Value1、Value2、Value3是3个单独组合框中的3个值,根据所选的组合框,它将显示符合所有3个条件的字段4-Field14

我尝试了以下方法:

通过将文本框的控制源设置为查询,使用VBA中的查询填充每个文本框:

1Val = Nz(Me.Value1.Value, "")
2Val = Nz(Me.Value2.Value, "")
3Val = Nz(Me.Value3.Value, "")

qryZone = "SELECT Value1FROM tblUniqueRec WHERE Value1= '" & 1Val & "' and Value2= '" & 2Val & "' and Value3 = '" & 3Val & "'"""
Me.textbox1.ControlSource = qryZone
我试过在属性表和VBA中这样做,但都不起作用

我还尝试将每个文本框的属性页中的默认值设置为
DLookUp
,但这也不起作用:

=DLookUp([Field1],[tblUniqueRec],[Value1]=[1Val] And [Value2]=[2Val] And [Value3]=[3Val])
我还尝试了
DLookUp
,在那里我硬编码了值,但没有成功


如何正确执行此操作?

常用的方法是使用未绑定的组合框筛选表单:

过滤前的表格:

过滤后的表格:

首先要注意的是,通常情况下,您会有一个Value1类型的表,其中包含Value1可以接受的所有值。通常情况下,combobox rowsource是使用包含类型表索引的类型表创建的,但在这里我们没有。而是只选择Value1,确保找到rowsource查询的unique values only属性并将其设置为yes。
完成组合框后,使用afterupdate事件将它们连接到表单。在每个事件中使用相同的代码或将其抽象为函数

Private Sub cmbValue1_AfterUpdate()
'Form_frmUniqueRecords.Filter = cmbValue1.Value
'note the single quotes around values ( '  ') this is an unfortunate necessity when testing strings
If Not IsNull(cmbValue1) And Not IsNull(cmbValue2) And Not IsNull(cmbValue3) Then
Me.Filter = "Value1 = '" & cmbValue1.Value & "' AND Value2 = '" & cmbValue2.Value & "' AND Value3 = '" & cmbValue3.Value & "'"
Me.FilterOn = True
Else
'decide how to handle default values and empty boxes to figure out what to do else
End If
End Sub

qryZone设置为SQL语句。无法将textbox ControlSource属性设置为SQL语句。必须使用该SQL打开一个记录集对象,然后从记录集字段中提取值。或者将FormRecordSource设置为该SQL。或者在ControlSource中使用DLookup()域聚合函数表达式,而不是DefaultValue。为什么不使用绑定表单并对表单应用筛选条件?查看或VBA以使用DLookup()表达式设置textbox值属性。但实际上,我认为绑定窗体和绑定控件以及对窗体应用过滤器是最合适的方法。这是一个常见的问题。正确的方法是使用3个未绑定的组合框来过滤表单。组合框在各自的afterupdate事件中通过vba连接到表单,以更新表单过滤器。更新记录源不起作用,因为access不希望这样。