チェックボックスのオンオフ

このQ&Aのポイント
  • チェックボックスを使って測定器と通信し、数値データを表示するプログラムを作成しています。
  • チェックボックスがオンの場合、ループで数値データを取得しますが、チェックボックスを再度クリックして終了する方法がわかりません。
  • チェックボックス以外のボタンを配置してループを抜けるようにすることはできるのでしょうか。
回答を見る
  • ベストアンサー

チェックボックスのオンオフ

チェックボックスを配置して、チェックボックスがオンになった時に 測定器と通信して数値データを表示するプログラムを作っています。 数値データは刻一刻と変化するので、チェックボックスがオンの時は Loopで数値データを取得するようにしています。 数値データの取得を止めたいときはチェックボックスを再度クリックして 終了したいのですが、Loopの中に入っているとチェックボックスを クリックしても反応しません。 何か方法はありませんか?チェックボックス以外のボタンを配置して Loopを抜けるようにしないと駄目ですか? Private Sub Checkbox1_Click() If Checkbox1= 1 Then Do 数値データを取得して、画面上に表示するプログラム(チェックボックスのクリックが効かない) Loop End If End Sub

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

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

DoEventsを呼んで、Windows側に一旦制御を返してあげる必要があります。 Private Sub Checkbox1_Click()  If Checkbox1= 1 Then   Do    数値データを取得して、画面上に表示するプログラム(チェックボックスのクリックが効かない)    DoEvents   Loop  End If End Sub ですが、可能ならTimerコントロールを使用して、  Private Sub Checkbox1_Click()   If Checkbox1= 1 Then    Timer1を有効にする   Else    Timer1を無効にする   End If  End Sub  Private Sub Timer1_Timer()   数値データを取得して画面に表示  End Sub とするほうがスマートかもしれません。

その他の回答 (1)

  • tsukkey
  • ベストアンサー率0% (0/1)
回答No.2

BackGroudWorkerを併用して、チェックが外れたらキャンセルイベントで中止にするのはどうですか?

