如何使用 VBA 仅更新访问数据表中当前行的控件

How to update the controls on only the current row in an access datasheet with VBA

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

这是第一个组合框上的 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

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

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

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