フォームにチェックボックスに関する動作が表示されていますが、他の誰かがそれを見つけて説明できるかどうかは疑問です。MS Accessチェックボックスにブール値1または0以外の値があります
ここFrequencyCodesと呼ばれるテーブルにバインドされたフォーム、です:
フォームが結合しているものの、チェックボックスが結合していないですが。フォームのロードイベントでは、1から7までの数字のカンマ区切り文字列(「CleaningDays」列内)を読み取り、ボックスを適切にチェックするプロシージャによってデータが読み込まれます。ここではそのコードは次のとおりです。
Dim ctl As Control For Each ctl In Me.Controls If TypeOf ctl Is CheckBox Then ctl.Value = InStr(1, Me.CleaningDays & ",", Right(ctl.Name, 1) & ",") End If Next ctl
アイデアは、「1週間に1回以上」のパターンが選択された場合、特定の日は、次に選択することができるということです。上のオプションボタン(洗浄パターン用)との視覚的な一貫性の理由から、チェックボックスを視覚的にグループ化するオプショングループコントロールを追加しました。チェックボックスを追加して複数のオプションを選択できるようにしました(オプショングループに含まれていれば明らかに不可能ですが、フォームからチェックボックスを切り取り、フォームの他の場所に貼り付けた後、オプショングループに含まれていたオプションの値ではなく、真または偽の可能な値を持つ "標準"チェックボックスのセットが生成されました。
私はその後、OKボタンのClickイベントに、チェックボックスをループし、その名前の最後の文字を使用して、(彼らはCHK1呼ばれている - chk7)コード作成したカンマを構築します清掃が行われる日の区切りリスト
ここでは、コードです:
Dim ctl As Control
Dim Output As String
For Each ctl In Me.Controls
If TypeOf ctl Is CheckBox
If (ctl = True) Then
Output = Output & Right(ctl.Name, 1) & ","
End If
End If
Next ctl
If Output <> vbNullString Then
Debug.Print "String calculated was " & Left(Output, Len(Output) - 1)
ReadCheckBoxes = Left(Output, Len(Output) - 1)
Else
ReadCheckBoxes = vbNullString
End If
期待通りの形が働いていなかったので、私はいくつかのテストをしましたが。チェックボックスは、期待どおりブール値(または1と0)を返すようには見えませんでした。
上記のスクリーンショットから、この特定のテストでは、月曜日から金曜日のオプションを選択していることが分かります(chk2-chk6の値はtrueにする必要があります)。
しかし、ここで私はすぐに窓にいくつかのテストをやってから見つけたものです:
? CHK1
?CHK2
-1
?chk3
-1
?chk4
? chk5
-1
?chk6
?chk7
は今、私はゼロ以外の値がtrueに相当し、そしてそれは、したがって、これらの値が動作する必要があることを知っています。しかし、彼らはそうではなかった。 OKをクリックすると、変更された値だけが正しく記録されることがわかりました。つまり、フォームがロードされたときに月曜日から金曜日にチェックを入れ、土曜日にOKをクリックする前にchk7(土曜日)選択されたものとして。
誰でもこの動作を私に説明できますか?これらのチェックボックスがまだオプショングループの一部であった場合、私は期待していたOptionValueプロパティを見ることができませんが、これは返される値のようです。
ありがとうございました!
オプショングループは完全に機能します。 – Gustav