Chia sẻ Add_ins dùng để mã hóa code VBA (nhằm tạo sự khó đọc cho những kẻ tò mò)

Liên hệ QC
Bác giaiphap rảnh thì viết hướng dẫn tạo bộ cài như cái vntool của bác đi, tui hâm mộ cái bộ setup đó quá ^^ (mà share code luôn để ae tiếp tục phát triển thêm thì thật tuyệt vời nếu bác làm ko vì mục đích thương mại )
Cái file setup đó là tui tham khảo từ trên mạng và cũng chưa hiểu rõ được nhiều lệnh trong đó nên bảo hướng dẫn thì thua thật, còn bạn muốn chia sẻ code thì mình đã chia sẽ rồi, cụ thể có rất nhiều bác xem code và chê khen đủ thứ rồi còn gì? đa số các code của tôi trên diễn đàn có đầy, nếu bạn cần thì để lại email tôi sẻ chia sẻ riêng cho bạn.
 
Cái file setup đó là tui tham khảo từ trên mạng và cũng chưa hiểu rõ được nhiều lệnh trong đó nên bảo hướng dẫn thì thua thật, còn bạn muốn chia sẻ code thì mình đã chia sẽ rồi, cụ thể có rất nhiều bác xem code và chê khen đủ thứ rồi còn gì? đa số các code của tôi trên diễn đàn có đầy, nếu bạn cần thì để lại email tôi sẻ chia sẻ riêng cho bạn.
Mình cũng ko cần cao siêu gì cả cứ làm đc bộ setup như bạn là ok rồi, mình mới nghiên cứu về VBA do nhu cầu công việc, email của mình là btnamncseif@gmail.com mong bạn share code vntool và cái hướng dẫn nho nhỏ để mình có thể làm đc cái bộ setup (nếu share luôn thư viện code mà bạn siêu tập được thì ok quá ^^). Thx in advanced!
 
Cái file setup đó là tui tham khảo từ trên mạng và cũng chưa hiểu rõ được nhiều lệnh trong đó nên bảo hướng dẫn thì thua thật, còn bạn muốn chia sẻ code thì mình đã chia sẽ rồi, cụ thể có rất nhiều bác xem code và chê khen đủ thứ rồi còn gì? đa số các code của tôi trên diễn đàn có đầy, nếu bạn cần thì để lại email tôi sẻ chia sẻ riêng cho bạn.
Sau 2 ngày Nghiên cứu Code Add-Ins mã hóa Bạn úp ....Mạnh mới chỉnh sửa và viết lại thành 1 File setup = VB6 Bạn tải về Test thử nha ....Viết Add-ins trên VB6 quá đơn giản mà ....Bảo mật code OK

1/ không phải dùng 1 phần mền của hãng khác Make nó lại thành file Setup ...mà mình làm trên VB6 từ A ...Z

2/ Không phải cài Vào Program nên không phải lo Rác hệ thống khi ko thích xài nữa vào Add-ins xóa nó đi là xong

3/ Mọi cái tự động hết chỉ 1 cái chuột và chọn Yes ( Nếu UAC ON)

4/ Bạn test thử và cho ý kiến chi tiết nha....

5/ Pass VBA Add-Ins là: 123

6/ Bạn nào Rảnh Mạnh nhờ Check dùm...

Xin cảm ơn
 

File đính kèm

  • SetupEncryptVBACode.rar
    132.9 KB · Đọc: 225
Lần chỉnh sửa cuối:
Bị lỗi này kìa bác Kiều Mạnh
 

File đính kèm

  • Capture.jpg
    Capture.jpg
    23.1 KB · Đọc: 207
Sau 2 ngày Nghiên cứu Code Add-Ins mã hóa Bạn úp ....Mạnh mới chỉnh sửa và viết lại thành 1 File setup = VB6 Bạn tải về Test thử nha ....Viết Add-ins trên VB6 quá đơn giản mà ....Bảo mật code OK

1/ không phải dùng 1 phần mền của hãng khác Make nó lại thành file Setup ...mà mình làm trên VB6 từ A ...Z

2/ Không phải cài Vào Program nên không phải lo Rác hệ thống khi ko thích xài nữa vào Add-ins xóa nó đi là xong

