Ms access 同步记录导航控件和记录选择组合框

Ms access 同步记录导航控件和记录选择组合框,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我有一个绑定到查询的表单,控件绑定到查询的字段。 我还有一个未绑定的组合框,它的行源是同一个查询,用于在更新后通过其事件处理程序选择当前表单记录: Private Sub Loc_cbo_AfterUpdate() DoCmd.SearchForRecord , "", acFirst, "ID = " & Str(Nz(Loc_cbo, 0)) End Sub 组合框有三列: 绑定列,一个不可见的ID 一个位置码 位置名称 组合的行源代码是SELECT*FROM Sites

我有一个绑定到查询的表单,控件绑定到查询的字段。 我还有一个未绑定的组合框,它的
行源
是同一个查询,用于在更新后通过其
事件处理程序选择当前表单记录:

Private Sub Loc_cbo_AfterUpdate()
    DoCmd.SearchForRecord , "", acFirst, "ID = " & Str(Nz(Loc_cbo, 0))
End Sub
组合框有三列:

  • 绑定列
    ,一个不可见的ID
  • 一个位置码
  • 位置名称 组合的
    行源代码是
    SELECT*FROM Sites ORDER BY Loc DESC
    。(最初,它只是
    站点
    ,但由于我将表单的
    Order By
    作为
    Site.Loc DESC
    ,因此我希望顺序匹配。)

    它很好用。 当然,我也可以通过表单的导航控件(First、Previous、Next、Last)浏览表单的记录。 这也行得通。 但是,我希望组合框在通过导航控件更改时与当前记录同步

    我试图通过表单的
    Current
    事件处理程序,通过三种不同的方式来实现。 首先,将combobox的文本值设置为与相应textbox控件的文本值匹配

    Private Sub Form_Current()
        Loc_cbo.SetFocus
        Loc_cbo.Text = Loc_txt ‘ ERROR
    End Sub
    
    但我明白了

    运行时错误“2101”:您输入的设置对此无效 财产

    第二,相对于当前记录设置组合框的ListIndex值

    Private Sub Form_Current()
        Loc_cbo.SetFocus
        Loc_cbo.ListIndex = CurrentRecord - 1 ‘ ERROR
    End Sub
    
    但我得到相同的运行时错误'2101'或

    运行时错误“7777”:您错误地使用了ListIndex属性

    在同一个地方

    第三,(感谢HansUp的早期回答)设置combobox的Value属性:

    Private Sub Form_Current()
        Loc_cbo.Value = Loc_txt.Value 
    End Sub
    
    只要没有错误消息,此“工作”,并且根据debug.prints,
    Loc\u cbo
    的值会更改为与
    Loc\u txt
    的值匹配。但是,组合框中类似于可见文本框的部分现在看起来总是空/空(其中没有任何内容)

    当当前记录已通过记录导航器更改时,如何使记录选择器组合框与当前记录一致? 我不敢相信用户会因为两者不同步而高兴。
    我也不敢相信,我还没有发现其他地方描述的这个问题

    指定组合的
    .Value
    属性以更改其选择。对于
    .Value
    ,您不需要
    设置焦点

    Private子表单_Current()
    Me.Loc\u cbo.Value=Me.Loc\u txt.Value
    端接头
    
    注意:此建议假定组合的
    .Value
    是您希望与文本框值匹配的值。选中以确认您希望组合和文本框之间的匹配基于组合的
    .Value
    ,而不是组合的另一列

    死后检验:

    文本框的内容旨在匹配组合的一列。但是,由于组合的绑定列包含与另一列关联的数字,Martin使用
    DLookup
    表达式获取与文本框内容对应的数字,并将该数字分配给组合的
    。Value
    属性:

    Private Sub Form_Current()
        Loc_cbo.Value = Loc_txt.Value 
    End Sub
    
    Me.Loc_cbo.Value=DLookup(“ID”、“Sites”、“Loc=””&Me.Loc_txt.Value&“”)
    

    注意组合的
    .Value
    是它所选行的绑定列中的值。

    第一次尝试就成功了!也许你想把它编辑成你的答案:
    Me.Loc\u cbo.Value=DLookup(“ID”,“Sites”,“Loc=””&Me.Loc\u txt.Value&“”)
    做得好,先生!请随时编辑我的描述,如果你可以使它更容易理解。