Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2007)
チェックボックスを1つだけしか入れられなくしたい
投稿日時: 17/08/24 14:15:48
投稿者: 滝沢

テーブル内に「Yes/No型」のフィールド3つあります。
この3つのフィールドは「全てNo」または「1つだけYes」としたいです。
フォーム上で上記のルール通りに動くように下記のようにしたら意図した通りの動きになったんですが
本当にこれで正しいでしょうか?
なんとなくCaseのTrue・Falseが逆のような気がして、なぜこれでうまく行ったのかよくわかりません。
よろしくお願い致します。
 
----------------------------------
チェックボックス名:c_01・c_02・c_03
----------------------------------
Private Sub c_01_click()
Select Case Me.c_01
Case False
  Me.c_01 = false
  Me.c_02 = false
  Me.c_03 = false
Case True
  Me.c_01 = true
  Me.c_02 = false
  Me.c_03 = false
End Select
End Sub
----------------------------------

回答
投稿日時: 17/08/24 17:00:24
投稿者: hatena
投稿者のウェブサイトに移動

クリックすることで、True・Falseが入れ替わるので、コードで入れ替える必要はないです。
 
ですので、コードとしては下記でOKです。
 
Private Sub c_01_Click()
    Select Case Me.c_01
    Case False
      Me.c_02 = False
      Me.c_03 = False
    Case True
      Me.c_02 = False
      Me.c_03 = False
    End Select
End Sub
 
自分自身(Me.c_01)を同じ値で上書きする必要はないということです。
さらに言えば、自分以外をFalseにするだけですので、Select Case も必要ないです。
 
Private Sub c_01_Click()
  Me.c_02 = False
  Me.c_03 = False
End Sub
 
Private Sub c_02_Click()
  Me.c_01 = False
  Me.c_03 = False
End Sub
 
Private Sub c_03_Click()
  Me.c_01 = False
  Me.c_02 = False
End Sub

回答
投稿日時: 17/08/25 03:29:58
投稿者: hatena
投稿者のウェブサイトに移動

さらに、さらに言えば、
テーブル設計の段階で、
フィールドは数値型一つだけで、1, 2, 3 を入力する。
フォーム上では、オプショングループを配置して、その中にチェックボックスを3つ配置する。
オプショングループのコントロールソースは、数値型のフィールドに設定。
チェックボックスのオプション値はそれぞれ 1, 2, 3 に設定(配置した時点で自動で設定されている。)
 
以上でVBAなしで、一つだけしか選択できないようになります。

投稿日時: 17/08/25 09:46:23
投稿者: 滝沢

hatena様
コメントありがとうございます。
----------------------------------
Private Sub c_01_Click()
   Me.c_02 = False
   Me.c_03 = False
 End Sub
   
 Private Sub c_02_Click()
   Me.c_01 = False
   Me.c_03 = False
 End Sub
   
 Private Sub c_03_Click()
   Me.c_01 = False
   Me.c_02 = False
 End Sub
----------------------------------
これでばっちりうまくいきました。考え過ぎでしたね。
最初はオプショングループでやろうとしてうまくできなかったんですが
1つ1つ値を変えれば良いということですね。
もっと数が多い場合はこの方が楽ですね。
 
ありがとうございます。