Microsoft Access 掲示板

チェックボックス全部操作

5 コメント
views
4 フォロー

下記、チェックボックス操作について、全部一度に適応させるにはどのように変更すればよいでしょうか。。。

Private Sub btn全チェック_Click()
    Me.chkチェック.Value = True
End Sub

Private Sub btn全チェック外す_Click()
    Me.chkチェック.Value = False
End Sub

肩こり慢性
作成: 2020/07/29 (水) 11:06:08
通報 ...
1
hatena 2020/07/29 (水) 11:29:29 修正

帳票フォームで表示されている全レコードのチェックボックスのチェックをON/OFFする(=連結フィールドのValueを更新にする。)ということでしょうか。
それとも単票フォームあるいは非連結フォームに複数のチェックボックスか配置されていて、そのすべてのチェックボックスのチェックを外すということでしょうか。

とりあえず前者の方だと仮定して回答します。

フォームのレコードソースのテーブル名を「Tbl1」、
チェックボックスのコントロールソースのフィールド名を「Fld1」と仮定します。

Private Sub btn全チェック_Click()
    Dim rs As DAO.Recordset
    Set rs = Me.Recordset.Clone
    rs.MoveFirst
    Do Until rs.EOF
        rs.Edit
        rs!Fld1 = True
        rs.Update
        rs.MoveNext
    Loop
    Me.Recalc
End Sub

Private Sub btn全チェック外す_Click()
    Dim rs As DAO.Recordset
    Set rs = Me.Recordset.Clone
    rs.MoveFirst
    Do Until rs.EOF
        rs.Edit
        rs!Fld1 = False
        rs.Update
        rs.MoveNext
    Loop
    Me.Recalc
End Sub

あるいは、

Private Sub btn全チェック_Click()
    CurrentDb.Execute "UPDATE Tbl1 SET Tbl1.Fld1 = True;"
    Me.Requery
End Sub

Private Sub btn全チェック外す_Click()
    CurrentDb.Execute "UPDATE Tbl1 SET Tbl1.Fld1 = False;"
    Me.Requery
End Sub

後者の場合は処理後に先頭レコードへ移動します。

2
肩こり慢性 2020/07/29 (水) 11:40:33 0029a@1c915

仮定いただいたとおり、前者のパターンでした。しかし、こんなに複雑なVBAになるとは。
軽く考えておりました。。ありがとうございました。

3

結局、全レコードを更新するということは、連結しているテーブルの全レコードを更新するということになりますので、レコードセットを移動しながら更新するか、更新クエリで一気に更新するかに、なりますね。

5
肩こり慢性 2020/07/29 (水) 13:10:53 0029a@1c915

なるほど。更新クエリでもよいですね。勉強になりました!ありがとうございます。