以连续形式过滤组合框的显示问题
Display Issue for filtering a combobox in a continuous form
我有一个包含很多记录的连续表格。每条记录都包含一个组合框,其中有 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
您可能同时触发了 comboboxA 和 comboboxB 的 GotFocus 事件,但屏幕只显示您更改的最后一个值。
您可以添加使用 Form.Repaint 方法(其中 Form=您的表单对象)作为 GotFocus 事件的一部分,以确保在更改基础数据源后刷新屏幕。
您可以通过在事件中放置一个 debug.print 语句来测试它以确保两个事件都被触发,例如 debug.print "GotFocus ComboboxA"
我有一个包含很多记录的连续表格。每条记录都包含一个组合框,其中有 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
您可能同时触发了 comboboxA 和 comboboxB 的 GotFocus 事件,但屏幕只显示您更改的最后一个值。 您可以添加使用 Form.Repaint 方法(其中 Form=您的表单对象)作为 GotFocus 事件的一部分,以确保在更改基础数据源后刷新屏幕。
您可以通过在事件中放置一个 debug.print 语句来测试它以确保两个事件都被触发,例如 debug.print "GotFocus ComboboxA"