2010-05-26
パスワード付きのExcelの保護を,バッチで自動的に解除しよう (VBAマクロが見れないブックに対して,パスワードを自動入力)
VBA, excel, WSH/JScript, hack, キー操作の自動化 |
Excel VBAは,パスワードで閲覧制限をかけることができる。
※その方法:
Excelブック内のマクロをパスワードで保護する方法
http://www.happy2-island.com/excelsmile/smile01/capter00600-01.shtml
- VBE上で,ツール>VBAプロジェクトのプロパティ>保護 を開く。
- 「プロジェクトを表示用にロックする」にチェック。
- 「プロジェクトのプロパティ表示のためのパスワード」を2箇所入力。
- OKをクリックし,ブックを保存。
しかし,マクロを修正するたびに,いちいち手動でパスワードを入力するのは面倒。
さらに,「外部からバッチでExcel内部を自動操作したい」という時,パスワードのせいで,操作が妨害される。
以下では,Excelのパスワードを自動的に入力するスクリプトを記述する。(言語はWSH/JScript)
下記のコードを保存し,ダブルクリックすればよい。
break_password.js
/* ---------- 準備 ---------- */ // excelのファイル名と,モジュールの吸出し先パスを指定 var file_dir = "D:\\temp"; var file_name = "hoge.xls"; var file_path = file_dir + "\\" + file_name; // Excelファイルのパスワードを,SendKeys用の記法で記述 var pass_string = "+abc_123"; // Abc_123 // SendKeysの特殊キー一覧表 // http://www.atmarkit.co.jp/fwin2k/operation/wsh05/wsh05_04.html // ブックを開く var excel = WScript.CreateObject("Excel.Application"); excel.Visible = true; excel.Workbooks.Open( file_path ); var book = excel.Workbooks( excel.Workbooks.Count ); // JScript/WSH で,Excelファイルを読み書きしよう // http://d.hatena.ne.jp/language_and_engineering/20090717/p1 /* ---------- パスワード解除 ---------- */ var ws = WScript.CreateObject("WScript.Shell"); // Visual Basic Editorを開き,プロジェクトエクスプローラにフォーカス book.VBProject.VBE.Windows(1).SetFocus(); WScript.Sleep( 500 ); // 一番上のプロジェクトにフォーカス ws.SendKeys( "{TAB}" ); WScript.Sleep( 200 ); // パスワード入力ダイアログを表示する ws.SendKeys( "{ENTER}" ); WScript.Sleep( 500 ); // パスワードを入力 ws.SendKeys( pass_string ); WScript.Sleep( 200 ); ws.SendKeys( "{ENTER}" ); WScript.Sleep( 500 ); // パスワード解除完了
実行すると,該当するExcelが開いて,パスワードが解除される。
なお,事前にExcel上で以下の設定を行なっておくこと。
(Excel2003の場合)
ツール>マクロ>セキュリティ>信頼できる発行元>Visual Basic プロジェクトへのアクセスを信頼する をオン
(Excel2007の場合)
リボンの「開発」タブ>マクロのセキュリティ>VBAプロジェクトオブジェクトモデルへのアクセスを信頼する
http://support.microsoft.com/kb/282830/ja
※「プログラミングによるVisual Basicプロジェクトへのアクセスは信頼性に欠けます」というエラーメッセージが出ないようになる。
続いて,コードの内容の補足。
SendKeysについて:
- 半角アンダーバーは,SendKeysでそのまま送信できる
VBAによるマクロの保護+保護解除について:
VBAでVBAProjectを保護する方法(Excel2000VBA)
http://okwave.jp/qa/q1906926.html
- VBProject.Protectionは保護状態を取得するだけしかできない。
- 保護も解除も,SendKeysが一般的
VBAのパスワード解除自動化,SendKeysで苦戦
http://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi?mode=allread&no=6575&page=0#6620
応用
以下と組み合わせれば,「パスワードで保護されたExcelファイルからマクロを自動的に吸い出す」ことも可能。
Excelのマクロを外部に吸い出して保存するバッチ (WSH/JScriptで,VBAのソースコードだけを抜き取る)
これで,Excel VBAアプリケーションのリリース・保守作業を効率化することができる。
- 3463 https://www.google.co.jp/
- 2515 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=29&ved=0CGQQFjAIOBQ&url=http://d.hatena.ne.jp/language_and_engineering/20100526/p1&ei=_e89T8K7BdDimAX489DOBw&usg=AFQjCNEmSBe9XXN9Mc1ghr0_YAkJaoeXUA&sig2=7incfp5Dti4Vr-KMla4_R
- 1355 http://search.yahoo.co.jp/search?p=エクセルのVBAプロジェクトのパスワードを解除する方法&
- 920 http://www.google.co.jp/url?url=http://d.hatena.ne.jp/language_and_engineering/20100526/p1&rct=j&sa=U&ei=JiKETverG6z3mAWHrrEn&ved=0CBUQFjACOAo&q=excel+ マクロ パスワード ?%A
- 831 http://www.google.co.jp/url?sa=t&rct=j&q=エクセル パスワード 削除 java script&source=web&cd=1&ved=0CCgQFjAA&url=http://d.hatena.ne.jp/language_a
- 821 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=10&cts=1331131442476&ved=0CHkQFjAJ&url=http://d.hatena.ne.jp/language_and_engineering/20100526/p1&ei=zmNXT4aAKs7SmAWp5IG9Dw&usg=AFQjCNEmSBe9XXN9Mc1ghr0_YAkJaoeXUA&sig2=Zm58xfVIy1sS
- 415 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&cts=1331567979291&ved=0CFIQFjAF&url=http://d.hatena.ne.jp/language_and_engineering/20100526/p1&ei=rRxeT4u9PJChmQXWt7mZDw&usg=AFQjCNEmSBe9XXN9Mc1ghr0_YAkJaoeXUA
- 388 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=25&ved=0CN8BEBYwGA&url=http://d.hatena.ne.jp/language_and_engineering/20100526/p1&ei=wT0-T529MbCfiAfTn-3NBA&usg=AFQjCNEmSBe9XXN9Mc1ghr0_YAkJaoeXUA
- 386 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=36&ved=0CFkQFjAFOB4&url=http://d.hatena.ne.jp/language_and_engineering/20100526/p1&ei=S1wlT7vCH420iQeNxtXvBA&usg=AFQjCNEmSBe9XXN9Mc1ghr0_YAkJaoeXUA
- 362 http://www.google.co.jp/search?q=エクセル+自動入力 マクロ&hl=ja&start=30&sa=N