Как сохранить код VBA в библиотеку DLL? - PullRequest
5 голосов
/ 08 февраля 2011

В целях безопасности я хочу сохранить свои макросы из VBA в книге Excel в файл библиотеки DLL, который я буду вызывать из файла позже.

Таким образом, можно развернуть любую версию моих макросов на ПК компании, но никто никогда не увидит реальный код, стоящий за этим.

Как это возможно? Я читал о преобразовании в C ++ и создании DLL. Есть ли пошаговое решение для этого?

Ответы [ 5 ]

4 голосов
/ 08 февраля 2011

Прежде всего, позвольте мне предупредить вас об этом вообще. Мы делали это один раз с корпоративным приложением, и время, затрачиваемое на портирование, было примерно таким же, как и время, затрачиваемое на написание приложения. Пошаговое руководство для этого не будет, потому что вы в основном переписываете приложение с нуля.

Во-вторых, не все, что может сделать ваш Excel VBA, обязательно доступно в COM или XLL. Доступные события разные; в случае XLL существуют совершенно новые структуры, которые можно использовать для всех типов данных. В COM нет UDF; в XLL нет макросов. Вы больше не сможете прикреплять код к рабочим листам (только сеансы Excel), а процедуры установки намного сложнее. Я бы потратил много времени на изучение того, что делает ваш VBA, прежде чем идти по одному конкретному пути.

Это зависит от того, насколько велико ваше приложение, но я бы посоветовал вам вложить деньги в разработку водонепроницаемых лицензий и выполнение некоторой базовой обфускации кода (согласно исходным комментариям), а не начинать с нуля с другой архитектурой.

Извините, что являюсь носителем гибели ...

Chris

3 голосов
/ 09 февраля 2011

Вы можете защитить свой VBA, код, преобразовав его в защищенный паролем XLA и запутав код. но безопасность пароля слабая. Легко заставить XLA работать со всеми версиями Excel.

Легкой альтернативой является преобразование в скомпилированное дополнение VB6 Automation. Безопасность хорошая, ее легко конвертировать, она будет обрабатывать как UDF, так и надстройки Command. Но он не будет работать с Excel 2010-64 или более ранними версиями Excel, такими как XL 2000. Вам понадобится компилятор VB6, который может быть трудно найти.

Более сложная альтернатива - конвертировать в .NET. Если вы используете один из множества обфускаторов, то безопасность будет разумной. Производительность будет плохой, если вы не используете один из инструментов, обеспечивающих доступ .NET через интерфейс XLL, например Excel DNA или Addin Express. 64-разрядные возможности также доступны.

Если производительность и безопасность критически важны, вам нужно будет преобразовать их в C ++ XLL, но это трудная работа при переходе с VBA.

2 голосов
/ 08 февраля 2011

Вы не упомянули свою целевую версию Excel, но я дам общий вид.

  1. Убедитесь, что ваш код подходит для AddIn.Например: вместо ThisWorkBook используйте ActiveWorkbook.
  2. Также решите, нужно ли вам создавать меню или использовать сочетания клавиш, и соответственно измените код и защитите его.
  3. В VBE измените наСвойство IsAddin для True.
  4. «Сохранить как» ваш файл и выберите надстройку Excel.В качестве альтернативы просто сохраните его и переименуйте расширение из .xls в .xla
  5. Теперь либо сообщите своим пользователям «открыть» этот .xla, либо укажите его в своих проектах, либо поместите в папку автозапуска или....
  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/library/aa140936(v=office.10).aspx

2 голосов
/ 08 февраля 2011

a) Вы можете сохранить свой макрос в отдельном файле и защитить его паролем, но существует программа для «восстановления пароля», которая может сломать такую ​​защиту.

b) Хотя возможно сделать DLL на c ++, вместо этого разумно использовать Visual Basic 6, потому что синтаксис очень похож на VBA.В vb6 вы можете создать COM-компонент, зарегистрировать его и позже добавить в свой лист Excel.

0 голосов
/ 23 февраля 2019

Преобразование кода VBA в C ++ является довольно трудоемким процессом, поскольку C ++ и VBA - это очень разные языки, но такое преобразование с компиляцией в файл DLL действительно обеспечивает лучшую защиту кода VBA.

Если вам нужен инструмент, который делает именно это, я бы порекомендовал VBA Compiler for Excel .Он преобразует ваш код VBA в C и компилирует этот код C в файл DLL.

Это проще и быстрее, чем конвертировать код VBA в C вручную.Веб-сайт компилятора VBA содержит простое руководство из 10 шагов по компиляции кода VBA в файл Windows DLL https://vbacompiler.com/how-to-compile/, и даже не требует никаких знаний C или C ++.

...