セキュリティ上の理由から、マクロを Excel ワークブックの VBA から、後でファイルから呼び出す DLL ライブラリ ファイルに保存したいと考えています。
このようにして、マクロの任意のバージョンを会社の PC に展開することができますが、その背後にある実際のコードは誰も見ることができません。
これはどのように可能ですか?C++ への変換と DLL の作成について読みました。これに対する段階的な解決策はありますか?
セキュリティ上の理由から、マクロを Excel ワークブックの VBA から、後でファイルから呼び出す DLL ライブラリ ファイルに保存したいと考えています。
このようにして、マクロの任意のバージョンを会社の PC に展開することができますが、その背後にある実際のコードは誰も見ることができません。
これはどのように可能ですか?C++ への変換と DLL の作成について読みました。これに対する段階的な解決策はありますか?
まず、一般的にこれに対して警告させてください。これは企業向けアプリで 1 回行いましたが、移植にかかった時間は、最初にアプリを作成するのにかかった時間とほぼ同じでした。基本的にアプリをゼロから書き直すため、このためのステップバイステップのガイドはありません。
第 2 に、Excel VBA で実行できるすべての機能が必ずしも COM または XLL で利用できるわけではありません。利用可能なイベントは異なります。XLL の場合、すべてのデータ型に使用するまったく新しい構造があります。COM には UDF はありません。XLL にはマクロ アクションはありません。ワークシートにコードを添付することはできなくなり (Excel セッションのみ)、インストール手順ははるかに複雑になります。特定のパスに着手する前に、VBA が正確に何をするかを調査するのに長い時間を費やしました。
アプリの大きさにもよりますが、別のアーキテクチャでゼロから始めるのではなく、防水ライセンスを作成し、基本的なコードの難読化を行うことにお金を投資することをお勧めします (元のコメントに従って)。
VBA、コードをパスワードで保護されたXLAに変換し、コードを難読化することで、コードを保護できます。しかし、パスワードのセキュリティは弱いです。XLAをすべてのExcelバージョンで動作させるのは簡単です。
簡単な代替手段は、コンパイルされたVB6Automationアドインに変換することです。セキュリティは良好で、変換も簡単で、UDFとコマンドアドインの両方を処理します。ただし、Excel2010-64またはXL2000などの初期バージョンのExcelでは機能しません。VB6コンパイラが必要になりますが、これは見つけるのが難しい場合があります。
より難しい代替手段は、.NETに変換することです。多くの難読化ツールの1つを使用する場合、セキュリティは合理的です。ExcelDNAやAddinExpressなど、XLLインターフェイスを介した.NETアクセスを許可するツールの1つを使用しない限り、パフォーマンスは低下します。64ビット機能も利用できます。
パフォーマンスとセキュリティが重要な場合は、C ++ XLLに変換する必要がありますが、VBAから取得する場合、これは大変な作業です。
a) マクロを別のファイルに保存してパスワードで保護することはできますが、そのような保護を破る可能性のある「パスワードを回復する」プログラムが存在します。
b) c++ dll を実行することは可能ですが、構文が vba と非常に似ているため、代わりに Visual Basic 6 を使用するのが賢明です。vb6 では、COM コンポーネントを作成して登録し、後で Excel シートに追加できます。
対象となる Excel のバージョンについては言及されていませんが、一般的な見解を示します。
http://www.ozgrid.com/VBA/excel-add-in-create.htm
http://excel.tips.net/Pages/T002927_Creating_AddIns.html
http://msdn.microsoft.com/en-us/ライブラリ/aa140936(v=office.10).aspx