2016-03-07 29 views
1

以下图片中的数据表子窗体在每个单元格中都有一个组合框。如果您在左侧的单元格中选择一个新值,则右侧的单元格需要重新查询并设置为空(因为右侧的组合框由左侧的单元格过滤)。如果数据表中只有一行,我的代码运行良好。然而,如果有不止一个,我的代码会将所有组合框重置到所有行的右侧(这很糟糕)。我需要在我的代码中进行更改(下面进一步列出),以仅重置与选定的组合框相同的行上的字段?如何使用VBA更新访问数据表中当前行上的控件

Screenshot of the sub-formed datasheet

这里的第一个组合框的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 
+0

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

回答

0

数据表视图类似于连续形式,在控制只有实际存在一次。所以,正如你已经注意到的,多个记录一旦组合框的内容发生变化就会影响每个记录。

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

你可能可以使用Nathan的上面的建议,尽管这需要将你的数据(一个主要的损害)或一大堆代码先转换成数组,然后将数组写入屏幕然后反向工作)用每个记录一次呼叫来更新表格。效率不高,但可行。

+0

一旦你知道你想要的水平方向,实现我的方法并不那么棘手,即字段以及您想要显示的人数,您可以通过RST控制它,与子窗体相同,您可以拥有多个子窗体并控制它们。我同意,这将是最后一步,一旦数据/布局完成,否则你开始追逐你的尾巴:) –

+0

嗯......虽然都显得有点笨拙。像ActiveDatasheet可以帮助吗? –

相关问题