トグルボタンの排他制御でご教授ください

このQ&Aのポイント
  • エクセル2003のマクロVBAで、トグルボタンの排他制御を行いたい
  • ひとつのフレーム上に、二つのトグルボタンを追加して、排他制御を行いたい
  • フレーム名を可変にすれば、共用できるのではないかと思っていますが、うまくいきません
回答を見る
  • ベストアンサー

トグルボタンの排他制御でご教授ください。

いつもお世話になっております。 エクセル2003のマクロVBAで、トグルボタンの排他制御を行っております。 ひとつのフレーム上の二つのトグルボタンの制御は、MSのサンプルソースを参考に以下のようなソースを作成して、制御できております。 教えて頂きたい内容は、同じようにひとつのフレーム上に、二つのトグルボタンを追加して、排他制御を行いたいたく検討しています、できれば、以下の ExclusiveToggleButtons() を使いたいと思っていますが、for ループのフレーム名が固定です。 フレーム名を可変にすれば、共用できるのではないかと思っていますが、なかなかうまくいきません、よい方法がありましたら、ご教授願います。 --- 標準モジュール ------------ start --- Sub ExclusiveToggleButtons() Dim my_toggle As Control ' Loop through all the ToggleButtons on Frame1. For Each my_toggle In myStartForm.my_MonthChoice_Frame.Controls ' If Name of ToggleButton matches name of ToggleButton ' that was clicked... If my_toggle.Name = my_Clicked_But Then '...select the button. my_toggle.Value = True Else '...otherwise clear the selection of the button. my_toggle.Value = False End If Next --- 標準モジュール ------------ end ---

  • pao5
  • お礼率94% (49/52)

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

コントロールのフィールドtagにグルーピングのための情報を書き込み、それをもって排他制御すべきグループに属しているかを判定するとか。 本当は、トグルボタンを使うのをあきらめて、素直にオプションボタンを使うようにするのが妥当な気がします。

pao5
質問者

お礼

ありがとうございました。 わしの勉強不足で教えて頂いた内容で機能を実現することはできませんでした。 とりあえずは、今のところ、トグルボタンの組み合わせは2つなので、2つ別の 処理で対応することにしました。 ご指導ありがとうございました。

