Kỹ thuật lập trình VB6->DLL cho Excel & Debugging cho Excel

Liên hệ QC

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,649
Được thích
10,138
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Mục đích bài viết này tôi muốn gửi tới các thành viên 2 nội dung chính:

1) Kỹ thuật Debug trong Excel
Trong việc lập trình, có những bài toán đơn giản ta có thể viết hàm hay thủ tục một cách dễ dàng, nhưng có những bài toán phức tạp mà kết quả của một hàm chúng ta cần phải kiểm tra kỹ lưỡng tiến trình nhận kết quả của chúng, và đôi khi xảy ra lỗi chúng ta cũng cần phải tìm lỗi do đâu...

Video demo:
http://www.bluesofts.net/Programming/DebugVBA/DebugVBA.html

2) Kỹ thuật viết hàm, thủ tục trong VB6, biên dịch DLL và nhúng trong Excel, phương pháp Debug giũa 2 môi trường VB6 & VBA
Đã từ lâu, nhiều người đã rất lo lắng về việc mã nguồn viết trong VBA dẽ dàng bị lộ bởi cơ chế bảo mật của VBA không được tốt. Có một giải pháp là chúng ta viết mã trong thư viện DLL sau đó nhúng DLL này trong Excel, VBA để sử dụng.
+ Ưu điểm của phương pháp này là:
- Bảo mật được mã nguồn trong DLL (tốt hơn VBA vì nó đã được mã hóa)
- Xây dựng được hệ thống các thư viện các hàm và thủ tục có thể dùng chung cho nhiều ứng dụng khác nhau.
- Không bị các PM diệt virus diệt như với code trong VBA.
- Thừa hưởng các tài nguyên, control tốt trong VB6

+ Nhược điểm:
- Tốc độ chạy không nhanh bằng các hàm và thủ tục viết trực tiếp trong VBA.

Vấn đề viết mã trong VB6 hay các ngôn ngữ khác để tạo ra DLL dùng cho Excel cũng gặp phải một trở ngại là làm sao biết được mã mình viết trong DLL là đảm bảo chính xác? Nhiều người trước đây đã phải làm một việc rất vất vả là viết hàm trong VBA, kiểm tra chạy tốt rồi mới đưa sang VB6 để biên dịch thành DLL, nhưng khi có sự sửa chữa, nâng cấp mã thì công việc chuyển đổi giữa VBA->VB6 khá phiền hà. Phương án giải quyết vấn đề này là viết mã trực tiếp trong VB6, dùng kỹ thuật Debug trong VB6 cho Excel, VBA.
...

Video demo:
http://www.bluesofts.net/Programming/DebugVB6VBA/DebugVB6VBA.html

Download Video & ví dụ

.
 
Lần chỉnh sửa cuối:
Mục đích bài viết này tôi muốn gửi tới các thành viên 2 nội dung chính:

1) Kỹ thuật Debug trong Excel
Trong việc lập trình, có những bài toán đơn giản ta có thể viết hàm hay thủ tục một cách dễ dàng, nhưng có những bài toán phức tạp mà kết quả của một hàm chúng ta cần phải kiểm tra kỹ lưỡng tiến trình nhận kết quả của chúng, và đôi khi xảy ra lỗi chúng ta cũng cần phải tìm lỗi do đâu...

Video demo:
http://www.bluesofts.net/Programming/DebugVBA/DebugVBA.html

2) Kỹ thuật viết hàm, thủ tục trong VB6, biên dịch DLL và nhúng trong Excel, phương pháp Debug giũa 2 môi trường VB6 & VBA

Đã từ lâu, nhiều người đã rất lo lắng về việc mã nguồn viết trong VBA dẽ dàng bị lộ bởi cơ chế bảo mật của VBA không được tốt. Có một giải pháp là chúng ta viết mã trong thư viện DLL sau đó nhúng DLL này trong Excel, VBA để sử dụng.
+ Ưu điểm của phương pháp này là:
- Bảo mật được mã nguồn trong DLL (tốt hơn VBA vì nó đã được mã hóa)
- Xây dựng được hệ thống các thư viện các hàm và thủ tục có thể dùng chung cho nhiều ứng dụng khác nhau.
- Không bị các PM diệt virus diệt như với code trong VBA.
- Thừa hưởng các tài nguyên, control tốt trong VB6

+ Nhược điểm:
- Tốc độ chạy không nhanh bằng các hàm và thủ tục viết trực tiếp trong VBA.

Vấn đề viết mã trong VB6 hay các ngôn ngữ khác để tạo ra DLL dùng cho Excel cũng gặp phải một trở ngại là làm sao biết được mã mình viết trong DLL là đảm bảo chính xác? Nhiều người trước đây đã phải làm một việc rất vất vả là viết hàm trong VBA, kiểm tra chạy tốt rồi mới đưa sang VB6 để biên dịch thành DLL, nhưng khi có sự sửa chữa, nâng cấp mã thì công việc chuyển đổi giữa VBA->VB6 khá phiền hà. Phương án giải quyết vấn đề này là viết mã trực tiếp trong VB6, dùng kỹ thuật Debug trong VB6 cho Excel, VBA.
...

