【问题标题】:How to update the controls on only the current row in an access datasheet with VBA如何使用 VBA 仅更新访问数据表中当前行的控件
【发布时间】:2016-06-21 05:45:07
【问题描述】:

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

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

【问题讨论】:

  • 这会发生,因为控件是相同的,只是每个控件的数据不同。过去,我使用多行文本框,模仿一个子表单,然后使用诸如 LOA_Segment2_Row1.....5 之类的东西。

标签: ms-access combobox vba datasheet


【解决方案1】:

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

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

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

【讨论】:

  • 一旦你知道水平方向想要什么,即字段和要显示多少,你可以通过RST控制它,就像子表单一样,你可以有多个子窗体并控制它们。我同意,一旦数据/布局最终确定,这将是最后一步,否则你开始追逐你的尾巴:)
  • 嗯……不过,两者都显得有些笨拙。 ActiveDatasheet 之类的东西可以提供帮助吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-25
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多