チェックボックスを一括On/Offする

 フォームに多数のチェックボックスを置いたうえで、簡単なVBAを用いて一括でOnまたはOffにする方法についてです。
 ただし、ここで示すのは各レコード内の連結チェックボックス、またはヘッダやフッタに設置する非連結のチェックボックスを操作する方法です。「多数のレコードのチェックボックスを一括On/Offする」という内容ではありません。

 方法については2つ紹介します。
 後者の場合は「一部のチェックボックスを一括On/Offする」ということが可能ですので、そのような設定例を示しています。

手順

ControlTypeプロパティを利用する方法

 フォーム上の全コントロールを走査して、そのControlTypeプロパティの値によってチェックボックスであることを識別し操作する方法です。

f:id:accs2014:20190220113445p:plain:right:w600

 レコードソースとしてこのようなテーブルを用います。

f:id:accs2014:20190220113442p:plain:right:w550

 フォームのデザインビューにて各コントロールを置いた状態です。
 ここでコマンドボタンを1つ置き、「名前」を「cmd_全選択」とします。

f:id:accs2014:20190220113439p:plain:right:w350

 そしてフォームモジュールに次のようなコードを記します。
 フォーム上の各コントロールのうちControlTypeプロパティの値が「acCheckBox」であるものをすべてOn(True)にするという内容です。
 一括Offにする場合は「True」を「False」にします。

Option Compare Database

Private Sub cmd_全選択_Click()

    Dim i As Control

    For Each i In Me.Controls
        If i.ControlType = acCheckBox Then
        i.Value = True
        End If
    Next

End Sub

f:id:accs2014:20190220113436p:plain:right:w550

 コマンドボタンをクリックするとすべてのチェックボックスがOn(True)になりました。

タグプロパティを利用する方法

 各チェックボックスの「タグ」プロパティ(特別な効果をもたないプロパティです)に共通する値を設定しておく方法です。フォーム上の全コントロールを走査するのは同じですが、そのタグプロパティの値によって一括操作の対象であることを識別します。
 チェックボックスのうち一部のものだけを一括操作することが可能になりますし、コントロールの種類を問わず操作の対象とすることも可能です。
 以下ではチェックボックスのうち一部のものだけを一括操作する例を試してみます。

f:id:accs2014:20190220113433p:plain:right:w650

 レコードソースとしてこのようなテーブルを用います。
 チェックボックスのうち、左側の5つと右側の5つをそれぞれ別のグループとして区別します。

f:id:accs2014:20190220113526p:plain:right:w550

 フォームのデザインビューにて各コントロールを置いた状態です。
 テーブル上の左側の5つのチェックボックスを上段に、右側の5つのチェックボックスを下段に配置しています。
 ここでコマンドボタンを2つ置き、「名前」をそれぞれ「cmd_メディア全選択」「cmd_政策全選択」とします。

f:id:accs2014:20190220113522p:plain:right:w600

 そして上段のチェックボックスをすべて選択し(ラベルは選択しない)、「タグ」プロパティの値を「メディアグループ」とします。

f:id:accs2014:20190220113519p:plain:right:w600

 同じく下段のチェックボックスについては「政策グループ」とします。

f:id:accs2014:20190220113516p:plain:right:w350

 フォームモジュールに次のようなコードを記します。
 フォーム上の各コントロールのタグプロパティの値を取得し、設定しておいたものに一致するものをすべてOn(True)にするという内容です。
 つまり、ボタン「cmd_メディア全選択」をクリックすればタグプロパティが「メディアグループ」であるものがOn(True)になり、ボタン「cmd_政策全選択」をクリックすればタグプロパティが「政策グループ」であるものがOn(True)になります。

Option Compare Database

Private Sub cmd_メディア全選択_Click()

    Dim i As Control

    For Each i In Me.Controls
        If i.Tag = "メディアグループ" Then
        i.Value = True
        End If
    Next

End Sub

Private Sub cmd_政策全選択_Click()

    Dim i As Control

    For Each i In Me.Controls
        If i.Tag = "政策グループ" Then
        i.Value = True
        End If
    Next

End Sub

f:id:accs2014:20190220113513p:plain:right:w600

 「cmd_政策全選択」のボタンをクリックしたところです。
 下段のチェックボックスだけがOnになりました。