エクセルのVBAで同じフォルダーにある全てのエクセルファイルに開封パスワード、全てのシートの関数入力セルに保護パスワードを設定したいのですが、対象をエクセルファイルに限定することが出来ずに悩んでおります。現状ではパワーポイントのファイルなどがあるとVBAの実行中にエラーとなってしまいます。
対象をエクセルに限定する方法をご教授くださいますようお願いいたします。
環境:windows10、Excel2016
対象とするエクセルファイルの形式はxls と xlsx が混在
現状のVBA(ネットで見つけたコードを切り貼りして作成しました。)
Sub Excel_Protect()
Dim MyPath As String
Dim MyWb As Workbook
Dim MyWbName As String
Dim acFileObj As Object
Dim acFileObjName As String
Set MyWb = ThisWorkbook
MyPath = MyWb.Path
MyWbName = MyWb.Name
Dim sh As Worksheet
Dim openPass As String
openPass = Range("B1").Value ・・・既存ファイルのパスワード
Dim myPass As String
myPass = Range("B2").Value …新たに設定するパスワード
Dim FileSysObj As Object
Dim FileObj As Object
Set FileSysObj = CreateObject("Scripting.FileSystemObject")
Set FileObj = FileSysObj.GetFolder(MyPath).Files
Application.ScreenUpdating = False
For Each acFileObj In FileObj
acFileObjName = acFileObj.Name
If InStr(acFileObjName, MyWbName) Then
Else
Workbooks.Open MyPath & "\" & acFileObjName, Password:=openPass
For Each sh In Worksheets
sh.Unprotect Password:=openPass
sh.Cells.Locked = False
On Error GoTo ErrLabel
sh.Cells.SpecialCells(xlCellTypeFormulas).Locked = True
sh.Protect Password:=myPass
ErrLabel:
Resume Next
Next sh
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs MyPath & "\" & acFileObjName, Password:=myPass
ActiveWorkbook.Close False
End If
Next acFileObj
Application.DisplayAlerts = True
MsgBox "終了しました"
End Sub
No.1ベストアンサー
- 回答日時:
ではこんなのは如何でしょう?
--------------------------------------------------------------------------------
Sub Sample()
Dim strRes As Variant
Dim strPath As String
Dim intO As Integer
Dim objBok As Workbook
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
strPath = .SelectedItems(1)
End If
End With
strRes = Dir(strPath & "\*.xlsx")
Do While strRes <> ""
gintO = gintO + 1
Set objBok = Workbooks.Open(strPath & "\" & strRes)
For intl = 1 To objBok.Sheets.Count
Debug.Print objBok.Sheets(intl).Name
Next intl
objBok.Close SaveChanges:=True
strRes = Dir()
Loop
End Sub
--------------------------------------------------------------------------------
簡素化していますが、パスが固定でしたら最初のWithブロックは不要ですので直接strPathに設定してください
Do内がブック数、For内がシート数でループしていますのでDebug.Printの部分で保護操作してもらえれば良いと思います
如何でしょうか?
rukaandkaito 様
ご教授いただきありがとうございます。
しかしながら、私の力量ではご提示いただいた内容を即活用することが出来ませんでした。少し時間をかけて試行してみます。
ご親切にしていただき感謝申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでファイルを閉じても...
-
共有しているEXCELシートのアク...
-
エクセルで複数のブックで「元...
-
エクセルの添付ファイルに記入...
-
エクセルの塗りつぶしの色が勝...
-
エクセルを開いたときのシート
-
CSVファイルでVBAを動かす方法
-
エクセルVBAでアクセスファイル...
-
Lotus 1-2-3のファイルをExcel...
-
メールのエクセル添付ファイル...
-
エクセルのハイパーリンクがう...
-
エクセルの中にエクセルを添付...
-
エクセルのロック解除の方法
-
ExcelファイルがDoxillionに突...
-
エクセルにクリックすると指定...
-
Windows11で画面下の帯の部分で...
-
2つのエクセルファイルをデュ...
-
~$ファイル名のファイルが出現...
-
変更されたリンク先を正しいも...
-
メモ帳(拡張子log)の数字デー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでファイルを閉じても...
-
共有しているEXCELシートのアク...
-
エクセルで複数のブックで「元...
-
エクセルVBAでアクセスファイル...
-
エクセルの塗りつぶしの色が勝...
-
エクセルの添付ファイルに記入...
-
Google Todoリスト
-
エクセルにクリックすると指定...
-
エクセルの中にエクセルを添付...
-
400KBのエクセルは重いの?
-
エクセルで1.5GBのファイルを開...
-
Lotus 1-2-3のファイルをExcel...
-
エクセルを開いたときのシート
-
メモ帳(拡張子log)の数字デー...
-
ExcelファイルがDoxillionに突...
-
CSVファイルをカンマ区切りのテ...
-
エクセルのシートが常に小さく...
-
2つのエクセルファイルをデュ...
-
Windows11で画面下の帯の部分で...
-
開くと警告の出るExcelファイル...
おすすめ情報