6

セキュリティ上の理由から、マクロを Excel ワークブックの VBA から、後でファイルから呼び出す DLL ライブラリ ファイルに保存したいと考えています。

このようにして、マクロの任意のバージョンを会社の PC に展開することができますが、その背後にある実際のコードは誰も見ることができません。

これはどのように可能ですか?C++ への変換と DLL の作成について読みました。これに対する段階的な解決策はありますか?

4

5 に答える 5

5

まず、一般的にこれに対して警告させてください。これは企業向けアプリで 1 回行いましたが、移植にかかった時間は、最初にアプリを作成するのにかかった時間とほぼ同じでした。基本的にアプリをゼロから書き直すため、このためのステップバイステップのガイドはありません。

第 2 に、Excel VBA で実行できるすべての機能が必ずしも COM または XLL で利用できるわけではありません。利用可能なイベントは異なります。XLL の場合、すべてのデータ型に使用するまったく新しい構造があります。COM には UDF はありません。XLL にはマクロ アクションはありません。ワークシートにコードを添付することはできなくなり (Excel セッションのみ)、インストール手順ははるかに複雑になります。特定のパスに着手する前に、VBA が正確に何をするかを調査するのに長い時間を費やしました。

アプリの大きさにもよりますが、別のアーキテクチャでゼロから始めるのではなく、防水ライセンスを作成し、基本的なコードの難読化を行うことにお金を投資することをお勧めします (元のコメントに従って)。

于 2011-02-08T19:16:27.587 に答える
4

VBA、コードをパスワードで保護されたXLAに変換し、コードを難読化することで、コードを保護できます。しかし、パスワードのセキュリティは弱いです。XLAをすべてのExcelバージョンで動作させるのは簡単です。

簡単な代替手段は、コンパイルされたVB6Automationアドインに変換することです。セキュリティは良好で、変換も簡単で、UDFとコマンドアドインの両方を処理します。ただし、Excel2010-64またはXL2000などの初期バージョンのExcelでは機能しません。VB6コンパイラが必要になりますが、これは見つけるのが難しい場合があります。

より難しい代替手段は、.NETに変換することです。多くの難読化ツールの1つを使用する場合、セキュリティは合理的です。ExcelDNAやAddinExpressなど、XLLインターフェイスを介した.NETアクセスを許可するツールの1つを使用しない限り、パフォーマンスは低下します。64ビット機能も利用できます。

パフォーマンスとセキュリティが重要な場合は、C ++ XLLに変換する必要がありますが、VBAから取得する場合、これは大変な作業です。

于 2011-02-08T22:46:30.970 に答える
2

a) マクロを別のファイルに保存してパスワードで保護することはできますが、そのような保護を破る可能性のある「パスワードを回復する」プログラムが存在します。

b) c++ dll を実行することは可能ですが、構文が vba と非常に似ているため、代わりに Visual Basic 6 を使用するのが賢明です。vb6 では、COM コンポーネントを作成して登録し、後で Excel シートに追加できます。

于 2011-02-08T14:11:12.193 に答える
2

対象となる Excel のバージョンについては言及されていませんが、一般的な見解を示します。

  1. コードがアドインに適していることを確認してください。例: ThisWorkBook の代わりに、ActiveWorkbook を使用します。
  2. また、メニューを作成する必要があるか、ショートカット キーを使用する必要があるかを判断し、それに応じてコードを変更して保護します。
  3. VBE で IsAddin プロパティを True に変更します。
  4. ファイルを「名前を付けて保存」し、Excel アドインを選択します。または、保存して拡張子の名前を .xls から .xla に変更するだけです
  5. 次に、その .xla を「開く」ようにユーザーに通知するか、プロジェクトで参照するか、autostart フォルダーに配置するか、または....
  6. あなたは終わった

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

于 2011-02-08T19:43:34.323 に答える