ACCESSのVBAモジュールを編集したい時、パスワードでロックされていて、VBAが開けない時があります。
人から引き継いだACCESSだったり、パスワードを失念したりしてVBAモジュールが編集できない時の解除方法です。
【準備物】
調査用ACCESS = パスワード調査に使う新規ACCESS
■まずバイナリエディタを準備する
バイナリエディタ「Stirling」をダウンロードする。
フリーソフトなので、Vectorなどからダウンローをしてください。
https://www.vector.co.jp/soft/dl/win95/util/se079072.html
ダウンロードしたファイルは圧縮(lzh)ですので、解凍してわかりやすいところに保管します。
解凍するとフォルダが出来ますので、その中のStirling.exeを使用します。
■パスワード不明となった「元ACCESS」をコピーし、バックアップを取っておく(重要です)
ACCESSファイルのバイナリデータを書き換えるので必ずバックアップを取っておくこと。
書き換えに失敗するとACCESS自体が壊れて開かなくなりますので非常に重要です。
■「調査用ACCESS」を新規作成する
「元ACCESS」のパスワードは仮に4ケタの数値(1111)としてあります。
「調査用ACCESS」を別途用意して、パスワードを設定し、バイナリデータの比較をしていきます。
■バイナリエディタでパスワードのケタを比較調査する
Stirlingを使ってバイナリデータのパスワード部分のケタ数を調べていきます。
「元ACCESS」のパスワード部分のバイナリデータのケタ数と、「調査用ACCESS」のバイナリデータのケタ数が合致するものを探すのが目的です。
また、あらかじめ「元ACCESS」ファイルを最適化して保存しておいてください。
Stirlingを起動して、「元ACCESS」をドラッグ&ドロップして開きます。
次にバイナリデータ内で文字列を検索します。
「双眼鏡のボタン」又は、Ctrl+Fで検索ウィンドウを開き、検索データ=DPB、データ種別=文字列、検索範囲=カーソル位置からとし、「次検索」ボタンをクリックします。
検索範囲のカーソル位置は、最上段行にカーソルを持って行ってください。
DPBの後の""で挟まれている部分がパスワードのバイナリデータです。
DPB="ここがパスワードデータ"
少し見にくいですが、文字数を数えますと、78ケタありました。
■「調査用ACCESS」でパスワードのケタ数を調べる
それでは次に「調査用ACCESS」のバイナリデータを使って、ケタ数を調べます。
「調査用ACCESS」のパスワードを、「0」ゼロを1ケタから順に、同様に調べます。
また、ACCESSのパスワードを調べる前にACCESSの最適化を実行してから調べます。
なお、パスワードの設定方法は、下記となります。
VBAエディタの「ツール」-「(データベース名)のプロパティ」を選択
開いたウィンドウ内の「保護」タブのチェックボックスにチェック、パスワードを入力となります。
【バイナリエディタで調べた結果としましては】
0=74ケタ
00=74ケタ
000=76ケタ
0000=74ケタ
00000=78ケタ ・・・ここで78ケタが一致しました
これはあくまでバイナリデータの桁数を一致させるもので、ACCESSパスワードのケタ数ではありません。
また、例えば同じ「0」が1ケタのパスワードでも、バイナリデータが上記のように必ず74ケタとは限らないみたいです。
同じバイナリデータ数が見つかるまで根気よくいろいろ調べるしかないようです。
■バイナリエディタでパスワード部分をコピーする
パスワードのケタ数が一致したら、調査用ACCESSのバイナリデータを、「元ACCESS」のバイナリデータ部分にコピーし、保存します。
ここでコピー範囲など失敗すると、ACCESSが壊れ、復元できませんので、慎重にコピーしてください。
■「元ACCESS」のパスワードを解除する
「元ACCESS」のVBAパスワードがこれで、「1111」から「00000」と変更されたので、パスワードを入力してVBAエディタを開きます。
(このまま「00000」で使用し続けてもかまいませんが)
パスワードの保護を解除(保護タブのチェックを外し、パスワードを削除)し保存ます。
これでパスワード保護が解除されました。
■最後に
パスワード解除できたでしょうか。
実際にこのパスワードがかかったACCESSの修正を頼まれて困ったことがありました。
わざわざパスワードをかけて保護するような内容のACCESSでもないのに、と思いつつ、バイナリエディタで解除して事なきを得たことがあります。
ユーザーがたまたまVBAにたどり着き、いじってしまう事があるかもしれ無いので、保護は必要ですが、パスワードの引き継ぎも必要ですね。
個人的にはPC内のACCESSのみで処理するものなら、特にVBAのパスワードまでいらないかなと、思うのですが。
外部のデータサーバーにつなげて、複数のユーザーが同時にデータベースを扱うような配布ACCESSには保護は必要でしょうか。
誰かが勝手にVBAを修正して共有のデータベースの内容がおかしくなったら大事ですから。
別に私はシステム管理者ではないのですが、時々業務システムらしきものを作ったりするので、そんなことも考えたりもしているところです。