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

时间:2015-05-06 23:14:27

标签: ms-access access-vba ms-access-2010

我有一个绑定到查询的表单,控件绑定到查询的字段。 我还有一个未绑定的组合框,其Row Source是相同的查询,用于通过其After Update事件处理程序选择当前的表单记录:

Private Sub Loc_cbo_AfterUpdate()
    DoCmd.SearchForRecord , "", acFirst, "ID = " & Str(Nz(Loc_cbo, 0))
End Sub

组合框有三列:

  1. Bound Column,一个不可见的ID,
  2. 位置代码,
  3. 位置名称。
  4. 组合Row SourceSELECT * FROM Sites ORDER BY Loc DESC。 (原来,它只是Sites,但由于我的格式Order BySite.Loc DESC,我希望订单匹配。)

    工作正常。 当然,我也可以 通过其导航控件(First,Previous,Next,Last)浏览表单的记录。 这也有效。 但是,我希望组合框能够通过导航控件与当前记录同步。

    我尝试通过表单的Current事件处理程序,以三种不同的方式来完成它。 首先,设置组合框的Text值以匹配相应文本框控件的值

    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的早期答案)设置组合框的Value属性:

    Private Sub Form_Current()
        Loc_cbo.Value = Loc_txt.Value 
    End Sub
    

    只要没有错误消息,这就“有效”,并且根据debug.prints,Loc_cbo的值确实会更改为与Loc_txt的值相匹配。但是,组合框中可见的文本框状部分现在看起来总是空的/空白(其中没有任何内容)。

    当通过记录导航器更改后者时,如何让记录选择器组合框与当前记录一致? 我无法相信用户会很高兴两者不同步。 我也无法相信我没有在其他任何地方找到这个问题!

1 个答案:

答案 0 :(得分:3)

分配给组合的.Value属性以更改其选择。对于.Value,您不需要SetFocus

Private Sub Form_Current()
    Me.Loc_cbo.Value = Me.Loc_txt.Value
End Sub

请注意,此建议假定组合的.Value是您要与文本框值匹配的内容。检查以确认您希望组合和文本框之间的匹配基于组合的.Value而不是其他组合列。

验尸后

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

.Value

请注意,组合的Me.Loc_cbo.Value = DLookup("ID", "Sites", "Loc= '" & Me.Loc_txt.Value & "'") 是其所选行的 Bound Column 中的值。