オプショングループとオプションボタンを使用し文字データを保存する方法 - Access

オプショングループ内にオプションボタンを配置し使用する場合、戻り値は数値になります。

選択結果を保存したいフィールドがテキスト型の場合、直接オプショングループに接続することができません。
そこでVBAを作成し文字データを保存するようにします。
オプショングループについては「オプショングループの作成方法」を参照してください。
オプションボタンについては「オプションボタンの作成方法」を参照してください。




BackHome Backコントロール2
下の型番テーブルの型番フィールドに選択データを保存します。
型番フィールドはテキスト型になっています。
型番テーブル

オプショングループの作成

1.フォーム デザインでフォームを作成し、リボンの[フォーム デザイン ツール]~[デザイン]~コントロール グループの[オプション グループ]を選択します。
2.フォーム上でドラッグし配置します。
3.オプション グループ ウィザードが開くので、オプションに付けるラベルを入力します。
[次へ]ボタンをクリックします。
[オプション グループ]を選択し挿入

[既定のオプションを設定しない]を選択し、[次へ]ボタンをクリックします。
[既定のオプションを設定しない]を選択

[後の作業で使用する]を選択し、[次へ]ボタンをクリックします。
[後の作業で使用する]を選択

変更しないで、[次へ]ボタンをクリックします。
[次へ]ボタンをクリック

変更しないで、[次へ]ボタンをクリックします。
[次へ]ボタンをクリック

グループの標題を入力し、[完了]ボタンをクリックします。
これでオプショングループの挿入は完了です。
グループの標題を入力し完了

フォームのレコードソースに、保存先のテーブルを指定します。
ここではT_型番テーブルになります。
レコードソースに、保存先のテーブルを指定

保存するフィールドと接続するテキストボックスを挿入し、コントロールソースに保存先のフィールドを指定します。
ここでは型番フィールドになります。
コントロールソースに保存先のフィールドを指定


VBAでオプショングループの選択結果を保存する

オプショングループを選択した状態で、プロパティシートの[更新後処理]~[イベントプロシージャ]を選択し、右の[…]ボタンをクリックします。
プロパティシートの[更新後処理]~イベント

更新後処理イベントの、AfterUpdate()が表示されるので、テキストボックスに選択結果を代入するVBAを入力します。
テキストボックスに選択結果を代入するVBA

・オプショングループの選択結果を、Switchでそれぞれ処理しています。
・テキストボックスには直接文字データを代入することもできますが、ここではオプションボタンのラベルの標題を代入しています。これにより表示されているデータが変更されても、そのデータが代入されるので間違いや手間が省けます。

Private Sub フレーム13_AfterUpdate()
    Select Case Me!フレーム13.Value
        Case 1: Me!テキスト11.Value = Me!ラベル17.Caption 'AP-001
        Case 2: Me!テキスト11.Value = Me!ラベル19.Caption 'RS-225
        Case 3: Me!テキスト11.Value = Me!ラベル21.Caption 'YU-301
        Case 4: Me!テキスト11.Value = Me!ラベル23.Caption 'OP-458
    End Select
End Sub

実行画面です。
型番を選択すると、選択した文字データがテキストボックスに表示されています。
テキストボックスはコントロールソースで型番フィールドと接続されているので、自動的にテーブルに保存されます。
選択した文字データがテキストボックスに表示

いくつか新規レコードで選択した後、テーブルの状態を確認したところ、間違いなく保存されていました。
新規レコードで選択した後のテーブル

今回レコードに移動させたところ、オプショングループは前のレコードで選択した位置を記憶していました。
それはそれでいいのですが、今回はレコード移動の時点で何も選択されていない状態にします。

フォームのプロパティシートの[レコード移動時]~[イベントプロシージャ]を選択し、右の[…]ボタンをクリックします。
プロパティシートの[レコード移動時]イベント

オプショングループが何も選択されていない状態にするVBAです。
オプショングループが何も選択されていない状態にするVBA

Private Sub Form_Current()
    Me!フレーム13.Value = 0
End Sub


BackHome Backコントロール2

Copyright(C) FeedSoft