3/ Mọi cái tự động hết chỉ 1 cái chuột và chọn Yes ( Nếu UAC ON)

4/ Bạn test thử và cho ý kiến chi tiết nha....

5/ Pass VBA Add-Ins là: 123

6/ Bạn nào Rảnh Mạnh nhờ Check dùm...

Xin cảm ơn
Hay! bác Mạnh có thể chia sẻ source code vb6 cho mình tham khảo được không vậy? Còn một cái nửa là có cách nào tạo Menu Excel trong VB6 luôn và không cần đến file xla không? tôi thấy cái GirdHightLighter của anh Duy Tuân đã làm như vậy (Để vào IDE không thấy file xla).
 
Hay! bác Mạnh có thể chia sẻ source code vb6 cho mình tham khảo được không vậy? Còn một cái nửa là có cách nào tạo Menu Excel trong VB6 luôn và không cần đến file xla không? tôi thấy cái GirdHightLighter của anh Duy Tuân đã làm như vậy (Để vào IDE không thấy file xla).
Bạn chạy OK không vây ....

Nếu là mình Ở cái Cty viết Code đó mình sẻ làm vây ...và tạo cho nó chạy theo ID máy (mã bản quyền)....Mỗi máy với 1 mã CDkey duy nhất ....vậy là ngon lành cành đào phải hông nào

Mình sẻ Viết các Version mới xong Úp lên Server ...Các máy khi kết nối Internet sẻ check Ver mới và update nó qua Internet luôn ( như mình đã từng làm và test trên MediaFile ...Bài đã Up GPE ...)

Còn nếu viết thành Add-Ins khi Excel load thì Xem Hình (Addin)...Nhưng Ko Áp dụng cho Code mã hóa được ...tại sao từ từ nghiên cứu nha...

Cách hay nhất là viết trên VB.net sẻ khỏi thấy Add-Ins luôn (chỉ thấy cái menu ở trên)... mà khi mở 1 file Excel mới lên là thấy nó có luôn và ALT+f11 trong đó trống trơn như file mới...

Còn code thì Bạn có sẳn rồi mà ....cứ vậy mà xài thôi...

Mình phải viết thêm mấy hàm nữa mới tao thành file Setup và xài được trên VB6....
 

File đính kèm

  • Capture.jpg
    Capture.jpg
    13.9 KB · Đọc: 173
Lần chỉnh sửa cuối:
Cái file setup đó là tui tham khảo từ trên mạng và cũng chưa hiểu rõ được nhiều lệnh trong đó nên bảo hướng dẫn thì thua thật, còn bạn muốn chia sẻ code thì mình đã chia sẽ rồi, cụ thể có rất nhiều bác xem code và chê khen đủ thứ rồi còn gì? đa số các code của tôi trên diễn đàn có đầy, nếu bạn cần thì để lại email tôi sẻ chia sẻ riêng cho bạn.
Bác rảnh chia sẻ code tui với nha ^^ #22
 
Bạn chạy OK không vây ....

Nếu là mình Ở cái Cty viết Code đó mình sẻ làm vây ...và tạo cho nó chạy theo ID máy (mã bản quyền)....Mỗi máy với 1 mã CDkey duy nhất ....vậy là ngon lành cành đào phải hông nào

Mình sẻ Viết các Version mới xong Úp lên Server ...Các máy khi kết nối Internet sẻ check Ver mới và update nó qua Internet luôn ( như mình đã từng làm và test trên MediaFile ...Bài đã Up GPE ...)

Còn nếu viết thành Add-Ins khi Excel load thì Xem Hình (Addin)...Nhưng Ko Áp dụng cho Code mã hóa được ...tại sao từ từ nghiên cứu nha...

Cách hay nhất là viết trên VB.net sẻ khỏi thấy Add-Ins luôn (chỉ thấy cái menu ở trên)... mà khi mở 1 file Excel mới lên là thấy nó có luôn và ALT+f11 trong đó trống trơn như file mới...

Còn code thì Bạn có sẳn rồi mà ....cứ vậy mà xài thôi...

Mình phải viết thêm mấy hàm nữa mới tao thành file Setup và xài được trên VB6....
Mình chưa làm được nên mới nhờ bạn chia sẻ, nếu bất tiện thì thôi vậy. Cho mình hỏi thêm một vấn đề nửa là bạn tạo thư viện DLL và sử dụng lệnh.
Mã:
    With CreateObject("EncryptVBAProject.VBAProject")
        Set .ExcelApp = Application
             .EncryptVBAProject
        Set .ExcelApp = Nothing
    End With
