• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:新しいレコードへの移動時にトグルボタンの選択を解除したい)

新しいレコードへの移動時にトグルボタンの選択を解除したい

このQ&Aのポイント
  • アクセス2007で作成したアンケートフォームで、トグルボタンの選択が新しいレコードへ移動した際に解除されない問題が発生しています。この問題を解決するために、コマンドボタンに設定を行いたいのですが、どのような設定が必要でしょうか?
  • アクセス2007で作成したアンケートフォームにおいて、トグルボタンの選択が新しいレコードへ移動した時に解除されない問題が生じています。この問題を解消するためには、コマンドボタンにどのような設定を行えば良いのでしょうか?
  • 新しいレコードへ移動した際にトグルボタンの選択を解除するための設定方法について教えてください。アクセス2007で作成したアンケートフォームにおいて、トグルボタンの選択がクリアされない問題が発生しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.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 ・・・・・ ※その他、編集をキャンセルした場合とかは考えてみてください。

sotamiki
質問者

お礼

度々のご回答ありがとうございます!!! 無事にできました!! 感動です! 教えていただいたものを今一度見直して 精進していきます! 本当に助かりました! ありがとうございました!

その他の回答 (1)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

回答つかないようですが、もう解決されましたか。 その場合はスルーしてください。 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 のように、作ってある関数を呼び出してもよいと思います。

sotamiki
質問者

補足

ご回答ありがとうございます! 継続してネットなどで調べてはいるのですが、解決できず、 また、なかなか回答がつかずに困っていました。 当方、初心者なもので、ご回答いただいたプログラムについて ご質問させていただいてもよろしいでしょうか? 今現在、選択/非選択のトグルボタンの色分けの設定は 以下のように各フレームごとに記述しています。 このようなプログラムだと、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文でないとダメならば書き直します! 質問がちんぷんかんぷんでしたら申し訳ありません。 ご回答お待ちしております。