2

下图所示的数据表子表单在每个单元格中都有一个组合框。如果您在左侧的一个单元格中选择一个新值,则右侧的单元格需要重新查询并设置为空(因为右侧的组合框被左侧的组合框过滤)。如果数据表中只有一行,我的代码运行良好。但是,如果有多个,我的代码会将所有组合框重置到右侧,跨越所有行(这很糟糕)。我需要在我的代码中进行哪些更改(在下面进一步列出)才能仅重置与选择的组合框位于同一行的字段?

子数据表的屏幕截图

这是第一个组合框上的 VBA:

Private Sub cbo_LOA_Segment1_AfterUpdate()
' requery all subsequent LOA combo boxes to
' show only LOAs matching the selected Agency AND that match the earlier LOA entries
    With Me
        !cbo_LOA_Segment2 = Null
        !cbo_LOA_Segment2.Requery
        !cbo_LOA_Segment3 = Null
        !cbo_LOA_Segment3.Requery
        !cbo_LOA_Segment4 = Null
        !cbo_LOA_Segment4.Requery
        !cbo_LOA_Segment5 = Null
        !cbo_LOA_Segment5.Requery
        !cbo_LOA_Segment6 = Null
        !cbo_LOA_Segment6.Requery
        !cbo_LOA_Segment7 = Null
        !cbo_LOA_Segment7.Requery
        !cbo_LOA_Segment8 = Null
        !cbo_LOA_Segment8.Requery
        !cbo_LOA_Segment9 = Null
        !cbo_LOA_Segment9.Requery
        !cbo_LOA_Segment10 = Null
    End With


End Sub
4

1 回答 1

0

数据表视图类似于连续表单,因为控件实际上只存在一次。因此,正如您所注意到的,对于多条记录,一旦组合框的内容发生更改,这将影响每条记录。

解决此问题的唯一方法是一次仅显示 1 个记录。这对于您的应用程序可能不实用,具体取决于您拥有多少记录以及您的编辑过程是什么。再说一次,如果您只编辑可以使用唯一键找到的特定记录,这可能非常实用,因为您可以快速过滤数据。

您可以使用上面 Nathan 的建议,尽管这需要转置您的数据(一个主要不利因素)或大量代码来首先将您的表读入一个数组,将该数组写到屏幕上,然后(向后工作)更新每条记录一次调用的表。效率不高,但可行。

于 2016-03-07T18:24:37.390 回答