我有一个绑定到查询的表单,控件绑定到查询的字段。
我还有一个未绑定的组合框,其Row Source
是相同的查询,用于通过其After Update
事件处理程序选择当前的表单记录:
Private Sub Loc_cbo_AfterUpdate()
DoCmd.SearchForRecord , "", acFirst, "ID = " & Str(Nz(Loc_cbo, 0))
End Sub
组合框有三列:
Bound Column
,一个不可见的ID,组合Row Source
为SELECT * FROM Sites ORDER BY Loc DESC
。 (原来,它只是Sites
,但由于我的格式Order By
为Site.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
的值相匹配。但是,组合框中可见的文本框状部分现在看起来总是空的/空白(其中没有任何内容)。
当通过记录导航器更改后者时,如何让记录选择器组合框与当前记录一致? 我无法相信用户会很高兴两者不同步。 我也无法相信我没有在其他任何地方找到这个问题!
答案 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 中的值。