2011-02-08 58 views
5

Vì mục đích bảo mật, tôi muốn lưu các macro của mình từ VBA trong sổ làm việc Excel sang tệp thư viện DLL mà tôi muốn gọi từ tệp sau này.Làm thế nào để lưu mã VBA vào thư viện DLL?

Bằng cách này, có thể triển khai bất kỳ phiên bản macro nào của tôi tới máy tính của công ty nhưng không ai sẽ thấy mã thực sự đằng sau nó.

Làm cách nào có thể? Tôi đã đọc về chuyển đổi sang C++ và tạo DLL. Có giải pháp từng bước nào cho việc này không?

+1

Tôi không biết về DLL, nhưng bạn cũng có thể đạt được mục tiêu của mình bằng cách bảo vệ mã của bạn, lưu mã đó làm bổ trợ và triển khai nó như vậy. –

+0

@iDevlop: Tôi sẽ sử dụng addin nếu được sử dụng bởi hơn 50 người tôi đoán .. phải không? – Skuta

+2

@Skuta: không, lưu dưới dạng bổ trợ là mẹo 5 phút! Chỉ cần không bằng chứng của hacker, như magallanes chỉ nó, nhưng hoàn hảo để ngăn chặn người dùng doanh nghiệp để xem mã, và để cập nhật âm thầm. –

Trả lời

3

bạn có thể bảo vệ VBA, mã của bạn bằng cách chuyển đổi nó vào một XLA mật khẩu bảo vệ và obfuscating mã.nhưng bảo mật mật khẩu yếu. Thật dễ dàng để làm cho XLA hoạt động với tất cả các phiên bản Excel.

Một giải pháp thay thế dễ dàng là chuyển đổi sang phần bổ trợ Tự động hóa VB6 đã biên dịch. An ninh là tốt, dễ dàng chuyển đổi, nó sẽ xử lý cả UDF và bổ trợ Command. Nhưng nó sẽ không hoạt động với Excel 2010-64 hoặc các phiên bản Excel đầu tiên như XL 2000. Bạn sẽ cần một trình biên dịch VB6, có thể khó tìm.

Thay thế khó hơn là chuyển đổi thành .NET. Nếu bạn sử dụng một trong nhiều obfuscators thì bảo mật là hợp lý. Hiệu suất sẽ kém, trừ khi bạn sử dụng một trong những công cụ cho phép truy cập .NET thông qua giao diện XLL, chẳng hạn như Excel DNA hoặc Addin Express. Khả năng 64 bit cũng có sẵn.

Nếu hiệu suất và bảo mật là quan trọng, bạn sẽ cần phải chuyển đổi sang C++ XLL, nhưng đây là công việc khó khăn khi đến từ VBA.

2

a) Bạn có thể lưu macro của mình trong một tệp riêng biệt và bảo vệ bằng mật khẩu nhưng tồn tại chương trình để "khôi phục mật khẩu" có thể phá vỡ sự bảo vệ đó.

b) Trong khi có thể thực hiện một dll C++, thông minh để làm thay vì sử dụng hình ảnh cơ bản 6 vì cú pháp khá giống với vba. Trong vb6 bạn có thể tạo một thành phần COM, đăng ký nó và sau đó thêm vào bạn excel sheet.

4

Trước hết, hãy để tôi cảnh báo bạn chống lại điều này nói chung. Chúng tôi đã làm điều này một lần với một ứng dụng công ty và thời gian nó đã đến cổng là khoảng giống như thời gian cần để viết các ứng dụng ban đầu. Hướng dẫn từng bước sẽ không tồn tại cho điều này bởi vì bạn về cơ bản đang viết lại ứng dụng từ đầu.

Thứ hai, không phải mọi thứ mà Excel VBA của bạn có thể thực hiện đều có sẵn trong COM, hoặc XLL. Các sự kiện có sẵn là khác nhau; trong trường hợp của XLL có cấu trúc hoàn toàn mới để sử dụng cho tất cả các kiểu dữ liệu. Trong COM không có UDF; trong XLL không có hành động macro. Bạn sẽ không còn có thể đính kèm mã vào trang tính (chỉ các phiên Excel) và các quy trình cài đặt phức tạp hơn nhiều. Tôi đã dành một thời gian dài nghiên cứu những gì VBA của bạn làm chính xác trước khi bắt tay xuống một con đường cụ thể.

Tùy thuộc vào mức độ ứng dụng của bạn, nhưng tôi khuyến khích bạn đầu tư tiền vào việc lấy giấy phép kín nước và thực hiện một số mã cơ bản obfuscation (theo nhận xét ban đầu) thay vì bắt đầu từ đầu với một kiến ​​trúc khác.

lỗi cho tôi nếu người mang doom ...

Chris

2

Bạn đã không đề cập đến mục tiêu phiên bản Excel của bạn, nhưng tôi sẽ cung cấp cho một cái nhìn tổng quát.

  1. Đảm bảo mã của bạn phù hợp với AddIn. Ví dụ: thay vì ThisWorkBook, sử dụng ActiveWorkbook.
  2. Đồng thời quyết định xem bạn có cần tạo trình đơn hay sử dụng phím tắt và sửa đổi mã của bạn cho phù hợp hay không và bảo vệ mã đó.
  3. Trong VBE, hãy đổi thành thuộc tính IsAddin thành True.
  4. "Lưu dưới dạng" tệp của bạn và chọn bổ trợ Excel. Ngoài ra, chỉ cần lưu và đổi tên tiện ích mở rộng từ .xls thành .xla
  5. Bây giờ, hãy thông báo cho người dùng của bạn "mở" .xla hoặc tham chiếu nó trong dự án của bạn hoặc đặt nó trong thư mục tự khởi động hoặc ....
  6. bạn đã làm xong

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

Các vấn đề liên quan