『VBAにおけるProtect/Unprotect時のパスワード設定について』(TKG)
お世話になっております。 表題の件につきまして、ご存じの方が居ればご教示ください。 シートに対する様々な処理を行う際、 処理の前後でシートのUnprotect/Protectを行い、 処理完了後の手動編集を制限したいと考えました。 パスワードを設定しておき、自身しかわからないパスワードを設定しようとしたところ (他使用者はVBEを開くことすらできないのでプロジェクトに対する隠蔽は考慮しません) 2回目以降のUnprotect時にパスワードが不正とみなされ、処理に移れませんでした。 (同じパスワードを指定しており、最初の処理前に手動で保護も行っています) なお、手動でも設定したはずのパスワードで保護を解除することができず 全くもってパスワードが一致しないため、圧縮→xml編集で無理やり突破しました。
そもそもがガバガバなパスワードなのでそこまで強固にする必要はなく 面倒なのでパスワード設定は無しでコードを書き換えましたが どういった仕様でこのような現象が発生しているのでしょうか?
ちなみにPassword:= “1234”として記述しました。 数値であることが関係しているのですかね? 下記サンプルです。
Sub sample() Dim sh: Set sh = Sheets(1) ‘シートは1枚しか存在しません sh.Unprotect Password:= “1234” ‘2回目以降のここで止まり、手動での解除も不可 ‘shに対する処理 sh.Protect Password:= “1234” End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
特におかしなことは起きませんでした。 エラーにもなりませんし、想定どおりの結果でした。
まったく新しいブックで実行してみてはいかがですか?
(xyz) 2025/05/07(水) 22:24:06
xyz様 ありがとうございます。 確かに特定の条件下で発生していたようで新規ブックでは問題は起きませんでした。 実際の処理はかなり複雑なのでその他の処理で問題が発生していたのかもしれません。
ちなみになんですが、上記問題が発生した時に手動でパスワード入力しようとしたところ マスクされたパスワード●が入力文字数*2で表示されていたのですが 原因わかったりしますかね? 1234とタイプすると●●●●●●●●と表示されるような状態です。 キーボードの問題ですかね、、通常使用時には問題は起きないのですが。
あまりに限定的な状況かつ取り急ぎ解決したいわけでもないので、 あくまで雑談程度のノリで結構です。 (TKG) 2025/05/07(水) 22:33:08
すみませんが、そういうことは再現しません。 キーインする前から●●などが表示されることはないと思います。以上です。
(xyz) 2025/05/07(水) 23:09:57
パスワードの問題は置いておいて、 ProtectのUserInterfaceOnly引数をtrueにすれば、 Unprotectしないで済むのでは。 (tkit) 2025/05/08(木) 08:53:16
tkit様 ありがとうございます。 その方法も考えましたが 「ブックを閉じた後再度開くと編集可能になってしまう」 ことを避けたくこのような手法でした。 というのも、共有サーバーに保存するファイルでして 先述の通りマクロが全面的に受容されている職場では無いので マクロがブロックされた状態で開かれる場合も多々ある状況のため Openイベントなどで保護するのにも限界があり。 (TKG) 2025/05/08(木) 22:58:31
Protectは上書き出来るので、 手動で保護かけて、 Openイベントで .Protect Password:="パスワード",UserInterfaceOnly:=True とすれば、希望に添えた形でUnprotectせずに実行できるかと。 (tkit) 2025/05/09(金) 08:27:48
なるほど!! Openイベントが正しく実行される私が開いた際には マクロ実行時のUnprotectが不要になるという寸法ですね 上書きは思いつきませんでした。素晴らしいです。 (TKG) 2025/05/09(金) 21:14:29
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.