- ベストアンサー
新しいレコードへの移動時にトグルボタンの選択を解除したい
- アクセス2007で作成したアンケートフォームで、トグルボタンの選択が新しいレコードへ移動した際に解除されない問題が発生しています。この問題を解決するために、コマンドボタンに設定を行いたいのですが、どのような設定が必要でしょうか?
- アクセス2007で作成したアンケートフォームにおいて、トグルボタンの選択が新しいレコードへ移動した時に解除されない問題が生じています。この問題を解消するためには、コマンドボタンにどのような設定を行えば良いのでしょうか?
- 新しいレコードへ移動した際にトグルボタンの選択を解除するための設定方法について教えてください。アクセス2007で作成したアンケートフォームにおいて、トグルボタンの選択がクリアされない問題が発生しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
フレームとは、オプショングループのこととなりますか。 Private Sub コマンドボタン_Click() Dim ctl As Control Dim subCtl As Control For Each ctl In Me.Controls If (ctl.ControlType = acOptionGroup) Then For Each subCtl In ctl.Controls If (subCtl.ControlType = acToggleButton) Then If (ctl.Value = subCtl.OptionValue) Then subCtl.ForeColor = 255 Else subCtl.ForeColor = 0 End If End If Next End If Next End Sub 上記では、コマンドボタンがクリックされた時に色変更します。 自フォーム上のコントロールの中で、オプショングループに対して、 オプショングループを構成しているコントロールの値と、現在のオプショングループの値が同じものを 赤にするものとなります。 後は、これを呼び出すタイミングと、各オプショングループの値をいつ、どのように設定するか考えられたらと思います。 オプショングループ自体が連結されているのなら、既定値を設定しておくとか、 フォームのレコード移動時であれば、更新対象/新規の区別なく上記処理で大丈夫そう。 (既定値の設定は忘れずに) ※従来のクリック時処理はそのままでも、上記 subCtl 部分の処理に書き換えてもよいと思います。 例えば、 Private Sub Form_Current() Call コマンドボタン_Click End Sub Private Sub FrmClick() Dim subCtl As Control For Each subCtl In Me.ActiveControl.Controls If (subCtl.ControlType = acToggleButton) Then If (Me.ActiveControl.Value = subCtl.OptionValue) Then subCtl.ForeColor = 255 Else subCtl.ForeColor = 0 End If End If Next End Sub Private Sub オプショングループ1_Click() Call FrmClick End Sub Private Sub オプショングループ2_Click() Call FrmClick End Sub Private Sub オプショングループ3_Click() Call FrmClick End Sub ・・・・・ ※その他、編集をキャンセルした場合とかは考えてみてください。
その他の回答 (1)
- 30246kiku
- ベストアンサー率73% (370/504)
回答つかないようですが、もう解決されましたか。 その場合はスルーしてください。 Private Sub トグルボタン_Click() If (Me.トグルボタン = True) Then Me.トグルボタン.ForeColor = RGB(255, 0, 0) Else Me.トグルボタン.ForeColor = 0 End If End Sub とか Private Sub Form_Current() If (Me.トグルボタン = True) Then Me.トグルボタン.ForeColor = RGB(255, 0, 0) Else Me.トグルボタン.ForeColor = 0 End If End Sub のようになっているのでしょうか 新規レコードが対象なのか Me.NewRecord で判別できるので Private Sub Form_Current() If (Me.NewRecord = True) Then ' 新規レコード用処理 Else ' 既存レコード用処理 End If End Sub ※ 既に各トグルボタン用のものを作っているのなら、 Private Sub Form_Current() Dim i As Integer If (Me.NewRecord = True) Then ' 新規レコード用処理(トグル1 ~ トグル8 を False に初期化) For i = 1 To 8 Me("トグル" & i) = False Next End If Call トグル1_Click Call トグル2_Click Call トグル3_Click Call トグル4_Click Call トグル5_Click Call トグル6_Click Call トグル7_Click Call トグル8_Click End Sub のように、作ってある関数を呼び出してもよいと思います。
補足
ご回答ありがとうございます! 継続してネットなどで調べてはいるのですが、解決できず、 また、なかなか回答がつかずに困っていました。 当方、初心者なもので、ご回答いただいたプログラムについて ご質問させていただいてもよろしいでしょうか? 今現在、選択/非選択のトグルボタンの色分けの設定は 以下のように各フレームごとに記述しています。 このようなプログラムだと、30246kikuさんのおっしゃることは できますでしょうか? Private Sub フレーム名_Click() Me!トグルボタン1.ForeColor = -255 * (Me.ActiveControl = 1) Me!トグルボタン2.ForeColor = -255 * (Me.ActiveControl = 2) End Sub それとも、30246kikuさんがおっしゃるように それぞれのボタンに以下のようなプログラムを書くべきでしょうか? Private Sub トグルボタン_Click() If (Me.トグルボタン = True) Then Me.トグルボタン.ForeColor = RGB(255, 0, 0) Else Me.トグルボタン.ForeColor = 0 End If End Sub なにぶんトグルボタンが100個、フレーム数は26個あるので・・・ でも上記のようなIF文でないとダメならば書き直します! 質問がちんぷんかんぷんでしたら申し訳ありません。 ご回答お待ちしております。
お礼
度々のご回答ありがとうございます!!! 無事にできました!! 感動です! 教えていただいたものを今一度見直して 精進していきます! 本当に助かりました! ありがとうございました!