関連するQ&A

  • エクセル2003VBA チェックボックスについて

    エクセル2003VBA チェックボックスについての質問です よろしくお願いします。    A         B 1 あああ       □ 2 いいい       □ 3 ううう        □ . . . . 35 かかか      □ 複数のチェックボックスをB列に配置し、 B1がオンになるとbook1を開く B2がオンになるとbook2を開く ・ ・ B35がオンになるとbook35を開く処理を行いたいのですが、 非常にコードが長くなってしまいます。 以下のコード以外で、 どのチェックボックスがオンになっているかを調べる方法が知りたいのですが、よろしくお願いします。 Private Sub CheckBox1_Click() book1を開く処理 End Sub Private Sub CheckBox2_Click() book2を開く処理 End Sub ・ ・ ・ Private Sub CheckBox35_Click() book35を開く処理 End Sub

  • フォームのCheck boxとOLEObjectのCheckboxのマクロの違い?

    エクセル2003です。 ワークシート上に複数個のチェックボックスを配置し、オンの場合、その左隣のセルの値を返すマクロを作成する場合についての質問です。 普段はフォームのCheck boxを使っています。 フォームのCheck boxなら Sub ChkBx() With ActiveSheet.CheckBoxes(Application.Caller) If .Value = xlOn Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub と、標準モジュールに一つだけプロシージャを書いて、複数個のCheck boxに同一のマクロを登録すれば簡単に出来ます。 ところがこれをOLEObjectのCheckboxでやってみようと思ったところ、フォームのように一つのプロシージャを使いまわすことができず、シートモジュールに以下のように各Checkboxごとのマクロを書かなくてはいけないようです。 Private Sub CheckBox1_Click() With OLEObjects("CheckBox1") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub Private Sub CheckBox2_Click() With OLEObjects("CheckBox2") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub Private Sub CheckBox3_Click() With OLEObjects("CheckBox3") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub 3つや4つくらいならどうってことはないのですが十数個もあるとかなり面倒です。 OLEObjectのCheckboxでももっと簡単にする方法はないのでしょうか? それともわたしが何かOLEObjectのCheckboxの使い方について思い違いをしているのでしょうか? ご教示をお願いいたします。

  • VB2008EEのチェックボックスにて、

    VB2008EEのチェックボックスにて、 9個のチェックボックスをオン/オフで9個のテキストボックスに文字を表示/非表示させる場合、 一旦チェックをオンにすると値が入ったままになって、オフにしても表示されてしまうため チェックがオフのものはボタン1クリックで空にしています。 1~9まであるのですが、1~4までは機能しているのですが、5~9が機能しません。 1~4にチェックが入っていると下記は実行されません。 5~9にチェックが入っていても下記が実行されてしまいます。      (実際は各番号)         ↓ If CheckBox5.CheckState = CheckState.Unchecked Then layp5 = "" End If なぜ4までと5からで動作が変わるのでしょうか? -------------------------------------------------------------- Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged layp1 = "1" End Sub '実際は2~8も記述あり Private Sub CheckBox9_CheckedChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged layp9 = "9" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal eAsSystem.EventArgs) Handles Button1.Click If CheckBox1.CheckState = CheckState.Unchecked Then layp1 = "" End If '実際は2~8も記述あり If CheckBox9.CheckState = CheckState.Unchecked Then layp9 = "" End If If (layp1 = "1") Then TextBox1.Text = "aaaaa" End If If (layp2 = "2") Then TextBox2.Text = "bbbbb" End If If (layp3 = "3") Then TextBox3.Text = "ccccc" End If If (layp4 = "4") Then TextBox4.Text = "ddddd" End If If (layp5 = "5") Then TextBox5.Text = "eeeee" End If If (layp6 = "6") Then TextBox6.Text = "fffff" End If If (layp7 = "7") Then TextBox7.Text = "ggggg" End If If (layp8 = "8") Then TextBox8.Text = "hhhhh" End If If (laypca = "9") Then TextBox9.Text = "iiiii" End If End Sub

  • エクセルのチェックボックスでの行の表示の切り替え

    エクセルでチェックボックスを使用して行の表示を切り替えています。 これに他のチェックボックスのON-OFFで表示する行を変えたいと思います。 例えばチェックボックスが3つあり チェックボックス3のON-OFFで行10-20を非表示と表示に切り替えている マクロがあります。 それをチェックボックス1がONの時は行11-20が非表示に チェックボックス2がONの時は10-19が非表示になるようにマクロに追加 するにはどうすればよいでしょうか? ちなみにチェックボックスはActiveXの方を使用しています。 今のコードは Private Sub CheckBox3_Click() If CheckBox3 = True Then Range("10:20").EntireRow.Hidden = False Else Range("10:20").EntireRow.Hidden = True End If End Sub です。 よろしくお願いします。

  • エクセル VBA チェックボックスについて

    よろしくお願い致します。 OS:XP エクセル2003 VBAのことは、まったくの初心者です。 質問なのですが、下記のようなチェックボックス7にチェックが入れば、チェックボックス8~11に自由にチェックが入れれるようになり、逆にチャックボックス7にチェックが入ってない場合は、チェックボックス8~11のチェックはクリアされ、チェックできないものを作りました。 ここから、チェックボックス7にチェック入れたあとは、必ずチェックボックス9~11のどれかにチェックが入っている状態(ラジオボタンのような)で、チェックボックス7にチェックが入ってなかったら、8~11のチェックがクリアで尚且つ、チェックができなくなるようにするにはどうすればよいでしょうか? よろしくお願い致します。 Private Sub CheckBox7_Click() If CheckBox7.Value = True Then CheckBox8.Enabled = True CheckBox9.Enabled = True CheckBox10.Enabled = True CheckBox11.Enabled = True Else CheckBox8.Value = False CheckBox9.Value = False CheckBox10.Value = False CheckBox11.Value = False CheckBox8.Enabled = False CheckBox9.Enabled = False CheckBox10.Enabled = False CheckBox11.Enabled = False End If End Sub

  • チェックボックスのチェックによるマクロ処理の変更

    ユーザーフォームにチェックボックスとコマンドボタンを設置して、チェックボックスのチェックに応じて、処理を変えるにはどうしたらいいでしょうか。 具体的には、ユーザーフォームに例えば、 (1)チェックボックス  -りんご (=checkbox1)  -かき  -みかん  -もも (2)コマンドボタン  -春  -夏  -秋  -冬 のボタンがあるとします。 仮に、春のボタンには、 「Call 春」とプロシージャを読むようにしています。 春のプロシージャには、 例えば、 Sub 春()  If checkbox1=true then   range("A1").value="肥料"  End if End sub のように書いています。 チェックボックスのチェックの有無・結果に応じて、処理を変えたいのですが、これでは、checkbox1box1のチェックの結果がsubプロシージャに渡せないので、どのようにしたらいいのでしょうか。 よろしくお願い致します。

  • エクセル チェックボックスの解除について(VBA)

    YES/NOを入力させる為の下記のVBAにおいて、チェックボックス1をチェックすると、アの部分でチェックボックス2の解除を行う関係で?、シート上でチェックボックス2を操作していないのにもかかわらず、勝手にCheckBox2_Click()に入り、命令文イを実行してしまいます。 ただ単にSub CheckBox1_Click()のルーチンの最後までの処理で終わりたいのですが、どうしたらよいのでしょうか。 Private Sub CheckBox1_Click() If CheckBox1 = True Then Sheets("sheet1").Range("A1") = 1 Sheets("sheet1").Range("A2") = 0 CheckBox2 = False・・・ア Else Sheets("sheet1").Range("A1") = "" End If End Sub Private Sub CheckBox2_Click() If CheckBox2 = True Then Sheets("sheet1").Range("A1") = 0 Sheets("sheet1").Range("A2") = 1 CheckBox1 = False Else Sheets("sheet1").Range("A2") = ""・・・イ End If End Sub

  • チェックボックスのvalue値の取得について

    過去の質問にいくつか似たようなものはあったのですが、解決出来ませんでしたので質問させて頂きます。cgiでページを作成しています。今回処理したい内容は、一覧表の複数のチェックボックスから、オンになっているvalue値を取得し、その値に一致するナンバーを使って別のファイルのデータを削除するといった処理です。 == html一部内容 == <form action='update.cgi' method='POST'> <input type='checkbox' name='del_0' value='0'> <input type='checkbox' name='del_1' value='1'> <input type='checkbox' name='del_2' value='2'> <input type='submit' name='submit' value='削除'> </form> == update.cgiの一部内容 == for($loop=2,$loop>=0,$loop--) { $del[$loop]=$in{'del_$loop'}; } データ数が多いのでループさせてすべてのチェックボックスのvalue値を取得したいと思っています。チェックボックスがオフの場合の扱いがいまいち分かっていません。一つずつ例えば $del_1=$in{'del_1'}; と代入していくとonのもののみ取得できます。しかしループにするとonの値も変数に入りません。 どんな方法でも良いので、すっきりとチェックボックスのvalue値を変数に取得する方法を教えてください。お願い致します。M(v_v)M

    • ベストアンサー
    • Perl
  • Accessのチェックボックス

    こんにちは。AccessのVBAについてお教えください。 下記URLに質問内容の画像を配置しました。 http://kie.nu/tli フォーム1にテキストボックス1というコントロールを配置しました。テキストボックス1に名簿IDの数値を入力して、ボタン1をクリックします。 もしチェックボックス1に既にチェックが入っていたらメッセージ「チェックが既に入っています。」といったメッセージを表示したいと思います。 そこで、ボタンを押した時に、 If フォーム1!サブフォーム1!チェックボックス1.Value = -1 Then msgbox "チェックが既に入っています。" end if とやりましたが、うまく動きません。どうやれば、うまく動くようになりますかご教授頂けませんでしょうか。よろしくお願いいたします。

  • GridViewからチェックボックスでデータを選択し、次のページへ送信する動作について

    現在VisualWebDeveloper2005にて、セミナーの申し込みページを作成しています。 動作は、コース一覧(GridView)からチェックボックスで受けたいコースを選択し、GridViewの下にある[申し込む]ボタンを押すとGridViewからチェックがついている行のデータ(コースID)を取得し、次ページに送信→次ページでそのIDをもとにGridViewで詳細情報を表示する確認ページを作成したいと思っています。 GridViewの中にチェックボックスを作成し、チェックボックスがオンになっているもののみ、という部分まではプログラムが完成しているのですが、取得したデータを送信→次ページで受け取り表示の部分がわからずに困っています。 チェックした行のデータをSessionに入れようと考えたのですが 'チェックボックスがオンになっている時、その行のIDを取得してテキストボックスに表示 Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) For Each row As GridViewRow In GridView1.Rows Dim cb As CheckBox = CType(row.FindControl("cbSelect"), CheckBox) If cb.Checked Then Session("test") = row.Cells(1).Text Response.Redirect("kakunin.aspx") End If Next End Sub このプログラムだと複数の項目をチェックしても1つしかデータが送信されないのでどうすればいいかわからない状態です。 3日ほどどうすればいいかを検索してみたのですが、良い答えが見つからなかったので質問させていただきます。よろしくお願いします。

専門家に質問してみよう