Mình không biết cách tạo như vậy bạn có thể hướng dẫn chút được không? Mình chỉ tạo và sử dụng bằng cách như phía dưới (chỉ muốn tìm hiểu cho biết thêm thôi). Một điều nửa là khi mình vào Tools \ References... và chọn tệp ExampleCAIProject.dll thì nó lại báo lỗi, nghĩa là nó chỉ sử dụng như cách của bạn còn cách sử dụng của tôi thì thua.
Mã:
        Dim ObjP As VnToolsExcel.Proc
        Set ObjP = New VnToolsExcel.Proc
        Set ObjP.ExcelApp = Application
            ObjP.ConvFont Selection, "VNI", False
        Set ObjP = Nothing
 
Mình chưa làm được nên mới nhờ bạn chia sẻ, nếu bất tiện thì thôi vậy. Cho mình hỏi thêm một vấn đề nửa là bạn tạo thư viện DLL và sử dụng lệnh.
Mã:
    With CreateObject("EncryptVBAProject.VBAProject")
        Set .ExcelApp = Application
             .EncryptVBAProject
        Set .ExcelApp = Nothing
    End With
Mình không biết cách tạo như vậy bạn có thể hướng dẫn chút được không? Mình chỉ tạo và sử dụng bằng cách như phía dưới (chỉ muốn tìm hiểu cho biết thêm thôi). Một điều nửa là khi mình vào Tools \ References... và chọn tệp ExampleCAIProject.dll thì nó lại báo lỗi, nghĩa là nó chỉ sử dụng như cách của bạn còn cách sử dụng của tôi thì thua.
Mã:
        Dim ObjP As VnToolsExcel.Proc
        Set ObjP = New VnToolsExcel.Proc
        Set ObjP.ExcelApp = Application
            ObjP.ConvFont Selection, "VNI", False
        Set ObjP = Nothing

Cách xài With CreateObject("EncryptVBAProject.VBAProject")

Này hơi dài dòng ...nếu 1 vài Sub thì ok còn nhiều sub thì xài như sau cho nó Gon
Mã:
Public DLL As Object
Public Sub Auto_Open()
    Set DLL = CreateObject("TenDLL.TenClass")
    Set DLL.ExcelApp = Application
End Sub


Public Sub Auto_Close()
    Set DLL = Nothing
End Sub


Public Sub Main()
    Path = ThisWorkbook.Path
    DataRange = "A6:J100"
    DLL.TenHam Path, DataRange, [A65536]
End Sub
Hay như Sau khi Check Tools...
Mã:
Sub Main()
    FilePath = "C:\Windows\System32\xx.dll"
    With New TenDLL.TenClass
        .TenHam (FilePath)
    End With
End Sub
1/ Còn Bạn muốn thấy được các tham số của Hàm thì Check Tools\references\...VBA

bạn chỉ cần Gõ DLL. (chấm) là nó xổ ra một list Hàm

2/ Nếu trong Class Bạn Viết Private Thì khỏi thấy ...Còn Public thì thấy tham số của Hàm

3/ Bạn nên viết Hàm tổng quát nhất trong File *.dll thì từ Excel Bạn truyền các tham số vào là nó chạy

Viết vậy là vì các tham số mình tùy thích mà thay đổi trên Excel khi keo nó chạy ...VD như sub Main ở trên

Còn bạn viết chạy lỗi mình phải thấy code mới nói được ....

Từ từ nghiên cứu nha...đơn giản thôi mà cố gắng Vượt qua cái cơ Bản VB6 kết nối với Excel thì Bạn sẻ thấy Thường thôi...

Thân
 
