
No.1ベストアンサー
- 回答日時:
こんにちは、
https://oshiete.goo.ne.jp/qa/12261551.html で回答したものです。
ユーザーフォームの使い方が分からなかったようですね。
ご質問が閉じられており、追記出来ませんでした。
標準モージュールにコピペとの事で色々なケースを想定してInputBox で
実行するようにしました。
対象のExcelブックは、すべてのシートの状態が同じである事。
(全てに保護がかかっている。または、かかっていない。)
保護パスワードがばらばらの場合の途中で処理を中止して保存してしまうので注意してください。
処理の流れ
対象ブックをUIで選択し開く
ブックのシート全ての保護の状態を調べる。
パスワードをInputBox で設定 (空白でOKならパスなし)
シート全てに処理
対象ブックを保存して閉じる
不明なところがあれば、締め切らずに補足してくださいね。
Sub Sample1()
Dim Target As String
Dim CHECK_Protect As Integer
Dim ws As Worksheet
Dim msg As String, Pas As String
Dim flag As Boolean
Target = Application.GetOpenFilename(Title:="シート保護設定ファイルの選択", FileFilter:="Excel ブック,*.xls?")
If Target = "False" Then Exit Sub
Application.ScreenUpdating = False
Workbooks.Open Target
With ActiveWorkbook
For Each ws In .Worksheets
If ws.ProtectContents = True Then
CHECK_Protect = CHECK_Protect + 1
flag = True
Else
flag = False
End If
Next
If CHECK_Protect > 0 And CHECK_Protect < .Worksheets.Count Then
MsgBox ("一部のシートが保護されています?")
Exit Sub
Else
If flag = False Then
msg = "全シートの保護を設定します"
Else
msg = "全シートの保護を解除します"
End If
Pas = InputBox _
(msg & vbCrLf & "パスワードを入力してください" _
& vbCrLf & "パスワードを使用しない場合はそのままOKを押して下さい", _
"全シートの保護")
If StrPtr(Pas) = 0 Then
MsgBox ("処理を中止します")
.Close SaveChanges:=True
Application.ScreenUpdating = True
Exit Sub
End If
If flag = False Then
msg = "シート保護を設定しました"
Else
msg = "シート保護を解除しました"
End If
For Each ws In .Worksheets
On Error GoTo myErr
If flag = True Then
ws.Unprotect Password:=Pas
Else
ws.Protect Password:=Pas
End If
Next
.Close SaveChanges:=True
MsgBox msg
End If
Application.ScreenUpdating = True
Exit Sub
myErr:
MsgBox ("パスワードが違うため解除できません!")
.Close SaveChanges:=True
Application.ScreenUpdating = True
End With
End Sub
この回答へのお礼
お礼日時:2021/03/20 19:48
再度の丁寧な返信ありがとうございます。
無事、行うことが出来ました。
初心者ながらマクロの習得をしていますが、ここまで長くなると理解がなかなか難しいですね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAを一度起動するとずっと出て...
-
エクセルファイルを自身のファ...
-
VBA マクロ実行時エラー’1004Ra...
-
昨日まで動いていたエクセルの...
-
【マクロ】excelファイルを開く...
-
Excelマクロ ファイル名が変わ...
-
excelが別プロセスで起動してし...
-
excelファイルに使われているVB...
-
ご存知の方教えてください!!
-
別のパソコンでエクセルのマク...
-
EXCELで日付を自動でファイル名...
-
エクセルVBAを使ってサーバ...
-
エクセル終了時の保存確認メッ...
-
別のdocmファイルのマクロを使...
-
Excel2010 PERSONAL.xlsbの挙動...
-
Officeマクロが使えなくなった
-
個人用マクロブックについて
-
Excel>マクロを使っていないは...
-
マクロを設定したのに、拡張子...
-
Wordファイルから別Wordファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで印刷する方法 エクセ...
-
VBAを一度起動するとずっと出て...
-
昨日まで動いていたエクセルの...
-
エクセル終了時の保存確認メッ...
-
excelファイルに使われているVB...
-
コピーしたファイルのマクロを...
-
別のパソコンでエクセルのマク...
-
Excelが勝手にシート移動してし...
-
【マクロ】宣言は、何のために...
-
Excelマクロ ファイル名が変わ...
-
【マクロ】エラーが発生⇒実行時...
-
VBA マクロ実行時エラー’1004Ra...
-
excelのマクロ実行でブロックさ...
-
エクセル2013vbaで、見えない名...
-
マクロを消すマクロは不可能?
-
エクセルマクロ実行中に別ファ...
-
EXCEL マクロ クリップボードク...
-
マクロを設定したのに、拡張子...
-
excelが別プロセスで起動してし...
-
アクセスでファイルを開いたと...
おすすめ情報