我有一个包含许多记录的连续表单。每个记录都包含一个组合框,其中vba代码在获得焦点时过滤可查看的选择(它通过更改RowSource
来实现。
我的问题是,如果我单击记录A中的组合框然后单击组合框是记录B,记录B的显示过滤器应用于记录A.如果我单击另一个控件我没有这个问题在点击组合框之间。
为什么过滤器应用于A的组合框,即使焦点已经(假设)丢失了?如何防止此显示错误发生?我现在唯一的解决方案是在组合框的焦点丢失时进行任意控制增益聚焦,但显然这对用户来说很烦人......
可能相关的代码(SuperintendentID
是我的组合框的名称):
Private Sub SuperintendentID_GotFocus()
'Filters SuperintendentID based on the task's division
Me!SuperintendentID.RowSource = "SELECT tblJoinDivisionSuperintendent.SuperintendentID, [FirstName] & "" "" & [LastName] AS Name, tblJoinDivisionSuperintendent.DivisionID FROM tblSuperintendent RIGHT JOIN (tblDivision RIGHT JOIN tblJoinDivisionSuperintendent ON tblDivision.ID = tblJoinDivisionSuperintendent.DivisionID) ON tblSuperintendent.ID = tblJoinDivisionSuperintendent.SuperintendentID WHERE tblJoinDivisionSuperintendent.DivisionID = " & Me!DivisionID & ";"
Me!SuperintendentID = Me!SuperintendentID.ItemData(0)
Me!SuperintendentID = Me!SuperintendentID.OldValue 'Prevents a new value from being assigned when the control first gains focus
End Sub
答案 0 :(得分:1)
您可能正在为comboboxA和comboboxB触发GotFocus事件,但屏幕仅显示您更改的最后一个值。 您可以添加使用Form.Repaint方法(其中Form =您的表单对象)作为GotFocus事件的一部分,以确保在更改基础数据源后刷新屏幕。
你可以通过在事件中放入一个debug.print语句来测试这个以确保两个事件都被触发,例如debug.print "GotFocus ComboboxA"