[[20170207191551]] 『(フォーム)チェックボックスのコードを無効にし』(ひろ) ページの最後に飛ぶ

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

 

『(フォーム)チェックボックスのコードを無効にしたい』(ひろ)

 いつもいろいろな事を勉強せて頂いてます。

 [使用バージョン]
 Windows= Windows 7 enterprise
   Excel= 2013
 [内容]

 エクセルシートに (フォームコントロールの)ラジオボタンやチェックボックスがあります。
 それぞれ、そのボタンをクリックした際に
 VBAが動くようになっています。

 これは、ラジオボタンを選択して、
 「開発」タブの「コード表示」にて作成しました。(標準モジュールに作成)

  提出用にマクロを外した通常のエクセルにして保存する必要があり
 値のみで貼り付けし、VBAのモジュールを全て解放し xlsx形式にして保存しました。

 そしてxlsx形式にしたエクセルのラジオボタンを押すと
 「マクロ ”ラジオボタン CLick”を実行できません。このブックでマクロが使用できないか
  またはすべてのマクロが無効になっている可能性があります。」

 と表示されます。

 まだ ラジオボタンとマクロが紐づいていると思われるのですが
 どうしたら、紐付を解除できるのかわかりません。

ちなみに一度 Xlsm形式でフォームのチェックボックスやラジオボックスにコードを
記載し、その後Xlsx形式で保存し、一度閉じて開き直しても同じ現象が起きます。

 やりたいことは、xlsx形式のラジオボックスは
 押したら、黒くなるだけで、VBAなどの機能は無くしたいです。

 教えて頂けますか?

 よろしくお願いいたします。
 Best regards.

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 これで、どうですか?
 ********************
 チェックボックス上で、右クリック
 →メニューの中の「マクロの登録」を選択
 →マクロ名の下の文字を削除して、OKボタン
(マリオ) 2017/02/07(火) 20:07

 手作業で解除するのが、面倒なら下記のコードを利用してみてください。

 下記コードでは、マクロが記述されているブック以外に開いている
 エクセルのファイルすべてにおいて、
 すべてのシートを探索して、
 チェックボックスとオプションボタン(ラジオボタン)の
 マクロの登録(OnAction)を解除します。

 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
 Sub 他のブックのOnActionを解除()
    Dim myBook As Workbook
    Dim mySheet As Worksheet
    Dim obj As Object, cb As Integer, op As Integer

    cb = 0
    op = 0
   '-------------------------------------------------------
    For Each myBook In Workbooks
        If myBook.Name <> ThisWorkbook.Name Then 'マクロを記述しているブック以外を対象として
           Workbooks(myBook.Name).Activate
           For Each mySheet In ActiveWorkbook.Worksheets 'すべてのシートで
               For Each obj In mySheet.CheckBoxes 'チェックボックスがあれば
                   obj.OnAction = "" 'マクロの登録を解除
                   cb = cb + 1
               Next
               For Each obj In mySheet.OptionButtons 'オプションボタンがあれば
                   obj.OnAction = "" 'マクロの登録を解除
                   op = op + 1
               Next
           Next mySheet
        End If
    Next myBook
   '-------------------------------------------------------
    MsgBox "OnActionの解除" & vbCr & "チェックボックス: " & cb & "件" & _
                              vbCr & "オプションボタン: " & op & "件"

 End Sub
(マリオ) 2017/02/07(火) 21:37


マリオ様
ありがとうございます。
インフルエンザで倒れていた為、返信が遅くなり申し訳ありません。
マリオ様のコードのおかげで解決することができました。

