Vba 如果字段和记录编号已知,是否获取值?

Vba 如果字段和记录编号已知,是否获取值?,vba,ms-access,Vba,Ms Access,晚上好, 我正在开发一个组合搜索表单,用于按条件搜索信息。表单有一个包含字段值的组合框,旁边有一个文本框。在组合框中选择字段值将在其旁边的文本框中填充该记录的相关信息,所有相关信息都包含在表格中 通过将rowSource设置为PetTable,将sourceType设置为fieldlist,我成功地使组合框显示了PetTable中的字段。。。然而,这就是我的死胡同 在组合框旁边的文本框中,我尝试通过使文本框控制源“=ComboBox”来获取组合框的值并将其放入文本框中,但是这只是创建了一个文本框

晚上好,

我正在开发一个组合搜索表单,用于按条件搜索信息。表单有一个包含字段值的组合框,旁边有一个文本框。在组合框中选择字段值将在其旁边的文本框中填充该记录的相关信息,所有相关信息都包含在表格中

通过将rowSource设置为PetTable,将sourceType设置为fieldlist,我成功地使组合框显示了PetTable中的字段。。。然而,这就是我的死胡同

在组合框旁边的文本框中,我尝试通过使文本框控制源“=ComboBox”来获取组合框的值并将其放入文本框中,但是这只是创建了一个文本框,它具有与组合框相同的文本字符串

我的下一个想法是使文本框控制源“=PetTable.PetComboBox”我的想法是,PetTable使用我的信息引用表,“PetComboBox”成为需要获取的字段。这也不起作用,出现了“名称错误”

应该发生的是:在组合框中,如果我选择了[Pet Name],我希望它旁边的文本框变成“Fido”,但它也变成了[Pet Name]

任何和所有的帮助将不胜感激

谢谢


您需要做的是将组合框的行源类型更改为“表/查询”。然后在“行源”中单击“。。。“打开查询生成器。选择所需的表。添加所需的列。我建议使用表的主键PetID,然后是任何其他字段——在您的情况下,至少是PetName。您可能还希望按PetName进行排序,以便于用户滚动浏览。关闭查询生成器并保存更改。将组合框的ColumnCount更改为2,并将列宽设置为“0cm;6cm”(将第一列的宽度设置为0表示不向用户显示)

现在移动到文本框,并将控制源设置为:

=[Combo0].Column(1)
请注意,组合框中的列是0索引的,因此第一列是第0列,第二列(在包含PetName的情况下)是第1列

由于您实际上希望显示字段名,而不是组合框中的数据,因此需要将RowSourceType设置为“field List”,然后选择表名作为RowSource

然后,您需要一小段VBA来查找当前记录表中该字段的值:

Sub sListFieldData()
    If Not IsNull(Me!Combo0) Then
        Me!Text2 = DLookup(Me!Combo0, "tblPet", "PetID=" & Me!PetID)
    Else
        Me!Text2 = ""
    End If
End Sub
然后,您需要在组合框的AfterUpdate事件中调用此过程(在用户更改后捕获),也需要在表单的当前事件中调用此过程(在用户在记录之间移动时捕获):


关于,

RowSourceType可能应该是Table/Query,而不是FieldList。您好,Applecore,感谢您的回复,遗憾的是,这没有达到预期效果。(有趣的)要求指定组合框由字段组成,并根据当前查看的记录,给出该字段的值和记录编号。我会在上面添加一个效果图片,我承认我可能只是不善于解释。我想我知道你在追求什么。因此,您有一个名为Pets的表,其中包含字段PetID、PetName、PetDescription等。您希望组合框显示这些字段的名称而不是值,然后在选择其中一个字段时,使用该字段的值填充当前记录的文本框?是的,这是正确的!谢谢你一直以来的帮助
Private Sub Combo0_AfterUpdate()
    Call sListFieldData
End Sub

Private Sub Form_Current()
    Call sListFieldData
End Sub