[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロの内容を追加したい』(たそち)
マクロの内容を追加したいです。
今あるマクロは「Excelを閉じる時に指定のパスワードをかける」もので、
コードは以下です。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Update by Extendoffice 2018/1/24
Dim xSheet As Worksheet
Dim xPsw As String
xPsw = "指定のパスワード"
For Each xSheet In Worksheets
xSheet.Protect xPsw
Next
End Sub
追加したい内容は「保護をかけた状態でもオートフィルターのみ使えるようにする」です。
やり方がわからず、すみませんがよろしくお願いいたします。
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
https://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_020_020.html
ここを参考にしてはいかがでしょうか?
(まっつわん) 2024/11/21(木) 12:45:11
まっつわん様が教えてくださったところも質問前に確認しており、試してみたのですが
こちらのマクロと、すでに設定しているマクロを繋げることができず、すでにあるマクロがエラーになってしまいます。
どうすればよいでしょうか。。。
(たそち) 2024/11/21(木) 13:04:13
(????) 2024/11/21(木) 13:16:40
あとはさっきのサイトと見比べたら、やりたいことは、こんな感じじゃないですか?
Sub test()
Dim ws As Worksheet Const xPsw As String = "****" 'シートの保護のパスワード
For Each ws In Worksheets With ws If .ProtectContents = False Then '保護がかかっているかチェック .EnableAutoFilter = True .Protect Password:=xPsw, _ UserInterfaceOnly:=True End If End With Next End Sub
必ずシートの保護が解除されているわけでもないでしょうから、
シートの保護の状態で条件分岐も入れてみました。参考になれば。
(まっつわん) 2024/11/21(木) 13:50:25
まっつわん様にいただいた内容で試してみたところ、Excelを閉じたときに自動でパスワードをかけて保護、ができないようになりました。
マクロに明るくなく、調べたコードをそのまま入れているようなレベルの理解度ですので、もしお時間あれば以下条件でコードご教示いただけませんでしょうか。。。
・Excelを閉じるタイミングで必ずパスワード付きの保護をしたい
・保護はシート全体
・保護している状態でもフィルターは使える状態としたい
・フィルター以外は保護を解除しない限り一切編集不可としたい
・保護を解除した際にもフィルターは使用する
なにか不足ありましたらご教示ください。
(たそち) 2024/11/21(木) 18:04:28
>Sub test()
Private Sub Workbook_BeforeClose(Cancel As Boolean)
あれー?ここ直しました?
こちらでテストしたコードをそのまま上げちゃいました。
混乱させたならすみません。
(まっつわん) 2024/11/21(木) 18:30:08
EnableAutoFilter
の部分は記録されなかったので、そこは別で探るしかなさそうです。
うまくいかなかったのはしょうがないので安心してください。
(まっつわん) 2024/11/21(木) 18:35:06
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Update by Extendoffice 2018/1/24
Dim ws As Worksheet
Const xPsw As String = "指定のパスワード"
For Each ws In Worksheets
With ws
If .ProtectContents = False Then
.EnableAutoFilter = True
.Protect Password:=xPsw, _
UserInterfaceOnly:=True
End If
End With
Next
End Sub
(たそち) 2024/11/21(木) 19:03:25
閉じるときにやるのではなく、開いたときにマクロを実行した方が
良いかも知れません。
使う人にとっては同じことかと。
(まっつわん) 2024/11/21(木) 19:23:25
こちらでは、Openの時に設定されていましたよ?
(まっつわん) 2024/11/22(金) 10:17:28
マクロ2つを同時に実行すればいいのかと思い、このようにしてみましたが、パスワードはかけられませんでした。
Private Sub Workbook_Open()
Dim objSh As Worksheet For Each objSh In ThisWorkbook.Worksheets If objSh.AutoFilterMode = Then objSh.Protect AllowFiltering:=True End If Next objSh End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Update by Extendoffice 2018/1/24
Dim xSheet As Worksheet Dim xPsw As String xPsw = "指定のパスワード" For Each xSheet In Worksheets xSheet.Protect xPsw Next End Sub (たそち) 2024/11/22(金) 10:56:23
.EnableAutoFilter = True ’←オートフィルターにチェック .Protect Password:=xPsw, _ '←パスワード UserInterfaceOnly:=True '←必要かどうかわからないけど、サンプル見ると書いてある
合わせ技で出来ませんか?
(まっつわん) 2024/11/22(金) 11:04:53
Option Explicit
Private Sub Workbook_Open()
Dim objSh As Worksheet For Each objSh In ThisWorkbook.Worksheets With objSh .EnableOutlining = True .EnableAutoFilter = True .Protect Password:=xPsw xPsw="指定のパスワード " .Protect UserInterfaceOnly:=True End With Next objSh ThisWorkbook.Saved = True End Sub (たそち) 2024/11/22(金) 11:39:13
'ファイルを開いたときに実行
Private Sub Workbook_Open()
Dim ws As Worksheet Const xPsw As String = "****" 'シートの保護のパスワード
For Each ws In Worksheets ws.EnableAutoFilter = True 'オートフィルター操作可 ws.Protect Password:=xPsw, _ UserInterfaceOnly:=True 'パスワードとマクロの操作可を設定して保護 Next End Sub
これだけでいいと思います。
一応大丈夫そうでしたが、ほんとにいいのかは不明。
エラーにはならないけど、すでに保護してあったら、
どうなるんだろう。。。。
オートフィルターが解除されていたら、エラーになるし。。。
Private Sub Workbook_BeforeClose(Cancel As Boolean) ← ファイルを閉じる前に実行
こっち以下は削除してください。
(まっつわん) 2024/11/22(金) 11:47:44
こうなのでは? Worksheet.Protect の AllowFiltering引数にTrue を指定
Private Sub Workbook_BeforeClose(Cancel As Boolean) Const passwd As String = "12345" Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets ws.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:=passwd Next '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ End Sub (´・ω・`) 2024/11/22(金) 11:52:09
不勉強で申し訳ありませんでした。お手数おかけいたしました。
記載いただいたもので試してみます。
(たそち) 2024/11/22(金) 11:58:15
シートの保護の設定のなかに、ユーザーに許容する動作の選択肢があり、 そのなかに「オートフィルターの使用」というのがあります。 これを選択して保護する動作をマクロ記録すれば、「オートフィルターの使用」設定に対応する マクロコードが判明します。 (なお、注意点は、これは「オートフィルタの設定が許可されるわけではない」ことです。 保護される前に設定されたオートフィルタの選択肢の変更ができる、と言う意味です。 オートフィルタの設定は保護されていたらできません。)
既に指摘がありますように、AllowFiltering:=Trueと言う指定をして保護すればよいだけです。
ちなみに、以下、閲覧者へのご参考です。 ActiveSheet.EnableAutoFilter = True ActiveSheet.Protect contents:=True, userInterfaceOnly:=True をBeforeCloseイベントプロシージャで実行し、保存を促すダイアログが出て保存したとしても 次回に開いたときにオートフィルタは使えません。つまり、それは永続的な設定にはならないのです。
これは userInterfaceOnly:=Trueを使った保護は、ブックに永続的に残るわけではないことに由来します。 つまり、userInterfaceOnly:=Trueを使った操作は、ブックを閉じたら無効になる仕様なので、 userInterfaceOnly:=Trueはブックを開いたときに、その都度実行する必要があり、それが推奨されるわけです。 このあたりは Protectメソッドのヘルプにも書かれています。
一方で userInterfaceOnly:=Trueを使わずに普通に AllowFiltering:=True をセットして保護した場合は、 保存後再度開いても設定は有効に残っています。
(xyz) 2024/11/22(金) 14:31:33
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.