アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
よろしくお願いいたします。

只今、アクセス2007でアンケートの結果を入力するためのフォームを作成しています。

アンケートはすべて選択制になっていますので、トグルボタンで選べるようにしました。また選択したものとしていないもの違いをわかりやすくするために、選択したものは、ボタンの文字が黒から赤に変わるようにしました。

アンケートを最後まで入力し終わったら、コマンドボタン【次を入力】を押すと、新しいレコードへ移動するようにしました。

しかし、トグルボタンの選択がクリアされず、ひとつ前のレコードの選択結果がそのままです。

新規レコードに移動した時に、前レコードの選択結果をクリアにするためにはコマンドボタンにどのような設定をすればいいのでしょうか?

よろしくお願いいたします。

A 回答 (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
・・・・・

※その他、編集をキャンセルした場合とかは考えてみてください。
    • good
    • 0
この回答へのお礼

度々のご回答ありがとうございます!!!

無事にできました!!
感動です!

教えていただいたものを今一度見直して
精進していきます!

本当に助かりました!
ありがとうございました!

お礼日時:2009/07/03 14:07

回答つかないようですが、もう解決されましたか。


その場合はスルーしてください。


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文でないとダメならば書き直します!

質問がちんぷんかんぷんでしたら申し訳ありません。
ご回答お待ちしております。

補足日時:2009/07/02 10:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています