VBA 在 Microsoft Access 2013 中标记复选框,如果以链接形式输入数据

VBA in Microsoft Access 2013 mark checkbox if data is entered in linked form

我在 Access 2013 中创建了一个数据库来跟踪拍卖的捐赠和征集。我的潜在客户设置在一个 table/form 中,其中有一个可用的列来说明他们今年是否参与。

物品寄出后,我会在链接的 "Donations" 表格中记录该物品,该表格会调用其捐赠者。

是否可以在捐赠表格中输入捐赠后自动选中“前景”表格中的参与复选框?

我觉得我可以想象一个稍微简单的 JS 片段可以解决这个问题,但我对 Access 的了解还不足以完成该程序中的任务。

VBA 可能存在更优雅的解决方案,但我将向您展示一种使用宏的方法:

首先在您的 table 中创建一个跟踪捐助者的 "Named Macro",我们将其称为 UpdateParticipation。然后为宏创建两个参数 - 第一个是 prmAction,它将确定您是从捐赠中插入还是删除了一个项目 table。第二个参数是 prmDonorID,它将标识 table 中要更新状态的记录。

如果添加捐赠,指定的宏将选中参与框,如果删除捐赠,则取消选中参与框。宏将如下所示:

If [prmAction]="Inserted" Then
    Look Up A Record In DonorsTable
    Where Condition = [DonorsTable].[ID]=[prmDonorID]
    Alias
    EditRecord
    Alias
        SetField
        Name DonorsTable.Participated
        Value = True
    End EditRecord
Else If [prmAction]="Deleted" Then
    Look Up A Record In DonorsTable
    Where Condition = [DonorsTable].[ID]=[prmDonorID]
    Alias
    EditRecord
    Alias
        SetField
        Name DonorsTable.Participated
        Value = False
    End EditRecord
End If

现在,每当您在 DonationsTable 中并且 insert/delete 一条记录时,您想要触发指定的宏。

所以在 DonationsTable 中创建一个插入后事件,如下所示:

RunDataMacro
    Macro Name DonorsTable.UpdateParticipation
Parameters
    prmAction = "Inserted"
    prmDonorID = [DonationsTable].[DonorID]

删除记录时有点棘手 - 如果您要删除捐赠者的第二次捐赠,他们仍在参与,因此您不想取消选中 DonorsTable 中的框。因此,创建一个如下所示的删除后事件:

Look Up A Record In SELECT DonationsTable.DonorID FROM DonationsTable;
    Where Condition = [DonorID]=[Old].[DonorID]
    Alias
    StopMacro
RunDataMacro
    Macro Name DonorsTable.UpdateParticipation
Parameters
    prmAction = "Deleted"
    prmDonorID = [DonationsTable].[DonorID]

如果您插入或删除捐赠,这将覆盖您。如果编辑 DonationsTable 中的现有记录,您将需要创建类似的设置,其中 DonorID 从一个更改为另一个。