[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定の操作のみ許可してシートを保護したい』(でる)
特定の操作のみ許可してシートを保護したいのですが、設定できません。
VBAで可能な場合は記載方法をご教示いただきたいです。
■シートの構成
・1〜5行目
6行目以下にある表の集計結果、マクロの実行ボタンがある
グループ化して普段は閉じている
・6行目
表のタイトル行
・7行目以下
表のデータ入力部分
ファイル>現在のシートの保護から下記の操作を許可してシートを保護。
(1〜6行目:セルロック、7行目以下:セルロック解除)
上記の方法でシートを保護すると、1〜5行目のグループ化の解除、
マクロボタンの実行ができなくなってしまいます。1〜5行目は集計
結果がありデータを上書きできないように保護をかけたいのですが、
保護をかけるとグループ解除とマクロが使えず困っています。
< 使用 Excel:Excel2016、使用 OS:unknown >
因みに以下のVBAをThisWorkbookに記載したところグループ化の解除とオートフィルタは使用できる
ようになったのですが、今度はセルロックしていない7行目以下も行挿入や書式設定などができなく
なってしまいました。シート保護の各オプションの設定を下記に追記してVBAで制御できるとよいの
ですが、記載方法がいまいち分からずうまくいきません。。
Sub 保護したまま実行()
With Worksheets("Sheet1") .EnableOutlining = True .EnableAutoFilter = True .Protect UserInterfaceOnly:=True End With End Sub
(でる) 2021/08/12(木) 16:55
5行目までをいじられたくないだけなら、画面をスクロールして6行目から見える状態で ウィンドウ枠を固定してはどうでしょう?
固定した状態を表示タブ→ユーザー設定のビューに登録しておけば、一旦解除して 5行目までのデータを確認したら、またすぐに元の状態に戻すことができますが。 (コナミ) 2021/08/12(木) 16:57
>シート保護の各オプションの設定を下記に追記してVBAで制御できるとよい シート保護をかける操作をマクロの記録すると、どう書けばいいかわかります 365で全部許可するようにするとこんな風になります。 バージョン依存だと思うので、2019でマクロの記録して確かめて下さい
ActiveSheet.Protect UserInterfaceOnly = True, _ DrawingObjects:=False, _ Contents:=True, _ Scenarios:=False, _ AllowFormattingCells:=True, _ AllowFormattingColumns:=True, _ AllowFormattingRows:=True, _ AllowInsertingColumns:=True, _ AllowInsertingRows:=True, _ AllowInsertingHyperlinks:=True, _ AllowDeletingColumns:=True, _ AllowDeletingRows:=True, _ AllowSorting:=True, _ AllowFiltering:=True, _ AllowUsingPivotTables:=True (とおりすがり) 2021/08/12(木) 17:10
>とおりすがりさん
返信ありがとうございます。下記のコードに追加して動作を確認したところ、
シートの保護をかけた状態でグループ化の解除とマクロボタンの実行ができ、
ロックしたセルは編集不可にすることができました。あとは不要なオプション
だけFalseに変更します。解決して大変助かりました。ありがとうございました。
Private Sub Workbook_Open()
Sheets("Sheet1").EnableOutlining = True Sheets("Sheet1").Protect DrawingObjects:=True, _ Contents:=True, UserInterfaceOnly:=True
ActiveSheet.Protect UserInterfaceOnly = True, _ DrawingObjects:=False, _ Contents:=True, _ Scenarios:=False, _ AllowFormattingCells:=True, _ AllowFormattingColumns:=True, _ AllowFormattingRows:=True, _ AllowInsertingColumns:=True, _ AllowInsertingRows:=True, _ AllowInsertingHyperlinks:=True, _ AllowDeletingColumns:=True, _ AllowDeletingRows:=True, _ AllowSorting:=True, _ AllowFiltering:=True, _ AllowUsingPivotTables:=True
End Sub
(でる) 2021/08/12(木) 21:07
■テストした内容
・Excelを開いてそのまま上書き保存し、ファイルを開きなおす
→VBAに記載された内容が有効
・Excelを開いてシート保護を手動で解除して上書き保存し、ファイルを開きなおす
→VBAに記載された内容が有効
・Excelを開いてシート保護を手動で解除して、手動で再度シート保護(オプション変更)
して上書き保存し、ファイルを開きなおす
→VBAに記載された内容が有効
上記テストだと、常にファイルを開いた時にVBAの処理が有効になっているように思えます。
具体的にどういった操作をすると無効化されてしまうのかご教授いただけると幸いです。
よろしくお願いいたします。
(でる) 2021/08/13(金) 14:45
↑から抜粋
なお注意しなければいけないのは、引数UserInterfaceOnlyにTrueを指定して保護したワークシート をそのまま保存して閉じた場合です。次にそのブックを開いたときには、ユーザーの手動操作だけで なくマクロによる操作も保護されています。マクロ操作だけを保護の対象からはずすには、再度引数 UserInterfaceOnlyにTrueを指定してProtectメソッドを実行しなければなりません。
要は、 UserInterfaceOnlyにTrueを設定すると、【マクロ】からのシート変更は有効になるのだが、ブックを開き直すと普通の保護(マクロからの変更も不可)になるということでしょう。
(もこな2 ) 2021/08/13(金) 15:11
Sheets("Sheet1").EnableOutlining = True Sheets("Sheet1").Protect DrawingObjects:=True, _ Contents:=True, UserInterfaceOnly:=True
ActiveSheet.Protect UserInterfaceOnly = True, _ DrawingObjects:=False, _ Contents:=True, _ Scenarios:=False, '以下略:各オプションを指定
上記で、ロックセルは編集不可になり、グループ化とマクロボタン実行は可。
アンロックセルはオプションで指定した内容が設定されています。保存して
ファイルを開きなおした場合も、都度VBAの内容が有効化されています。
試しに上段のUserInterfaceOnly:=Trueを消去したところ、グループ化と
マクロは実行できましたが、ロックセルが編集可能になってしまいました。
VBAの内容が部分的に有効化されているようです。
下段のUserInterfaceOnly:=Trueを消去したところ、グループ化とマクロは
実行できなくなりました。普通の保護(マクロからの変更も不可)の状態
だと思われます。
(でる) 2021/08/13(金) 16:05
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.