最初、チェックボックスやラジオボタンが解除できるのとできないのがありましたが、グループ化されているとできないというのに気づき
今ではすっかり 解決しました。
本当にありがとうございました。 <(_ _)> <(_ _)>


 >ひろ さん

 >チェックボックスやラジオボタンが解除できるのとできないのがありましたが、
 >グループ化されているとできないというのに気づき 

 そこまで、気が回らなかったです。下記のプロシージャ
 「他のブックのOnActionを解除2」では、
 先にグループ化されているものがあれば、グループを解除します。
 追加箇所は、■箇所の間

 Sub 他のブックのOnActionを解除2()
    Dim myBook As Workbook
    Dim mySheet As Worksheet
    Dim obj As Object, cb As Integer, op As Integer
   '■■■■■
    Dim grp_flg As Boolean
    Dim shp As Shape
   '■■■■■

    cb = 0
    op = 0
   '-------------------------------------------------------
    For Each myBook In Workbooks
        If myBook.Name <> ThisWorkbook.Name Then 'マクロを記述しているブック以外を対象として
           Workbooks(myBook.Name).Activate
           For Each mySheet In ActiveWorkbook.Worksheets 'すべてのシートで
              '■■■■■■■■■■■■■■■■■■■■■■■
               grp_flg = True
               Do While grp_flg = True
                  grp_flg = False
                  For Each shp In mySheet.Shapes
                      If shp.Type = msoGroup Then
                         shp.Ungroup: grp_flg = True
                      End If
                  Next shp
               Loop
              '■■■■■■■■■■■■■■■■■■■■■■■
               For Each obj In mySheet.CheckBoxes 'チェックボックスがあれば
                   obj.OnAction = "" 'マクロの登録を解除
                   cb = cb + 1
               Next
               For Each obj In mySheet.OptionButtons 'オプションボタンがあれば
                   obj.OnAction = "" 'マクロの登録を解除
                   op = op + 1
               Next
           Next mySheet
        End If
    Next myBook
   '-------------------------------------------------------
    MsgBox "OnActionの解除" & vbCr & "チェックボックス: " & cb & "件" & _
                              vbCr & "オプションボタン: " & op & "件"
 End Sub 

 >インフルエンザで倒れていた為
 空気が乾燥しているので、今後も気を付けないといけませんね。
 お大事に!
(マリオ) 2017/02/13(月) 18:07

 横から失礼。
 もう、ひろさん、ご覧にならないかもしれませんが、質問のテーマに限定すれば、すでにマリオさんから
 充分なコードが提示されていますが、『広義』に解釈すれば、フォームツール含め、シート上にマクロ登録された
 図形がちりばめられている。これを配布用にマクロ登録をなくした形のものにしたいということだろうと思います。

 オプションボタンとチェックボックス以外は、マクロ登録が残っていてもいいというわけではないですね。
 今後、別のコントロール(ボタン 等)を追加したとしたら、それらのマクロ登録も削除しておく必要がありますね。

 ついでに、配布用のブックを、マクロブックそのものをメンテするのではなく、これは、βの個人的な好みですけど
 新規ブックとして、マクロブックとは別に生成します。
 (どういった範囲を配布したいのか、不明でしたので、とりあえずは、マクロブックの"Sheet1"シートのみを対象にしています)

 Sub Sample()
    Dim sp As Object
    Dim spx As Object

    Sheets("Sheet1").Copy
    With ActiveSheet
        .UsedRange.Value = .UsedRange.Value
        For Each sp In ActiveSheet.Shapes
            If sp.Type = msoGroup Then
                For Each spx In sp.GroupItems
                    spx.OnAction = ""
                Next
            Else
                sp.OnAction = ""
            End If
        Next
    End With

 End Sub

(β) 2017/02/13(月) 19:35


 >βさん
 私のコード(他のブックのOnActionを解除2)
 だと、グループ化を解除してしまってます。
 βさんの方がいいですね。
 βさんのコードを組み込んでみました。
 ★新規ブックを作ってませんが…。

 βさん、For Each spx In sp.GroupItems〜Nextのところは、
 グループ化が2段階以上でも、有効ですよね?

 Sub 他のブックのOnActionを解除3()
    Dim myBook As Workbook
    Dim mySheet As Worksheet
    Dim sp As Object
    Dim spx As Object

    For Each myBook In Workbooks
        If myBook.Name <> ThisWorkbook.Name Then 'マクロを記述しているブック以外を対象として
           Workbooks(myBook.Name).Activate
           For Each mySheet In ActiveWorkbook.Worksheets 'すべてのシートで
              '-------------------------------------
               For Each sp In mySheet.Shapes 'すべてのオブジェクトで
                   If sp.Type = msoGroup Then 'オブジェクトが、グループ化されていたら、
                      For Each spx In sp.GroupItems
                          spx.OnAction = ""
                      Next
                   Else 'オブジェクトが、グループ化されていなければ、
                      sp.OnAction = ""
                   End If
              Next
             '-------------------------------------
           Next mySheet
        End If
    Next myBook
    MsgBox "処理終わりました"
 End Sub
(マリオ) 2017/02/13(月) 21:09

 >>グループ化が2段階以上でも、有効ですよね?

 はい。

 研究熱心なマリオさんですから、3段階、4段階のグループ化を行ったものを対象にしてみれば
 すぐにわかると思いますけど。

( β) 2017/02/13(月) 21:22


コメント返信:

[ 一覧(最新更新順) ]


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