パソコン情報

【Access】複数選択不可のチェックボックスをVBAで行う(フラグを立てる方法)

 

やりたい事は、選択したら対象レコードのflagフィールドだけに「1」が代入され、他のレコードのフィールドは「0」になるという動作をさせたいだけのシンプルな事です。

Accessのデザインモードで、チェックボックスやラジオボタンというパーツがありますが、今一つ欲しい機能ができなかったので自分でコードを書いてみました。

 

 

複数選択不可にするには?

ちょっとラジオボタンの使い方が分からなかったので、チェックボックスで動作確認をすることにしました。

 

実際にチェックを入れると、flagフィールドに「-1」が代入されるようです。

チェックを外すと、「0」が代入されました。

この状態ですと、

ココがポイント

複数選択が可能な状態

です。

 

 

では、複数選択させたくない場合は?

ココがポイント

他のレコードのflagフィールドの値を「0」にする

だけですね。

 

 

チェックボックスを使わないでやる

 

もちろん、チェックボックスを使った複数選択不可も、これから下記に書くような事をすれば可能になりますが、ボタンを大きくしたかったので、「設定」というボタンをクリックしたら、他のレコードのflagフィールドを「0」にしてから、対象レコードflagに「1」が入力されるというコードを作成してみました。

 

 

Private Sub txt_set_Click()


Dim cn As New ADODB.Connection
Dim cmd As ADODB.Command
Dim SQL As String

On Error GoTo ErrRtn
 
        Set cn = CurrentProject.Connection
        Set cmd = New ADODB.Command
        cmd.ActiveConnection = cn
 
        cn.BeginTrans
 
 
                SQL = "UPDATE dbo_fba SET dbo_fba.flag = 0 WHERE '*' "
                cmd.CommandText = SQL
                cmd.Execute
 
        cn.CommitTrans
         
                Set cmd = Nothing
                cn.close: Set cn = Nothing
ExitErrRtn:
                flag = 1
                DoCmd.ShowAllRecords
                Exit Sub
 
ErrRtn:
                MsgBox "失敗しました。再度実行してください。: " & Err.Description
                cn.RollbackTrans
                Set cmd = Nothing
                cn.close: Set cn = Nothing
                End
End Sub

選択されたことを分かりやすく表示

人間が選択する作業なので、flagフィールドに「0」とか「1」とかを見て判断するのは親切ではありません。

そこで、もっとわかりやすく表示させるために、

ココがおすすめ

非連結のテキストボックスを使ってわかりやすく表示機能を実装

しました。

 

 

非連結のテキストボックスを設置したら、コントロールには、

=”設定中”

というように、表示させたい文字を入れます。

また、選択されてない時には、何も表示させたくないので、枠線も透明にしました。

 

次に、条件付き書式設定にて、flagの内容によって背景となじませて表示無にする場合と、赤背景に白文字で目立つようにする設定をしました。

 

これで、設定ボタンをクリックした時のレコードだけ「設定中」と表示されることになりました。

 

あとは、flagのテキストボックスを非表示にしておけば、人間からすれば、「0」か「1」かは関係なくなりますね。