Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7全般 : Excel 2010)
シートの保護のマクロにはパスワードは記録されませんか?
投稿日時: 17/08/18 01:56:18
投稿者: シャオ

シートの保護について教えてください。
以下は、ABCというパスワードでシートの保護を解除して再度設定する操作を自動マクロで記録したものです。
パスワードが記録されていないのですが、実行するとABCで保護も解除もできます。
 
'パスワード『ABC』でシートの保護解除
    Sheets("Sheet1").Select
    ActiveSheet.Unprotect
     
 'パスワード『ABC』でシートの保護設定
    Sheets("Sheet1").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True
    ActiveSheet.EnableSelection = xlUnlockedCells
 
例えばパスワードをマクロの記載上で変更する場合、
再度記録を取らなければなりませんでしょうか。
 
よろしくお願いいたします。

回答
投稿日時: 17/08/18 07:20:39
投稿者: WinArrow
投稿者のウェブサイトに移動

>パスワードが記録されていないのですが、実行するとABCで保護も解除もできます。
  
パスワードは記録されません。
 
後半の
>実行するとABCで保護も解除もできます。
 
実行するとABCを入力しなくても保護も解除もできてしまいます。
の間違いではないでしょうか?
 
再度確認してみてください。
 
パスワードは、マクロの記録で作成したコードを手修正することになります。
 

回答
投稿日時: 17/08/18 08:17:49
投稿者: simple

既にご指摘のとおり、パスワードはマクロ記録されません。
 
>実行するとABCで保護も解除もできます。
実行すると、
・Unprotectは パスワードを求められる。(だから、ABCで解除できる、で正しい)
・Protectは パスワードなしで保護が実行される。
のではないですか?
 
いずれのメソッドもパスワードを引数に与えることが可能ですね。
「手作業のデータ誤修正を防止する観点」が主であれば、
マクロ中に明示的にパスワードを書いてもよいのかもしれません。
 
見られたら困るのなら、さらにモジュール自体にパスワードを掛けるのでしょうか。
(Excelのパスワードは余り有効ではないという説もありますが、
通常のレベルのユーザーであれば有効でしょう。)
目的によって対応が違ってくるでしょうね。

回答
投稿日時: 17/08/18 08:35:20
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
例えばパスワードをマクロの記載上で変更する場合、
 再度記録を取らなければなりませんでしょうか。

 
若しかして、
ユーザーによって、または、時には、パスワードを変える
といったことを考えですか?
 
自動でマクロコードを変更することは、かなりの無理があるので、
パスワードの保存場所を別のファイルにするというような仕掛け作りが必要になるでしょうね?
 
 

回答
投稿日時: 17/08/18 08:37:29
投稿者: WinArrow
投稿者のウェブサイトに移動

simpleさんのレスの中の
・Unprotectは パスワードを求められる。(だから、ABCで解除できる、で正しい)
は、最初の1回だけです。
2回目以降の解除には、パスワードを求めることはありません。

投稿日時: 17/08/18 09:36:03
投稿者: シャオ

WinArrow さん
simple さん
どうもありがとうございます。
 
今回テストしたいのは、
あるファイルを事務局で作成しました。
事務局で編集した行を非表示にしています。
このとき、事務局以外の方が再表示できなくしたいです。
 
既にいくつかの処理をするマクロが設定されており、
パスワードでシート保護されています。
が、今回の非表示を再表示できなくする部分だけは単体で作成しているため、
以下の操作を行いました。
 
1、マクロの中で一旦シート保護を解除
2、シート全体を選択
3、右クリックでセルの書式設定から保護を選択
4、ロックのチェックを外しOKボタン
5、2行目から19行目を選択
6、ロックのチェックを付けOKボタン
7、シートタブを選択しシートの保護を選択、
8、ロックされていないセル範囲の選択をチェック
9、セルの書式設定をチェック
10、列の書式設定をチェック
11、行の書式設定をチェック
12、OKボタン
 
上記の理由でマクロにパスワードを記載したく思いました。
すみません、最初からこの様に質問すれば良かったのですね。
申し訳ありません。
 
そこで、今朝以下の様に書いてみました。
一応期待の動きっぽくはあるのですが、
WinArrow さんのご指摘の通り、手動で上記7を操作すると、
パスワード解除が求められません。
これは困りました。
 
 
Sub Macro1()
 
Dim sn As String
sn = ActiveSheet.Name
Sheets(sn).Select
   
ActiveSheet.Unprotect Password:="ABC" '解除。
' ActiveSheet.Unprotect
    Cells.Select
    Range("B2").Activate
    Selection.Locked = False
    Selection.FormulaHidden = False
    Rows("2:19").Select
    Range("B2").Activate
    Selection.Locked = True
    Selection.FormulaHidden = False
 
ActiveSheet.Protect Password:="ABC" '保護。
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowFiltering:=True
    ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

回答
投稿日時: 17/08/18 10:23:44
投稿者: WinArrow
投稿者のウェブサイトに移動

話の内容がよく分かりません。
要するに何が困っているのか?
   
一部の操作(行の再表示)だけ、保護したいということでしょうか?
  
そんな都合のよいことは無理・・・と思いますよ。
 

投稿日時: 17/08/18 11:11:50
投稿者: シャオ

WinArrow さんの引用:
話の内容がよく分かりません。
要するに何が困っているのか?

 
WinArrowさん ありがとうございます。
一点だけ!
マクロでシートに保護を開けても、
手動でシートタブをクリックして、シートの保護解除ウィンドウが出ればとりあえず助かります。
 
そんな仕様のファイルを使ったことがあるので可能だとは思うのですが、
調べてもわかりませんでした。
よろしくお願いします。

投稿日時: 17/08/18 14:37:26
投稿者: シャオ

ありがとうございました。