[[20100308110508]] 『マクロでチェックボックスを・・・』(お願いします) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロでチェックボックスを・・・』(お願いします)

 いつもお世話になっております。
 本日もよろしくお願いします。
 マクロでチェックボックスについたチェックをすべてクリアすることなどは、できるのでしょうか?
 チェックボックスがたくさんあり、シートは流用して使用するため初めにチェックをすべて外していく作業が面倒で仕方がありません。
 もしできるようでありましたら、ご教授下さい。よろしくお願いします。

 フォームのチェックボックスかコントロールツールボックスのチェックボックスかわかりませんが
 とりあえず、両方対応のサンプルコードです。

  Sub test()
  Dim obj As Object
  For Each obj In ActiveSheet.DrawingObjects
    If Replace(obj.Name, " ", "") Like "CheckBox*" Then
      Select Case obj.ShapeRange.Type
        Case msoFormControl:      obj.Value = False         'フォームの場合
        Case msoOLEControlObject: obj.Object.Value = False 'OLEオブジェクトの場合
      End Select
    End If
  Next
  End Sub

 (momo)

 '==========================================================================
 Sub test1() 'コマンドバー フォームの チェックボックスの場合
    Dim chkbox As Object
    For Each chkbox In ActiveSheet.CheckBoxes
       chkbox.Value = 0
    Next
 End Sub
 '===========================================================================
 Sub test2() 'コマンドバー コントロールツールボックスのチェックボックス
    Dim ole As OLEObject
    For Each ole In ActiveSheet.OLEObjects
       If TypeName(ole.Object) = "CheckBox" Then
          ole.Object.Value = False
       End If
    Next
 End Sub

 こんな方法も参考程度に

 ichinose@仕事中


返信遅くなりまして、申し訳ありません。
 フォームの チェックボックスなのですが、教えていただいた方法で無事たのですが、1点伺いたいことがございます。

 マクロを実行すると、砂時計マークが出てかなり長い間処理をしているようなのですが、
 チェックボックスのある範囲を指定して実行することで、処理は早くなったりするでしょうか?

 マクロが初心者なもので、1シートをすべて見ているから遅いのかな?なんて思い、質問させていただいております。

 もし、おわかりになりましたらぜひ、よろしくお願いします(お願いします) 

 >シートは流用して使用するため
使い方の問題のような。
チェックボックスがすべてオフになっているシートを流用する。
あるいは、そのようなシートテンプレートを用意する。
もしくは,時間はかかるけれども,あらかじめ、チェックボックスと
リンクするセルを設定しておいて、セルの方をクリアする。
みやほりん

みやほりん様

 リンクするセルを設定していたのですが、リンクしているセルの表示をクリアしたら消えるのは知りませんでした。ありがとうございます。(お願いします)


 これは、セルにリンクすることで処理速度が速くなったということで解決したということですか?
 確かにリンクセルの値を変えることで速度は、速くなりましたが・・・。

 >マクロを実行すると、砂時計マークが出てかなり長い間処理をしているようなのですが、
 >チェックボックスのある範囲を指定して実行することで、処理は早くなったりするでしょうか?

 これ、どのくらいのチェックボックスが配置されていて、かなり長い時間とは、具体的にどのくらいですか?
 '========================================================================
 Sub test()
    Dim g0 As Long
    For g0 = 1 To 1000
       With ActiveSheet.CheckBoxes.Add(100, g0 * 20, 80, 20)
          .Value = xlOn
       End With
    Next
 End Sub
 '=======================================================================
 Sub test1() 'コマンドバー フォームの チェックボックスの場合
    Dim chkbox As Object
    For Each chkbox In ActiveSheet.CheckBoxes
       chkbox.Value = 0
    Next
 End Sub

 上記 testで 1000個のチェックボックスを配置して、test1でチェックをはずした場合、
 3秒程度でした。これが長いということですか?

 参考に教えてください。

 ichinose


ichinose様

 ありがとうございます。当方vistaを使用しており、下記のマクロを実行したところ毎回30秒程度「応答なし」になり、砂時計マークが続きます。

____________

 Sub test1() 'コマンドバー フォームの チェックボックスの場合
    Dim chkbox As Object
    For Each chkbox In ActiveSheet.CheckBoxes
       chkbox.Value = 0
    Next
 End Sub
_____________

 ちなみにチェックボックスは200個程度でエクセルは1つしか立ち上げておらず、もっと複雑なマクロを実行しても、
 こんなに時間がかかったことはなかったものですから質問させていただきました。

 今回は、みやほりん様のリンクするセルの値を消してチェックボックスをクリアする方法でマクロを作って、運用することと致しました。

 ありがとうございました。(お願いします)


 解決済みですけど。
 リンク設定されていると言うことですが、数式がいっぱいあったりしませんか?
 リンクしていると、リンク先のセルの内容が変わるから、都度再計算が行われているんじゃぁ
 ないのかなぁー、と思います。
 再計算と手動に変えてみたらどうでしょう。

 vistaとかは、あまり関係なさそうな。(触ったことないから良く知らんけど。)
 「リンクするセルの値を消して」が1番簡単ですけどね。
 (Jaka)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.