Lần chỉnh sửa cuối:
Các bạn đã từng thấy các đoạn code của bác Hữu Thắng hay chưa? nếu chưa thì có thể tham khảo ở hình dưới.
View attachment 162845
Vô tình lên mạng mình tìm thấy một tiện ích có chức năng tương tự như trên, nhưng nó còn một hạn chế là sau khi chuyển thì một số nút lệnh trên sheet sẽ gãy liên kết (ta phải làm lại công việc tạo lại các liên kết macro), và một lỗi nửa là các hàm API nó cũng chưa chuyển đúng (Mình đã chỉnh sửa lại bằng cách loại trừ các hàm API, trong file mình có ghi chú nếu trong code của bạn có các hàm AIP thì bạn phải khai báo trước khi cho nó chuyển đổi), bạn nào sử dụng và nghiên cứu tiếp để hoàn thiện add-ins. Trước hết bạn hãy mở tiện ích lên (nhớ giải nén thư mục tải về có 2 file, 1 file tiện ích và một file text) sau đó mở tiếp file excel có chắc macro bạn muốn mã hóa lên và chọn lệnh Encrypt VBA Project, sau đó chọn yes, chọn đường dẫn và gõ tên file cần lưu sau khi mã hóa. Đợi nó thực hiện chút xong nháy OK. Bây giờ bạn nhấn Alt+F11 để xem kết quả (Nhớ là phải xem lại có nút lệnh nào trên sheet sử dụng đến code VBA bạn phải sửa lại hết, do nó chỉ chuyển code còn Liên kết đến code cho các nút lệnh trên sheet không được cập nhật)

Lục lại Hồ sơ Mạnh thấy thay vì Xài Hàm API sau ...
Mã:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

1/ Thì ta xài Cách khác vậy ....chỉ 1 dòng code là có thể xài cho Win64 hay 32 bít ... và Bạn Mã hóa vô Tư không lo lỗi ... Cũng Run As được vậy ....--=0

2/ Nếu xài Hàm trên muốn xài cho Win64 và 32 thì viết quá dài dòng và hay Lỗi ... Mục đích là cũng Run As mà thôi ....Vậy ý bạn sao ta nghiên cứu tiếp ....--=0

3/ Mình có tham khảo Cách Run As cmd ở rất nhiều diễn đàn ....

Thấy họ chỉ xài API không thôi ...còn cách khác chưa thấy ...
Nhưng trên GPE đã có người viết code ko xài API mà vẫn Run As được ...code đang có trên GPE và Mã hóa OK ...+-+-+-+
 
Lần chỉnh sửa cuối:
Lục lại Hồ sơ Mạnh thấy thay vì Xài Hàm API sau ...
Mã:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

1/ Thì ta xài Cách khác vậy ....chỉ 1 dòng code là có thể xài cho Win64 hay 32 bít ... và Bạn Mã hóa vô Tư không lo lỗi ... Cũng Run As được vậy ....--=0

2/ Nếu xài Hàm trên muốn xài cho Win64 và 32 thì viết quá dài dòng và hay Lỗi ... Mục đích là cũng Run As mà thôi ....Vậy ý bạn sao ta nghiên cứu tiếp ....--=0

3/ Mình có tham khảo Cách Run As cmd ở rất nhiều diễn đàn ....

Thấy họ chỉ xài API không thôi ...còn cách khác chưa thấy ...
Nhưng trên GPE đã có người viết code ko xài API mà vẫn Run As được ...code đang có trên GPE và Mã hóa OK ...+-+-+-+
Nếu có cách sử dụng hàm API sử dụng cho bản 32bit và 64bit ngắn thì ngon quá, cái tiện ích mã hóa này thật sự khi mình sử dụng mới thấy có nhiều cái chưa được lắm, nếu bác KieuManh có nghiên cứu thì hoàn chỉnh cho anh em sử dụng luôn. Một cách suy nghĩ nửa nhưng khả năng không làm được, không biết bác KieuManh có nghiên cứu thì nghiên cứu tiếp luôn(nếu có hứng thú), đó là mã hóa xong thì tạo ra luôn file txt để chứa mã đã mã hóa, sau có cần thì dùng cái file txt chứa mã đó để dịch ngược(phải viết ra cái tiện ích dùng để dịch mã) lại code có được không?
À sẳn cho hỏi luôn là cái bản XLSafe Pro bác đưa lên sao mình không sử dụng được, mã hóa ra không đúng cái file của mình, vã lại không sử dụng được luôn.
Bác KieuManh chia sẻ chổ màu đỏ đó đi.
 
