2

下図のデータシート サブフォームには、すべてのセルにコンボ ボックスがあります。左側のセルの 1 つで新しい値を選択した場合、右側のセルを再クエリして null に設定する必要があります (右側のコンボ ボックスは左側のコンボ ボックスによってフィルター処理されるため)。データシートに行が 1 つしかない場合、私のコードはうまく機能します。ただし、複数ある場合、私のコードはすべてのコンボ ボックスをすべての行にわたって右側にリセットします (これは悪いことです)。選択されているコンボ ボックスと同じ行のフィールドのみをリセットするには、コード (以下にリスト) で何を変更する必要がありますか?

サブフォーム データシートのスクリーンショット

最初のコンボ ボックスの 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 回しか存在しないという点で、連続フォームに似ています。お気づきのように、複数のレコードでは、コンボ ボックスの内容が変更されると、すべてのレコードに影響します。

これを回避する唯一の方法は、一度に 1 つのレコードのみを表示することです。これは、所有するレコードの数と編集プロセスによっては、アプリケーションにとって実用的ではない場合があります。繰り返しになりますが、一意のキーを使用して見つけることができる特定のレコードのみを編集すると、データをすばやくフィルター処理できるため、非常に実用的です。

上記のネイサンの提案を使用することもできますが、データを転置するか (大きな損害)、最初にテーブルを配列に読み取り、その配列を画面に書き込んでから (逆方向に) 更新するために大量のコードが必要になります。レコードごとに 1 つの呼び出しを持つテーブル。あまり効率的ではありませんが、実行可能です。

于 2016-03-07T18:24:37.390 に答える