Video demo:
http://www.bluesofts.net/Programming/DebugVB6VBA/DebugVB6VBA.html

Download Video & ví dụ

.
Chào anh Tuân
tôi có tải về ví dụ trong bài trên và tôi đã gọi được sub lệnh Thongbao. nhưng còn vấn đề về Function thì lại báo lỗi.
trong excel khi điền công thức "=VB6VBA.Funcs.VBSum(B3:C5)" thì toàn báo lỗi #NAME?
Mong anh giải đáp dùm
 
Upvote 0
VB6 thấy Bill keo sản phẩn đã nghỉ hưu ròi đó :p ;)
 
Upvote 0
Chào anh Tuân
tôi có tải về ví dụ trong bài trên và tôi đã gọi được sub lệnh Thongbao. nhưng còn vấn đề về Function thì lại báo lỗi.
trong excel khi điền công thức "=VB6VBA.Funcs.VBSum(B3:C5)" thì toàn báo lỗi #NAME?
Mong anh giải đáp dùm
Mình chỉ biết do VBA không biết =VB6VBA.Funcs.VBSum(B3:C5) là gì, để làm sao VBA biết =VB6VBA.Funcs.VBSum(B3:C5) thì mình không biết
 
Upvote 0
Chào anh Tuân
tôi có tải về ví dụ trong bài trên và tôi đã gọi được sub lệnh Thongbao. nhưng còn vấn đề về Function thì lại báo lỗi.
trong excel khi điền công thức "=VB6VBA.Funcs.VBSum(B3:C5)" thì toàn báo lỗi #NAME?
Mong anh giải đáp dùm

Vì DLL này tạo bên VB6 nên nó chỉ chạy được cho Excel 32-bit. Nếu bạn có VB6 và biên dịch DLL trên thì nó tự RegSvr32 DLL chp bạn. Nếu bạn chỉ lấy DLL và chạy thì phải tự RegSvr32 nhé.

Cách đăng ký DLL trên máy:
+ Bước 1: Mở chương trình Command Prompt (có thể nên chạy "Run as administrator)
+ Bước 2: Gõ lệnh:
Regsvr32 "đường dẫn\file.dll"

ENTER

Nếu thành công bạn sẽ nhận được thông báo Install success!

Vì VB6 không còn phát triển, tệ nhất là không biên dịch ra 64-bit nên tôi định hướng mọi người nên học ngôn ngữ khác như Delphi để biên dịch đa nền tảng với native code. Hoặc dùng .NET cũng được nhưng tôi cung thích lắm vì không phải native code,...
 
Upvote 0
Vì DLL này tạo bên VB6 nên nó chỉ chạy được cho Excel 32-bit. Nếu bạn có VB6 và biên dịch DLL trên thì nó tự RegSvr32 DLL chp bạn. Nếu bạn chỉ lấy DLL và chạy thì phải tự RegSvr32 nhé.

Cách đăng ký DLL trên máy:
+ Bước 1: Mở chương trình Command Prompt (có thể nên chạy "Run as administrator)
+ Bước 2: Gõ lệnh:
Regsvr32 "đường dẫn\file.dll"

ENTER

Nếu thành công bạn sẽ nhận được thông báo Install success!

Vì VB6 không còn phát triển, tệ nhất là không biên dịch ra 64-bit nên tôi định hướng mọi người nên học ngôn ngữ khác như Delphi để biên dịch đa nền tảng với native code. Hoặc dùng .NET cũng được nhưng tôi cung thích lắm vì không phải native code,...
tôi đã làm theo cách anh chỉ, nhưng vẫn không thấy hàm Function đó chạy. tôi đã Install success!
và đây là hàm Function đó:
Function VBSum(ByVal rng As Range) As Double
Dim Cell As Range

For Each Cell In rng
Debug.Print Cell.Address, Cell.Value2
VBSum = VBSum + Cell.Value2
Next

End Function
 
Upvote 0
tôi đã làm theo cách anh chỉ, nhưng vẫn không thấy hàm Function đó chạy. tôi đã Install success!
và đây là hàm Function đó:
Function VBSum(ByVal rng As Range) As Double
Dim Cell As Range

For Each Cell In rng
Debug.Print Cell.Address, Cell.Value2
VBSum = VBSum + Cell.Value2
Next

End Function

Bạn vào Add-in Manager chọn Automation và chọn tới DLL này nhé.
 
Upvote 0
Cho em hỏi để đăng ký reg 32 trong dephi thì cách làm như thế nào.
Em win10 64 bit office 2016. Sao em làm hoài mà không được .
 
Upvote 0
Chào anh
Cho em hỏi, em làm 1 Function và Make to Dll
Nhưng khi đăng ký thì báo lỗi như hình

Nhờ anh hướng dẫn
1.png2.png
 
Upvote 0
Upvote 0
Anh up lai video giúp. Em không xem được ạ
 
Upvote 0
Web KT
Back
Top Bottom