• ベストアンサー

エクセルの保護設定【急いでいます!!】

1つのエクセルで複数の人が入力するのですが、 同じシートでその入力したものの承認(名前を入力)も行うことになり、 普段は承認欄を保護しておいて承認する際に承認者がパスワードを入力して保護を解除してから承認する形をとりたいと思っています。 シートの保護まではできるのですが、複数承認者がいることもあって、シートの保護をするのを忘れる人が出そうなのです。 そこでシートの保護が解除されたまま終了された場合、保護を要求する、又は自動で保護されるようにするにはどうしたらいいか知りたいんです。 分かりにくい説明で申し訳ないのですが、時間もなくかなり困っています。回答お願いします!!

質問者が選んだベストアンサー

  • ベストアンサー
  • takibo
  • ベストアンサー率57% (116/200)
回答No.3

No.2 です。For~Next を使います。(A)の例で揚げてみます。 '■全てのシートに保護をかける Private Sub Workbook_Open()   For i = 1 To Worksheets.Count     Sheets(i).Protect "****"   Next   ThisWorkBook.Save End Sub これは「1枚目から最後のシートまで」となっていますので、例えば3枚目以降などの場合は   For i = 3 To Worksheets.Count としてください。 '■任意のシートだけに保護をかける(例:「○月」というシートのみ) Private Sub Workbook_Open()   For i = 1 To Worksheets.Count     If Sheets(i).Name Like "*月" Then      Sheets(i).Protect "****"     End If   Next   ThisWorkBook.Save End Sub ほかに「セルA1 に 1 と入力してあるシートのみ」のような条件付けもできます。   If Sheets(i).Range("A1").Value = 1 Then ~

sacchinn55
質問者

お礼

できました! 2度も丁寧な回答ありがとうございました。 私だけでは絶対に出来ませんでした。 takiboさんのおかげです。 本当に助かりました、ありがとうございました!!

その他の回答 (2)

  • takibo
  • ベストアンサー率57% (116/200)
回答No.2

'■(A)・・・Bookを開くときに保護をかける■ Private Sub Workbook_Open()   Sheets("承認").Protect "****"   '・・・・・「****」は任意のパスワード   ThisWorkBook.Save End Sub '■(B)-1・・・Bookを閉じるときに、保護がかかっていなければ要求する■ Private Sub Workbook_BeforeClose(Cancel As Boolean)   If Sheets("承認").ProtectContents Then     ThisWorkBook.Save   Else     MsgBox "保護がかかっていません"     Application.Dialogs(xlDialogProtectDocument).Show     Cancel = True   End If End Sub '■(B)-2・・・Bookを閉じるときに保護をかける■ Private Sub Workbook_BeforeClose(Cancel As Boolean)   If Sheets("承認").ProtectContents Then     ThisWorkBook.Save   Else     Sheets("承認").Protect "****"   '・・・・・「****」は任意のパスワード     ThisWorkBook.Save   End If End Sub 同じような業務を扱っているので sacchinn55 さんの考えはとてもよくわかります。 でもこれはけっこうやっかいです。 ・必ずマクロを有効にして開かなければあまり意味がない ・閉じるときに設定する場合、必ず保存することになる。変更を保存せずに終了はできなくなる。 (Saveをいれないと、保存せずに終了した場合保護がかからない可能性があります) ファイル利用者が必ずマクロを有効にして開いてもらえるのであれば(A)だけでもかなり有効です。 必ず保存されることを理解してもらえるのであれば(A)と、(B)のどちらかを組み合わせて使うのが一番確実です。 上記のマクロは標準モジュールではなく ThisWorkBook に記入してください。 ちなみに保護がかかった状態でもエラーは出ませんでした(Excel2002)

sacchinn55
質問者

お礼

丁寧な回答ありがとうございました。 かなり高度なんですね・・・ でも同じような業務をやっている方がいらっしゃるなんて励みになります!! シート名が各月ごと(6月、7月のように)になり、だんだん増えていくのですが、その場合はどのように対応すればいいのでしょうか? もしわかるようでしたら教えて頂ければ助かります。 宜しくお願いします。

  • OsieteG00
  • ベストアンサー率35% (777/2173)
回答No.1

マクロを組めば実現できると思いますよ。 BeforeCloseイベントに、ActiveSheet.Protect Password:="パスワード" を記述すればいけるはずですが。 ※すでに保護されていた場合はエラーになるかも知れないので、エラー制御は行う事。

sacchinn55
質問者

お礼

早速の回答ありがとうございました。 無事保護をすることができました! これで上司に提出できそうです。 あともしよろしければエラー制御の方法も知っていらっしゃいましたら教えて頂けますでしょうか?宜しくお願いします

関連するQ&A

専門家に質問してみよう