関連するQ&A

  • 別シートのトグルボタンを指定したい

    複数シートがあって、それぞれのシートにトグルボタンがあるとします。 トグルボタンを押したときの動作は同じなので、 標準モジュールとかに動作内容を記述したいのですが、 「If ActiveSheet.ToggleButton1 = False Then」とか記述しても エラーが出ます。 アクティブなシートにあるトグルボタン1が押された時の動作内容を書きたいです。

  • ExcelのToggleButtonを排他的に。。

    師も走りまわる12月。。皆様(師)も走りまわっていることでしょう。 私は。。。走りません、はい。 本題です。 ExcelのVBAでToggleButtonを排他的に使いたいのです。 調べるとオプションボタンになさいと書かれてはいるのですが・・・。 ワークシート上にToggleButton1~3があります。 1を押す(凹)と“処理A”,もう一度押す(凸)と“処理Z” 2  同上    “処理B”,  同上 3  同上    “処理C”,  同上 以下のコードでなんとなく動くのですが,排他的動作の際には,TrueなToggleButton#の動作をおこなってしまいます。 Excel2007,Windows7です。 師の皆様の良い御提案が御座いましたら御教示下さい。 ----ボタンがあるシートモジュールに記載---------------------------------------- Option Explicit Dim strCode As Variant Private Sub ToggleButton1_Click() If ToggleButton1.Value = False Then strCode = "処理中Z" ' Debug.Print "AからZに戻します。" Else strCode = "処理中A" ' Debug.Print "Aを押しました。" ToggleButton2.Value = False ToggleButton3.Value = False End If 'Debug.Print "Aでの処理をします。" Call 処理(strCode) 'Debug.Print "Aから処理をしました。" End Sub Private Sub ToggleButton2_Click() If ToggleButton2.Value = False Then strCode = "処理中Z" ' Debug.Print "BからZに戻します。" Else strCode = "処理中B" ' Debug.Print "Bを押しました。" ToggleButton1.Value = False ToggleButton3.Value = False End If 'Debug.Print "Bでの処理をします。" Call 処理(strCode) 'Debug.Print "Bから処理をしました。" End Sub Private Sub ToggleButton3_Click() If ToggleButton3.Value = False Then strCode = "処理中Z" Else strCode = "処理中C" ToggleButton1.Value = False ToggleButton2.Value = False End If Call 処理(strCode) End Sub Sub 処理(strCode) Dim i As Long Dim Start As Single Dim Finish As Single Start = timer i = 0 'Application.ScreenUpdating = False Application.Calculation = xlCalculationManual For i = 1 To 1000 i = i + 1 Cells(2, 1).Value = strCode & i Next i Application.Calculation = xlCalculationAutomatic 'Application.ScreenUpdating = True Cells(1, 1).Value = strCode Finish = timer Cells(3, 1).Value = Format$(Int((Finish - Start) * 10 ^ 4 + 0.5) / 10 ^ 4) End Sub --------------------------------------------------------------------------- おまけ:  上記サンプルを作ってみましたが,ToggleButton1だけ相対的に処理速度が速いです・・・。 なぜなんでしょう??

  • 日報の休日ボタン(トグルボタン)を一度に解除するマクロは?

    今、休日設定の違う従業員が使用する日報にて、 日付部分をクリック(凹ませる)するとその列の色が変わり、 再度クリック(凸らせる)して戻す、トグルボタンを E2~AI2まで設置しています。 そのボタンを別のボタンで一括して 戻す(凸らせる)事は出来ないでしょうか? 今、トグルボタンに下記の式を入れています。                 ↓それぞれ1~31までのButton番号 Private Sub ToggleButton1_Click() If ToggleButton1.Value Then Range("E2").Value = 1     ←それぞれE2からAI2までを表記 Else Range("E2").Value = ""     ←同様にE2からAI2まで End If End Sub 上記のボタン番号、セル番号を変えて31個分の式をそれぞれの ボタンに貼り付けています。

  • Excel トグルボタンについて教えて下さい

    今朝、コマンドボタンについて質問をして、 ボタンを押すごとに、特定のセルに1とブランク(=0)を 交互に入力する方法を教えてもらったのですが、その中で 新しい、トグルボタンという機能を教えてもらい、 本などを見て自分なりにやってみたのですが、 回答が見つからず、またまた書き込んでしまいました;; 先ほどは、ABS()の絶対値を使って、0と1を繰り返す方法と 下記のプログラムを教えて頂いたのですが、 Private Sub CommandButton1_Click() If Range("D1").Value <> "" Then   Range("D1").Value = "" Else    Range("D1").Value = 1 End If End Sub 作りたい書類には1を入力したときに凹ませたいのですが、 教えてもらった回答では どうしても、0の時に凹んで 1のときに凸るんです。 内容を色々変えてやってみたものの成功には至らず、 本を見ても回答に見合った例がなく、うまく出来ません。 っというか、コマンドボタンと同様の式では、 凹んだときにTrueを返して、凸ったときにFalseを返すという 折角のトグルボタンの意味が無いですよね? とどのつまりが、お知恵をお貸し頂きたいということで、 毎度ながら申し訳ないのですが 何卒宜しくお願いします。

  • トグルボタンの文字色

    windows-xp、アクセス2003、を使っています。 フォームに複数のトグルボタンを置き、下記コードをつけました。 そこで質問です。 「トグルボタンがONの時は赤色、OFFの時は黒色にする。」ということをしたいです。 できましたら、下記コードに書き加えて頂けませんでしょうか。 Private Sub CH01_Click() If CH01 = -1 Then CH02 = 0 CH03 = 0 End If End Sub Private Sub CH02_Click() If CH02 = -1 Then CH01 = 0 CH03 = 0 End If End Sub Private Sub CH03_Click() If CH03 = -1 Then CH01 = 0 CH02 = 0 End If End Sub すみませんが、宜しくお願い致します!!

  • HTML、Javascriptでトグルボタンを作成する方法について質問

    HTML、Javascriptでトグルボタンを作成する方法について質問です。 自分が考えた動作としては ひとつのform内に複数のボタンを設置 初期値(表示)は"有効" ボタンを押すと値(表示)が"無効"に変わる もう一度押すと"有効"に変わる これの繰り返しがしたい というものです。 書いたコードは <javascript部分> function dspmsg(btnObject){ status = btnObject.value; if(status=="有効"){ document.btnObject.value = "無効"; }else{ document.btnObject.value = "有効"; } } <html部分> <form> <input type="button" name="yuko_FLG1" value="有効" onclick="dspmsg(this)" /> <input type="button" name="yuko_FLG2" value="有効" onclick="dspmsg(this)" /> ・・・・・ </form> 当然のことながら動きませんでした。 自分でも間違っていることはわかるのですが、修正の仕方がわかりません。 よろしくお願いします。

  • トリガに排他制御をかけたいのですが

    トリガに排他制御をかけたいのですが Oracleのトリガで、 トリガ内の処理に対して排他制御をおこないたいのですが、 どのように設定すればよいのでしょうか? トリガの内容は以下となります。 CREATE OR REPLACE TRIGGER TRI_TEST after update of (トリガの実行条件その1) on ORG_TBL FOR EACH ROW begin if (トリガの実行条件その2) THEN begin insert(実行される処理その1) EXCEPTION update(実行される処理その2) end; end if; end; / 上記の条件において、 「実行される処理その1」 「実行される処理その2」 を行っている最中に他からのアクセスをブロックをさせたく思っております。 本件の理由は 他からのアクセスで行われる処理が 「select(トリガによってデータが投入されてるテーブル)」 「truncate(トリガによってデータが投入されてるテーブル)」 を連続して行う処理のため、 排他を実行しなかった場合、 他からのアクセスの「select」と「truncate」の処理間に トリガによってレコードがinsertされた際に、 そのレコードがselectされなくなることを危惧しているためです。

  • Access:トグルボタンのフォントカラー変更について

    Option Compare Database Private Sub トグル1_BeforeUpdate(Cancel As Integer) If トグル1 = -1 Then Me.トグル1.ForeColor = 10855845 Else     Me.トグル1.ForeColor = 0 End If End Sub Access2007を使用しています。 トグルボタンをクリックした場合、ボタンのフォントカラーを変えたく、上記のようにプログラムを組みました。 結果は動きました。 しかし、ボタンが一つだけなら良いのですが、複数ある場合、すべてのボタンに同じプログラムを設定しないと動きません。同じようなプログラムを複数組むのは無駄な気がしたので、以下のようなプログラムを作ってみました。 Option Compare Database Dim Text As String Private Sub トグル1_BeforeUpdate(Cancel As Integer) Text="トグル1" Call Test End Sub Sub Test() If Me.ActiveControl = -1 Then Me.Text.ForeColor = 10855845 Else Me.Text.ForeColor = 0 End If End sub 結果は動きませんでした。どうやら Me.Text.ForeColor = Me.トグル1.ForeColor と読んで欲しいところを Me.Text.ForeColor ="Me.Text.ForeColor" と読んでいるようです。 やはり、一つ一つに先頭のに記載したプログラムを入れていくしかないのでしょうか? ご教授の程、おねがいします。

  • Excel VBAで「こういう状態の時にトグルボタン押下」は?

    Excelで、シートの保護をするためのトグルボタンをつけています。 (押してある時は保護) よく考えたら、ツールバーから保護された時にも ボタンが押下状態にならないと使いづらいのではないかと思い、 If ActiveSheet.protect Then ボタン名 = True End If If ActiveSheet.Unprotect Then ボタン名 = False End If とやってみたんですが、うまく機能しません。 どうしたら良いのでしょうか?

  • 複数ボタンを制御出来る2度押し防止ボタン

    HTML5+CSS3でゲームを作っています。 フォームがあり、ボタンが複数並んでいます。 <SCRIPT TYPE="text/javascript"> <!-- function sendform(){ submitForm(); } function submitForm(){ document.form1.submit(); } // --> </SCRIPT> <FORM action="buy.cgi" method="post" name="form1" id="form1"> <button class="button8" type="submit" name="d4_buy" value="300 onclick="sendform()">300購入</button> <button class="button8" type="submit" name="d4_buy" value="400" onClick="sendform()">400購入</button> </FORM> 上記で正常に作動しますが、3G環境など通信状態の悪い時に、「300購入ボタンを押した直後に400購入ボタンを押す」と700購入が出来てしまいます。 【希望事項】 2つのボタンを連続して押しても2つ目が無効になるようにしたいというのが希望です。 ネットで調べたところ ****************************************** http://okwave.jp/qa/q627484.html ****************************************** <HTML><BODY> <FORM method="get" action="http://www.google.com/search"> <INPUT type="submit" value="submit1" onclick="this.form.q.value=this.value;this.disabled=true;this.form.submit()"> <INPUT type="submit" value="submit2" onclick="this.form.q.value=this.value;this.disabled=true;this.form.submit()"> <INPUT type="hidden" name="q" value="" > </FORM></BODY></HTML> ****************************************** という例があったため、この例に従って <SCRIPT TYPE="text/javascript"> <!-- function sendform(){ submitForm(); } function submitForm(){ document.form1.submit(); } // --> </SCRIPT> <FORM action="buy.cgi" method="post" name="form1" id="form1"> <button class="button8" type="submit" value="300 onclick="this.form.q.value=this.value;this.disabled=true;this.form.sendform()">300購入</button> <button class="button8" type="submit" value="400" onclick="this.form.q.value=this.value;this.disabled=true;this.form.sendform()">400購入</button> <INPUT type="hidden" name="d4_buy" value="" > </FORM> としてみたのですが、うまく数値の引き渡しが出来ません。(NULL となります) どのように改造すればいいか教えてください。 よろしくお願いいたします。

専門家に質問してみよう