ファイルの暗号化・圧縮①方法編
VBAによるファイルの簡単な暗号化
Wordファイルにパスワードをかけて送りたいという要望があったときに思いついたもの。 結論としては、顧客が許すなら、7-zip入れてパスワード付き圧縮しちまえ。
Wordファイルを暗号化する方法もないわけじゃないが、圧縮の方が楽だし、他のファイル形式でも使える。標準機能でも圧縮はできるが、コードが長くてうんざりする。簡潔さと応用を考えると、7-Zipを使う方法がベストプラクティスだ。
7-Zipの準備
7-Zipをインストールしよう
コマンドラインバージョンもあるが、exeやmsiファイルを普通にインストールすればOK。インストールフォルダは確認しておくこと。今回というか、既定では以下だろう。
C:\Program Files\7-Zip\
7-Zipによるコマンドラインによる圧縮方法
公式のマニュアルがあるので、軽く見ておこう。簡単!
圧縮ツールの概要
UI概要
基本のUIはざっと以下のようなものだろう。今回は、圧縮方法を紹介するだけなので、流し見ておいてもらいたい。
以下については、後日紹介する。
- 圧縮ツールのUI
- 実際に対象レポート名を特定する方法
- パスワードの生成
【共通プロシージャ】コマンド実行
まずはテスト用にコマンドを実行するプロシージャを作ろう。
ShowPromptはウィンドウを出すかどうか。デバッグ用に残したが、いらないかもしれない。少なくとも、意味が直感的に分かる変数名にしておくこと。
Sub CmdExe(ByVal CmdStc As Variant, Optional ByVal ShowPrmpt As Long) Dim WSH As Object Set WSH = CreateObject("WScript.Shell") WSH.Run CmdStc, ShowPrmpt, True End Sub
「テスト用に」の意味だが、大量のファイルを処理するなら、batファイルに書きだした方が効率が良いからである。バッチ処理の方法は「ファイルの暗号化・圧縮②」以降に記載する。
【ツール専用プロシージャ】圧縮コマンドを投げる
次に、設定シートから必要な変数を拾ってきて、投げるだけのコードを書こう。
bat出力を含む、後の拡張性を考えれば、以下のようなものだろう。
Sub ZipFile() Call SetHack Select Case GetVal_Dft("実行タイプ") Case 0 CmdStc = GetVal_Dft("単体コマンド") Call CmdExe(CmdStc) End Select End Sub
これは、以前の記事で紹介したSetHackプロシージャ(固定値の設定)、GetVal_Dft関数(変数取得)などを使っている。
ワークシートを有効活用すれば、ここまでVBAを簡略化できるのだ。
エラーが発生したとき、確認するのは自分ではないかもしれない。いかなる場合もエラーが発生しないように膨大なコードを組むこともまた、エラーの温床となる。スタッフ自身が「ツールの実行時、エラー時、どこを確認すべきかがわかる」状態にしておくことが重要だ。
思いつきだが、ツール化するときは、以前の記事に書いたAddin_Switchのように、ExeFuncのような名前で呼び出し関数を作っても良いと思う。あらかじめCmdExeの内部にOptionalでNameProcとMemoProcを持っておいて、エラートラップをかければ、説明が出てくる。で、実行したければApplication.Run ExeFuncする。自作関数には、変数で説明を持っておくのが、保守性も可読性も維持されやすくおすすめだ。 要するに、このままコピペしてもツールとしては分かりづらいから、アレンジして使ってな、と言いたかった。 あとで書きなおす。