- ベストアンサー
フォルダ内の複数ブック・シートを一括保護/解除する
- 複数のExcelファイルが含まれるフォルダ内の全てのブック・シートの保護/解除を一括して行うマクロを作成したい
- 現在はマクロ用ブックと処理対象のブックを別フォルダに分けているが、同一フォルダで処理したい
- VBA初心者であり、ThisWorkbook.Pathを使用して同一フォルダ内のブック/シートに対して処理する方法がわからない
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでどうでしょうか? '------------------------------------------------- Sub 選択フォルダ内保護全て解除() Dim myFol As Object, myFile As Object, sh As Worksheet Dim openFilePath As String Const myPass As String = "1111" 'Set myFol = CreateObject("Shell.Application").BrowseForFolder(0, "フォルダを選択してください", 0) 'If myFol Is Nothing Then Exit Sub Application.ScreenUpdating = False openFilePath = ThisWorkbook.Path & "\" '←変更 With CreateObject("Scripting.FileSystemObject") For Each myFile In .GetFolder(openFilePath).Files If .GetExtensionName(myFile.Path) = "xls" And openFilePath & ThisWorkbook.Name <> myFile.Path Then '←変更 With Application.Workbooks.Open(myFile.Path) For Each sh In .Worksheets sh.Unprotect Password:=myPass Next sh .Unprotect Password:=myPass .Save .Close False End With End If Next myFile End With MsgBox "終了しました" End Sub '------------------------------------------------- Sub 選択フォルダ内全て保護() Dim myFol As Object, myFile As Object, sh As Worksheet Dim openFilePath As String Const myPass As String = "1111" 'Set myFol = CreateObject("Shell.Application").BrowseForFolder(0, "フォルダを選択してください", 0) 'If myFol Is Nothing Then Exit Sub Application.ScreenUpdating = False openFilePath = ThisWorkbook.Path & "\" '←変更 With CreateObject("Scripting.FileSystemObject") For Each myFile In .GetFolder(openFilePath).Files If .GetExtensionName(myFile.Path) = "xls" And openFilePath & ThisWorkbook.Name <> myFile.Path Then '←変更 With Application.Workbooks.Open(myFile.Path) For Each sh In .Worksheets sh.Protect Password:=myPass, DrawingObjects:=False, Contents:=True, Scenarios:=True, _ AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, _ AllowInsertingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True Next sh .Protect Password:=myPass, Structure:=True, Windows:=False .Save .Close False End With End If Next myFile End With MsgBox "終了しました" End Sub '-------------------------------------------------
お礼
試してみたところ、保護/解除共に希望通りに動きました! 勉強不足を痛感しています。 本当にありがとうございました。