2016-03-07 61 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可以幫助嗎? –

相關問題