[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『(フォーム)チェックボックスのコードを無効にしたい』(ひろ)
いつもいろいろな事を勉強せて頂いてます。
[使用バージョン] 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.