web-dev-qa-db-ja.com

Excel VBAコードを保護するための最良の方法は?

いくつかのマクロ関数を実行する単純なExcelデータベースをまとめたので、このデータベースを数人に配布する必要がありますが、マクロ関数が実際にどのように機能するかがわかりません(私が従わなければならない愚かなルールです!)。これを達成するための最良の方法は何ですか?

少し調べてみたところ、2つの方法が見つかりました。

  • パスワードはVBAプロジェクトを保護します;しかし、これはオンラインですぐに利用できるツールを使用して簡単に破ることができます(マクロと関数がどのように機能するかを知るためにこれを送信する人々にとって最大の利益になるでしょう。したがって、彼らが試してみるとほぼ100%確信しています。それに入るには..したがって、パスワード保護は不十分のようです。

  • C++のような完全にコンパイルされた言語に移動します;私のスキルはExcelとAccessのVBAに非常に限られているため、これが理想的なソリューションです。私にとっては解決策ではありません:(

他に方法はありますか?すべてのマクロを含む「マスターExcelドキュメント」を作成し、「子供」データベースをエンドユーザーに送信して、「子供」データベースを「マスター」に接続することを考えました。このようなことは可能ですか?マスターをオンラインでホストするか、エンドユーザーにマスターを送信しますが、「子」データベースからアクセスしない限り、マスターに完全にアクセスできないようにしますか?

12
Chronix3

オートメーションアドインを作成できます。

自動化アドインにはいくつかの利点があります

  • 実行速度:自動化アドインVB6で記述は、解釈されたVBA言語よりもはるかに高速に実行されるネイティブマシンコードにコンパイルされます。

  • セキュリティ:XLAアドインとは異なり、ソースコードをエンドユーザーに配布することはありません。コードに専有情報または知的財産の価値がある場合、それは自分のコンピューターで安全に保護されたままです。ユーザーに配布されることはありません。コードが危険にさらされることはありません。

http://www.cpearson.com/Excel/automationaddins.aspx

5
Santosh

ExcelVBAコードを確実に保護する方法はそれほど多くありません。

パスワードまたはVBA難読化ツールの使用を試みることができますが、その保護はすべて制限されています。パスワードは簡単に解読でき、難読化されたVBAコードは追跡して復元できます。

この質問に対するもう1つの答えは、VB6の使用について言及していますが、コードは32ビットExcelに制限されています。また、VB6はVBデコンパイラーで逆コンパイルできます。

コードをコンパイルされた言語に変換することは、VBAコードを保護するための最良の方法ですが、この場合、すべてのコードが同じように作成されるわけではないことに注意してください。

.NETアセンブリのコンパイル済みコードを元のソースコードに戻すことができるため、コードをVBA.NETに変換することは欠陥のあるソリューションです。

VBAコードをCまたはC++に変換するのが最も効果的な保護形式ですが、C/C++とVBAは非常に異なる言語であるため、これには多くの経験と労力が必要です。

Excel用のVBAコンパイラ( https://vbacompiler.com/how-to-compile/ )と呼ばれるツールをご覧になることをお勧めします。 ExcelVBAコードをクリックするだけでDLLファイルにコンパイルします。使用するには、CまたはC++言語の知識は必要ありません。

0
NikoDeem