Lần chỉnh sửa cuối:
Nếu có cách sử dụng hàm API sử dụng cho bản 32bit và 64bit ngắn thì ngon quá, cái tiện ích mã hóa này thật sự khi mình sử dụng mới thấy có nhiều cái chưa được lắm, nếu bác KieuManh có nghiên cứu thì hoàn chỉnh cho anh em sử dụng luôn. Một cách suy nghĩ nửa nhưng khả năng không làm được, không biết bác KieuManh có nghiên cứu thì nghiên cứu tiếp luôn(nếu có hứng thú), đó là mã hóa xong thì tạo ra luôn file txt để chứa mã đã mã hóa, sau có cần thì dùng cái file txt chứa mã đó để dịch ngược(phải viết ra cái tiện ích dùng để dịch mã) lại code có được không?
À sẳn cho hỏi luôn là cái bản XLSafe Pro bác đưa lên sao mình không sử dụng được, mã hóa ra không đúng cái file của mình, vã lại không sử dụng được luôn.
Bác KieuManh chia sẻ chổ màu đỏ đó đi.

về bản XLSafe Pro cơ chế tạo CDkey đó là nó lấy ID ổ C xong cộng trừ nhân chia Linh xong rồi tào ra 1 cái CDkey Bản quyền theo máy ...Mỗi một máy chỉ có 1 CDkey duy nhất ...và mỗi lần Setup lại nó lại tạo ra 1 CDkey mới ...Nhưng nó còn nhiều khuyết điểm vụ này lắm ....Mạnh cài vào chủ yếu nghiên cứu code của nước ngoài nó viết sao Thôi .........1 Hoặc 2 Ngày nữa Mạnh Viết cho 1 Cái ****** mà Xài mà khám phá thuật toán mã hóa và tạo CDkey của nó

Còn về code Mã hóa để viết dich ngược lại thì mình chưa có khả năng ...nhưng mình thấy nó hay hay đã cải tiến và chỉnh sửa lại Mã hóa đươc mọi loại file office .xls,xlsm, xlsb ....và ko sử dụng .xla nữa mà chạy 1 sub trên bất cử File nào có code là nó mã hóa xong...

có thể thay thế Hàm API ShellExecute .. = Hàm sau

