VBAプロジェクトの特殊ロックと解除


はじめに

VBAコードの完全な隠蔽はできません。
このページで紹介するプロジェクトロックも解除可能です。
ただ解除する際にひと手間必要になるため、解除されにくくはなります。
実行する場合は、自己責任で。
失敗するとファイルが壊れるため、適時バックアップを取るといいでしょう。
ツール(VBAロック解除君)を作成しました。

特殊ロック

(1)まずはVBAプロジェクトに通常のパスワードを設定して保存します。
(2)対象のExcelファイルが古いフォーマット(拡張子がxlsやxlaなど3文字)の場合、
そのExcelファイルを直接バイナリエディタで開きます。


(3)新しいフォーマット(拡張子がxlsmやxlamなど4文字)の場合は、
まずそのExcelファイルの拡張子をzipに変更します。



そしてそのzipファイルを開いて、xlフォルダ内のvbaProject.binをzipファイル外にコピーして取り出します。



取り出したvbaProject.binをバイナリエディタで開きます。


(4)バイナリファイルで「ID=」で検索し、
該当箇所の値(ダブルコーテーション内の部分)を長さを変更せずにすべて「F」に書き換えます。



「CMG=」、「DPB=」、「GC=」の値も同様に書き換えます。



(5)旧フォーマットの場合、バイナリエディタでファイルを上書き保存します。
(6)新フォーマットの場合、バイナリエディタでファイルを上書き保存します。
そして更新したvbaProject.binをコピーし、zipファイル内の元のファイルに上書きコピーします。
エクスプローラで行うとzipファイルが壊れるので圧縮ソフトを使用してください。



拡張子をzipから元に戻します。



(7)ロックされました。


(8)このロックされたファイルを共有にしても問題ない場合、
パスワード付き共有にすることで更にプロテクトを強固にできます。

共有ロック解除

共有ロックもかかっている場合は、まず共有ロックを解除する必要があります。



(1)旧フォーマットの場合で拡張子がxlaの場合、対象ファイルを開いて、
以下のコードを実行してアドイン形式解除後、xls形式で名前を付けて保存します。


元のxlaのファイルを削除します。

(2)旧フォーマットの場合で拡張子がxlaの場合、作成したxlsファイルを開いて、
名前を付けて保存でxla形式で保存します。
(3)旧フォーマットの場合で拡張子がxla以外の場合、対象ファイルを開いて、
名前を付けて保存でxla形式で保存します。


(4)xla形式のファイルを開いて、以下のコードを実行し、xls形式で複製を作ります。


共有が解除されましたが、不完全なので一度共有にしてから共有を解除します。


元のファイルを削除して共有解除したファイルを元の名前に変更します。
(Test.xlsとTest.xlaを削除、Test1.xls→Test.xls)

(5)新フォーマットの場合、Excelファイルの拡張子をzipに変更します。
そしてそのzipファイルを開いて、xlフォルダ内のworkbook.xmlをzipファイル外にコピーして取り出します。



取り出したworkbook.xmlをテキストエディタで開き、「<workbookProtection」で検索し、
その項を削除し、保存します。




更新したworkbook.xmlをコピーし、zipファイル内の元のファイルに上書きコピーします。
エクスプローラで行うとzipファイルが壊れるので圧縮ソフトを使用してください。
拡張子をzipから元に戻して開きます。
パスワード付き共有からパスワードなし共有になっているので、共有を解除できます。



ロック解除

(1)旧フォーマットの場合は対象ファイルを直接、
新フォーマットの場合はzipファイルにリネームして、xlフォルダ内のvbaProject.binを取り出して、
バイナリエディタで編集します。
(2)「CMG=」、「DPB=」、「GC=」のキーを、それぞれ「CMx=」、「DPx=」、「Gx=」に書き換えて保存します。



(3)新フォーマットの場合は、zipフォルダ内のvbaProject.binを圧縮ソフトで置き換えた後、
拡張子をzipから元に戻します。
(4)ファイルを開こうとした時、またはファイルを開いた後VBEを開こうとする時、
以下のようなダイアログが3回出ますが、すべて「はい」を押します。


するとVBAプロジェクトのパスワードが解除されています。



Excel VBA講座に戻ります

トップに戻ります


お探しの情報は見つかりましたか?
まだの方はこちらをどうぞ。
Google

PageTop