【问题标题】:How to notify when a checkbox is checked选中复选框时如何通知
【发布时间】:2019-07-09 09:39:41
【问题描述】:

通过自定义函数执行检查时,无法识别复选框的更改。

我们有可以点击复选框的表单。在这种情况下,记录将被添加到列表中,该列表将使用保存功能进行更新。并且提到了检查所有复选框的功能,但这不像我单击单个复选框时那样。

代码“全选”

Private Sub Befehl83_Click()
    With Me.RecordsetClone
        .MoveFirst
        Do Until .EOF
            .Edit
            !visited = True
            .update
            .MoveNext
        Loop
    End With
End Sub

点击复选框

Private Sub chkVisited_Click()
    If Not visitedList.Contains(Me.Form.Recordset.Fields("trainingMeasureID").Value) Then
        visitedList.Add Me.Form.Recordset.Fields("trainingMeasureID").Value
    Else
        visitedList.Remove Me.Form.Recordset.Fields("trainingMeasureID").Value
    End If

End Sub

目前复选框的状态在使用全选功能时不会被保存。仅当单独选择复选框时。

这两种情况下都应该正确保存。

【问题讨论】:

  • 您最好在选择/取消选择所有复选框后重新填充列表,不要在选择全部的循环中单独执行此操作

标签: ms-access checkbox vba


【解决方案1】:

这是一个不太理想的解决方案:

Private Sub Befehl83_Click()
    With Me.Recordset
        .MoveFirst
        Do Until .EOF
            .Edit
            .Fields("visited") = True
            .Update
            Call chkVisited_Click()
            .MoveNext
        Loop
    End With
End Sub

这将主动更新记录集,您实际上会看到活动记录在表单中移动。

另一种解决方案是重建代码并根据表单的记录集直接对基础数据源进行更新。然后相应地更新您的列表。

根据文档,RecordsetClone 是表单记录集的只读副本。 https://docs.microsoft.com/en-us/office/vba/api/access.form.recordsetclone

【讨论】:

  • 但事实并非如此。文档不正确,不知道为什么。
  • 我猜你指的是表单的 RecordsetClone 属性的只读状态。这实际上取决于您如何看待它,从表单的角度来看,它确实是只读的,因为对克隆记录集的任何更改都不会反映在表单的记录集中。从基础表的角度来看,是的,如果它是可更新的记录集,数据将被更新。
  • 不,我没有指任何东西——除了错误的文档页面。对于 RecordsetClone,您不知何故弄混了:对此所做的任何更改都会立即反映在表单中,而无需重新查询。
【解决方案2】:

使用 AfterUpdate 事件:

Private Sub Befehl83_Click()

    With Me.RecordsetClone
        .MoveFirst
        Do Until .EOF
            If !visited.Value = False Then
                .Edit
                !visited.Value = True
                .update
            End If
            .MoveNext
        Loop
    End With

End Sub

【讨论】:

  • 实际上Checkbox上没有Update-Option。
  • 这不是“更新”,而是一个事件。在属性中列出。
  • 我发现它是一个按钮 Like checkbox,..not real checkbox.. mmhh 所以没有更新
  • 好的。我已经更新了答案 - 现在非常接近你的答案。它工作 - 无需重新查询或刷新。如果没有,那么还有其他事情发生。
  • 感谢古斯塔夫。正如 jbud 提到的,RecordsetClone 只提供一个只读集。所以他的回答比你的建议更正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
相关资源
最近更新 更多