Mã:
Public Const uvwxyzabbbcbdb = 271, w = 203, ii = 72, oo = "E", pp = 0, aa = "6", ss = 7897, hh = 7921, jj = 10, kk = 227, ooo = "H", ppp = 7, uuu = "1", yyy = "7", rrr = True, ii_i_l_i_l_i_l = 7909, l_i_l_i_l_i_l_l_l_i_l_l_l = 7917, l_i_i_i_l_l_i_i_l_i_i_l_i = 7875, l_l_i_i_i_l_l_l_i_l_l_i_i = 253, l_l_l_i_l_l_l_i_l_l_i_i_l_l = 259, l_i_i_ii_i_l_l_l = 242, l_i_i_i_i_i_i_l_i_i_i = "V", xxx = "", ttt = "A", l_l_i_l_i_i_l_i = 7853, l_i_i_i_i_i_i_i_l_i_i_l_i_i = 7845, l_l_i_l_l_i_l_l_l_i_i_i_l = 236, vvv = "K", qqq = "x", ee = """", _
kim_l = "/", k = 1, xx = "R", sss = 6, ggg = False, hhh = "?", kim_i = "k", jjj = 7901, kkk = 226, lll = 7889, zzz = 243, l_i_i_l_l_l = "'", l_l_i_i_l_l_i_l_l_i_i_i_l_l = 7879, v = "v", l_i_i_i_l_l_l_i_i_i_l_i_l_l = "f", l_l_l_i_l_l_i_l_l_i_i_l_i = 7863, l_i_l_i_l_i = 273, l_i_i_l_i_l_l_i_l_l_l_i_l = 224, c = 432, l_l_i_l_i_l_l_l_i_i_l = 7841, l_i_l_i_i_l_i_i_i_i_i_i_l_i = "B", ccc = 225, yy = " ", iii = 244, eee = "h", mm = "2", nn = "3", z = "w", bb = "W", rr = "\", vv = ":", _
dd = "j", sh3 = "b", ff = "O", gg = "m", ww = "y", m = "F", n = "g", b = "n", l = "t", d = "p", sh2 = "i", s = "r", a = "c", p = "S", ll = "e", www = "u", zz = "d", qq = "o", cc = "M", x = "s", uu = "a", j = "C", xy = ".", g = "D", f = "T", sh1 = "L", h = "_", tt = "l", l_l_l_i_i_l_l_i_i_i_i_i = "I"
'Open Run File Bat
Public Sub ebfbgbhbibjbkblbmbnb()
Dim obpbqbrbsbtbubvbwbxb
obpbqbrbsbtbubvbwbxb = ThisWorkbook.Path & rr & xx & ll & n & g & sh1 & sh1 & xy & sh3 & uu & l
'sPath = ThisWorkbook.Path & "\REGDLL.BAT"
CreateObject(p & eee & ll & tt & tt & xy & ttt & d & d & tt & sh2 & a & uu & l & sh2 & qq & b).shellexecute obpbqbrbsbtbubvbwbxb, xxx, xxx, s & www & b & uu & x, k
End Sub
Code này Mình Học theo cách viết của Hữu Thắng đó ....hahahaha
 

File đính kèm

  • EncryptVBACode1.rar
    12.5 KB · Đọc: 142
Lần chỉnh sửa cuối:
Nhìn code bài 33 thấy gớm nhưng thật ra Mạnh viết thành 1 Hàm như sau cho Tiện sử dụng....Cơ bản là vậy ....tùy cách xài của Từng người

Open cmd vời Run As ....vấn đề còn lại tùy bạn truyền tham số vào keo nó làm cái gì cho Mình

Mã:
CreateObject("Shell.Application").ShellExecute "cmd.exe", 0, 0, "Runas", True

Chạy một ứng dụng khác với Run As
Mã:
Public Function OpenFileRunAs(ByVal strPath As String) As Boolean
    CreateObject("Shell.Application").ShellExecute strPath, "", "", "Runas", True
End Function


Public Sub Main_RunAdmin()
    Dim sPath As String
    sPath = ThisWorkbook.Path & "\REGDLL.BAT"
    OpenFileRunAs (sPath)
End Sub
đăng ký một File *dll hay OCX với Win

Mã:
Public Function RegisterRunAs(ByVal sPath As String) As Boolean
    CreateObject("Shell.Application").ShellExecute "cmd.exe", "/c Regsvr32 /s " & sPath, 0, "Runas", True
End Function


Public Sub Main_RegisterRunAs()
    Dim sPath As String
    sPath = "C:\Windows\System32\EncryptVBA.dll"
    RegisterRunAs (sPath)
End Sub

Và nhiều cách sử dụng nữa thùy theo như cầu của từng Người .....
 
Cách xài With CreateObject("EncryptVBAProject.VBAProject")

Này hơi dài dòng ...nếu 1 vài Sub thì ok còn nhiều sub thì xài như sau cho nó Gon
Mã:
Public DLL As Object
Public Sub Auto_Open()
    Set DLL = CreateObject("TenDLL.TenClass")
    Set DLL.ExcelApp = Application
End Sub


Public Sub Auto_Close()
    Set DLL = Nothing
End Sub


Public Sub Main()
    Path = ThisWorkbook.Path
    DataRange = "A6:J100"
    DLL.TenHam Path, DataRange, [A65536]
End Sub
Hay như Sau khi Check Tools...
Mã:
Sub Main()
    FilePath = "C:\Windows\System32\xx.dll"
    With New TenDLL.TenClass
        .TenHam (FilePath)
    End With
End Sub
1/ Còn Bạn muốn thấy được các tham số của Hàm thì Check Tools\references\...VBA

bạn chỉ cần Gõ DLL. (chấm) là nó xổ ra một list Hàm

2/ Nếu trong Class Bạn Viết Private Thì khỏi thấy ...Còn Public thì thấy tham số của Hàm

3/ Bạn nên viết Hàm tổng quát nhất trong File *.dll thì từ Excel Bạn truyền các tham số vào là nó chạy

Viết vậy là vì các tham số mình tùy thích mà thay đổi trên Excel khi keo nó chạy ...VD như sub Main ở trên

Còn bạn viết chạy lỗi mình phải thấy code mới nói được ....

Từ từ nghiên cứu nha...đơn giản thôi mà cố gắng Vượt qua cái cơ Bản VB6 kết nối với Excel thì Bạn sẻ thấy Thường thôi...

Thân
Xin lỗi anh cho em hỏi khi sử dụng Public Sub trong DLL thì nó có hiện ra cái bảng để chọn các sub. Còn khi sử dụng Public Function thì nó không hiện nhưng khi đánh lệnh trong vba thì nó vẫn chạy. !$@!!
 
Xin lỗi anh cho em hỏi khi sử dụng Public Sub trong DLL thì nó có hiện ra cái bảng để chọn các sub. Còn khi sử dụng Public Function thì nó không hiện nhưng khi đánh lệnh trong vba thì nó vẫn chạy. !$@!!
thì bạn muốn nó chạy thì nó chạy ...còn ko thì nó ko chạy

quan trọng là code trong file *,dll bạn viết sao
 
Tự em đang mò DLL. ý em là trong File DLL có các Public Sub
thì khi qua excel khai báo
Dim UDF As Congthuc.LienKetExcel
UDF.ShowMessageExcel
nó hiện cái bảng này
Congthuc.jpg
mà sao nó không hiện các Public Function nhỉ
 
bạn up code VB6 lên cho mình dòm 1 cái được không
Vang day anh, em copy code cua anh Nguyen Duy Tuan va Code trong lập trình DLL.

Mã:
Option Explicit 'Yêu c?u toàn b? bi?n ph?i khai báo

'************************************************* ************
'Khai báo bi?n Class (l?p) ? du?i
'************************************************* ************
'Ð?i tu?ng tham chi?u s? g?i ?ng d?ng Excel
Private mxlApp As Excel.Application 'oApp As Excel.Application
'
Public WithEvents WB As Excel.Workbook
'local variable(s) to hold property value(s)
Private mvarVung_bi_khoa As Excel.Range   'local copy
'************************************************* ************
'Ð?t thu?c tính c?a Class
'************************************************* ************
Public Property Set ExcelApp(ByRef xlApp As Excel.Application)
Set mxlApp = xlApp
End Property
Public Property Set Vung_bi_khoa(ByVal vData As Excel.Range)
    Set mvarVung_bi_khoa = vData
End Property
Public Property Get Vung_bi_khoa() As Excel.Range
    Set Vung_bi_khoa = mvarVung_bi_khoa
End Property
Private Sub Destroy()
    Set WB = Nothing
    Set mxlApp = Nothing
    MsgBox "Hen gap lai cac ban trong de tai khac", vbInformation, "Tac gia: Nguyen Duy Tuan - EMail: TuanKTCDCN@yahoo.com"
End Sub
'************************************************* ************
'T?o s? ki?n c?a Class sau khi k?t thúc công vi?c
'************************************************* ************
Private Sub Class_Terminate()
'Destroy
Set WB = Nothing
Set mxlApp = Nothing
End Sub
' Chay Dll tren Worb dang mo
Public Sub Create(ByRef ExcelApplication As Excel.Application, ByVal WorkbookName As Variant)
    If mxlApp Is Nothing Then
        Set mxlApp = New Excel.Application
        Set mxlApp = ExcelApplication
    End If
    If Not mxlApp Is Nothing And WorkbookName <> "" Then
        Set WB = mxlApp.Workbooks(WorkbookName)
    End If
If WB Is Nothing Then MsgBox "Khong the ket noi duoc voi DLL", vbCritical, "Loi tao DLL"
End Sub
'
Public Function TachHoTen(ByVal HoVaTen As String, Optional TachTen As Boolean = True) As String
Dim Pos_Right As Integer


If HoVaTen = "" Then GoTo EndFunc
HoVaTen = Trim(HoVaTen) 'Xoá khoa?ng tro^'ng hai bên cu?a "HoVaTen"
Pos_Right = InStrRev(HoVaTen, " ")
'Kie^?m tra ho+.p le^.
If Pos_Right = 0 Or Pos_Right - 1 < 0 Or Pos_Right + 1 > Len(HoVaTen) Then
    GoTo EndFunc:
End If


If TachTen Then
    TachHoTen = Mid(HoVaTen, Pos_Right + 1)
Else
    TachHoTen = Left(HoVaTen, Pos_Right - 1)
End If


EndFunc:
End Function
'************************************************* ************
'Các phuong th?c trong Class ho?t d?ng
'************************************************* ************
Public Sub ShowMessageExcel()
MsgBox "Hello World!", vbInformation
End Sub


Public Sub WriteMessageExcel()
mxlApp.ActiveCell.Value = "Hello World!"
End Sub

Không biết khai báo nhu vay đủ chưa

Recent.jpg
 
Lần chỉnh sửa cuối:
Vang day anh, em copy code cua anh Nguyen Duy Tuan va Code trong lập trình DLL.

Mã:
Option Explicit 'Yêu c?u toàn b? bi?n ph?i khai báo

'************************************************* ************
'Khai báo bi?n Class (l?p) ? du?i
'************************************************* ************
'Ð?i tu?ng tham chi?u s? g?i ?ng d?ng Excel
Private mxlApp As Excel.Application 'oApp As Excel.Application
'
Public WithEvents WB As Excel.Workbook
'local variable(s) to hold property value(s)
Private mvarVung_bi_khoa As Excel.Range   'local copy
'************************************************* ************
'Ð?t thu?c tính c?a Class
'************************************************* ************
Public Property Set ExcelApp(ByRef xlApp As Excel.Application)
Set mxlApp = xlApp
End Property
Public Property Set Vung_bi_khoa(ByVal vData As Excel.Range)
    Set mvarVung_bi_khoa = vData
End Property
Public Property Get Vung_bi_khoa() As Excel.Range
    Set Vung_bi_khoa = mvarVung_bi_khoa
End Property
Private Sub Destroy()
    Set WB = Nothing
    Set mxlApp = Nothing
    MsgBox "Hen gap lai cac ban trong de tai khac", vbInformation, "Tac gia: Nguyen Duy Tuan - EMail: TuanKTCDCN@yahoo.com"
End Sub
'************************************************* ************
'T?o s? ki?n c?a Class sau khi k?t thúc công vi?c
'************************************************* ************
Private Sub Class_Terminate()
'Destroy
Set WB = Nothing
Set mxlApp = Nothing
End Sub
' Chay Dll tren Worb dang mo
Public Sub Create(ByRef ExcelApplication As Excel.Application, ByVal WorkbookName As Variant)
    If mxlApp Is Nothing Then
        Set mxlApp = New Excel.Application
        Set mxlApp = ExcelApplication
    End If
    If Not mxlApp Is Nothing And WorkbookName <> "" Then
        Set WB = mxlApp.Workbooks(WorkbookName)
    End If
If WB Is Nothing Then MsgBox "Khong the ket noi duoc voi DLL", vbCritical, "Loi tao DLL"
End Sub
'
Public Function TachHoTen(ByVal HoVaTen As String, Optional TachTen As Boolean = True) As String
Dim Pos_Right As Integer


If HoVaTen = "" Then GoTo EndFunc
HoVaTen = Trim(HoVaTen) 'Xoá khoa?ng tro^'ng hai bên cu?a "HoVaTen"
Pos_Right = InStrRev(HoVaTen, " ")
'Kie^?m tra ho+.p le^.
If Pos_Right = 0 Or Pos_Right - 1 < 0 Or Pos_Right + 1 > Len(HoVaTen) Then
    GoTo EndFunc:
End If


If TachTen Then
    TachHoTen = Mid(HoVaTen, Pos_Right + 1)
Else
    TachHoTen = Left(HoVaTen, Pos_Right - 1)
End If


EndFunc:
End Function
'************************************************* ************
'Các phuong th?c trong Class ho?t d?ng
'************************************************* ************
Public Sub ShowMessageExcel()
MsgBox "Hello World!", vbInformation
End Sub


Public Sub WriteMessageExcel()
mxlApp.ActiveCell.Value = "Hello World!"
End Sub

Không biết khai báo nhu vay đủ chưa

View attachment 169286

Bạn Copy code đó ở đâu ...của ai thì tốt nhất hỏi người đó ....code két nó nhiều trường phái

Mình là một tay amater hay phá phách ko thể phán được ......ngộ nhỡ phán ẩu gặp đông xưởng hay Hòa thân thì Mình toi Mạng ...Mới sang nay mở mắt dính rồi hết Hồn..!$@!!

Cho mình cáo lỗi và xin rút lui vậy
 
Web KT
Back
Top Bottom