#LabX - Addin khóa và mở khóa mã nguồn vbaProject (1 người xem)

  • Thread starter Thread starter thaipv
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

thaipv

XA Project
Tham gia
18/5/14
Bài viết
158
Được thích
243
Giới tính
Nam
Gửi tặng các bạn addin #LabX giúp khóa và mở khóa mã nguồn vbaProject :
----------------------------------------
+ Mở khóa các dự án vbaProject có bảo vệ mật khẩu bằng kỹ thuật hook (sưu tầm, không rõ tác giả).
+ Mở khóa các dự án vbaProject bằng kỹ thuật chỉnh sửa tập tin nhị phân (bao gồm một số dự án dạng 'Project is unviewable').
----------------------------------------
+ Ẩn tất cả các module (cơ bản) trong dự án bằng kỹ thuật chỉnh sửa tập tin nhị phân.
+ Khóa nhanh mã nguồn dạng 'Project is unviewable'.
----------------------------------------
Mục đích của addin này là để kiểm tra bảo mật mã nguồn, không có mục đích để bẻ khóa mã nguồn của người khác.
 

File đính kèm

Lần chỉnh sửa cuối:
Gửi tặng các bạn addin #LabX giúp khóa và mở khóa mã nguồn vbaProject :
+ Mở khóa các dự án vbaProject có bảo vệ mật khẩu bằng kỹ thuật hook (tác giả @siwtom).
Tôi chưa tải về đọc, nhưng chắc chắn tôi không phải là tác giả đâu :D
 
Gửi tặng các bạn addin #LabX giúp khóa và mở khóa mã nguồn vbaProject :
+ Mở khóa các dự án vbaProject có bảo vệ mật khẩu bằng kỹ thuật hook (tác giả @siwtom).
+ Mở khóa các dự án vbaProject bằng kỹ thuật chỉnh sửa tập tin nhị phân (bao gồm một số dự án dạng 'Project is unviewable').
+ Khóa nhanh mã nguồn dạng 'Project is unviewable'.

Mục đích của addin này là để kiểm tra bảo mật mã nguồn, không có mục đích để bẻ khóa mã nguồn của người khác.
BỊ LỖI THEO HÌNH đang bận quá chưa coi chi tiết lỗi saoCapture.PNG
 
Lần chỉnh sửa cuối:
Addin này đã được mã hóa nên không thể thêm vào theo cách đó được nha. Bạn chỉ cần mở lên và dùng thôi nhé.
(Mã nguồn tôi cũng đã cập nhật ở bài #1)
Mới thử Lock code cho File *.xlsb lỗi sau
bận quá lướt qua chút mai mốt coi lại

Cảm ơn Bạn
mmm.PNG
 
gửi lộn ....xin lỗi
 
Cuối cùng các bác tự đập bát cơm của mọi người đang viết code vba chăng? Thế này các lớp học VBA đào tạo Excel của GPE đi tong hết - vì cần học cái khác, VBA đâu bảo mật
 
Lỗi này thuộc về chương trình giải nén, tôi dùng Windows 7 (64bit) không thấy xuất hiện lỗi như hình. Các bạn khác test thử xem sao nhé.
Thử vầy xem sao nhé:
1/ File cần lock Code trong D:\Test\testlock.xlsb =============> OK
2/ File cần lock Code trong D:\testlock.xlsb =============> lỗi ?!
3/ Tên File : KieuManh.xlsb =============> OK
4/ Tên File : Kieu Manh.xlsb =============> Lỗi ?!
5/ Tên Folder là tiếng Việt có dấu .... Tại sao sử dụng Fso mà không xử luôn vụ này ?!

6/ Nhiều thứ nữa mai mốt rảnh Mạnh quậy cho
 
Lần chỉnh sửa cuối:
Thử vầy xem sao nhé:
1/ File cần lock Code trong D:\Test\testlock.xlsb =============> OK
2/ File cần lock Code trong D:\testlock.xlsb =============> lỗi ?!
3/ Tên File : KieuManh.xlsb =============> OK
4/ Tên File : Kieu Manh.xlsb =============> Lỗi ?!
5/ Tên Folder là tiếng Việt có dấu .... Tại sao sử dụng Fso mà không xử luôn vụ này ?!

6/ Nhiều thứ nữa mai mốt rảnh Mạnh quậy cho
Trong Sub 'LockCode' (của module 'libLocker') tìm dòng :
PHP:
strFilePath = .GetParentFolderName(strFullName) & "\"
thay thế bằng 2 dòng sau :
PHP:
strFilePath = .GetParentFolderName(strFullName)
If Right$(strFilePath, 1) <> "\" Then strFilePath = strFilePath & "\"
(Các bạn xem mã nguồn tôi tải lại ở bài #1 và test tiếp nhé)
 
Trong Sub 'LockCode' (của module 'libLocker') tìm dòng :
PHP:
strFilePath = .GetParentFolderName(strFullName) & "\"
thay thế bằng 2 dòng sau :
PHP:
strFilePath = .GetParentFolderName(strFullName)
If Right$(strFilePath, 1) <> "\" Then strFilePath = strFilePath & "\"
(Các bạn xem mã nguồn tôi tải lại ở bài #1 và test tiếp nhé)
Trong cái Sub FileRename ... nếu là Mạnh viết xài Fso rồi thì sẻ làm như sau:
1/ Bỏ cái Hàm Dir kia đi thay thế vô đó là If Fso.FileExists(FilePath) Then ... vì hàm Dir này folder là tiếng viêt có dấu là lỗi
2/ Sử dụng ShortName để xử lý tên file là tiếng việt có dấu và tên file có khoãng cách ...
3/ Sử dụng ShortPath để xử lý Folder là tiếng việt có dấu ...

vậy là tạm ok xử lý được mấy cái lỗi thông thường
 
Trong cái Sub FileRename ... nếu là Mạnh viết xài Fso rồi thì sẻ làm như sau:
1/ Bỏ cái Hàm Dir kia đi thay thế vô đó là If Fso.FileExists(FilePath) Then ... vì hàm Dir này folder là tiếng viêt có dấu là lỗi
2/ Sử dụng ShortName để xử lý tên file là tiếng việt có dấu và tên file có khoãng cách ...
3/ Sử dụng ShortPath để xử lý Folder là tiếng việt có dấu ...

vậy là tạm ok xử lý được mấy cái lỗi thông thường
Tôi đã bỏ luôn cái Sub FileRename.... Tuy nhiên vẫn dính lỗi với thư mục tiếng Việt ở câu lệnh :
PHP:
Open strBinaryFile For Binary Access Read Write As #F1
(trong class cBinEditor). Các bạn có cách nào xử lý không nhỉ ?
 

File đính kèm

Cuối cùng các bác tự đập bát cơm của mọi người đang viết code vba chăng? Thế này các lớp học VBA đào tạo Excel của GPE đi tong hết - vì cần học cái khác, VBA đâu bảo mật
Bác thử mở khóa tập tin 'LabX_Version1.0.xlam' ở bài #1 xem nhé !
 
Các form giao diện của bạn khi xài trên laptop hoặc những máy có độ phân giải 'size text' không phải 100% ( lthường các laptop có màn hình nhỏ nhưng card đồ họa cao thì nó phải 125% nhìn mới ổn ) thì nó không hoạt động chính xác. Có form sẽ mất khúc dưới, có form sẽ mất bên trái, có form mất bên phải 1 ít.
 
Các form giao diện của bạn khi xài trên laptop hoặc những máy có độ phân giải 'size text' không phải 100% ( lthường các laptop có màn hình nhỏ nhưng card đồ họa cao thì nó phải 125% nhìn mới ổn ) thì nó không hoạt động chính xác. Có form sẽ mất khúc dưới, có form sẽ mất bên trái, có form mất bên phải 1 ít.
Tôi cũng chưa có điều kiện để test những trường hợp này, chỉ là tham khảo code và đoán để viết thôi, bạn nào quan tâm có thể chỉnh code trong:
PHP:
Friend Sub Polygon(PointL As Long, PointT As Long, PointW As Long, PointH As Long)
    Dim PointToPixelX#, PointToPixelY#, myPoint(4) As POINTAPI
    Const POINTSPERINCH = 72, LOGPIXELSX = 88, LOGPIXELSY = 90 'Logical pixels/inch in X,Y
    
    #If VBA7 Then
        Dim hDC As LongPtr, DrawRegion As LongPtr
    #Else
        Dim hDC As Long, DrawRegion As Long
    #End If
    
    hDC = GetDC(0)
    PointToPixelX = GetDeviceCaps(hDC, LOGPIXELSX) / POINTSPERINCH
    PointToPixelY = GetDeviceCaps(hDC, LOGPIXELSY) / POINTSPERINCH
                                                                    
    myPoint(0).x = PointToPixelX * PointL               '    Form_______________________x__
    myPoint(1).x = PointToPixelX * PointL               '    |     _________________
    myPoint(2).x = PointToPixelX * (PointL + PointW)    '    |    A                E \
    myPoint(3).x = PointToPixelX * (PointL + PointW)    '    |    |                   \
                                                        '    |    |     POLYGON       /D
    myPoint(0).Y = PointToPixelY * PointT               '    |    |                  /
    myPoint(1).Y = PointToPixelY * (PointT + PointH)    '   y|    B_________________/C
    myPoint(2).Y = PointToPixelY * (PointT + PointH)    '    |
    myPoint(3).Y = PointToPixelY * PointT
                                                                    
    DrawRegion = CreatePolygonRgn(myPoint(0), UBound(myPoint), 1)
    Call SetWindowRgn(myHWND, DrawRegion, True)
    Call DeleteObject(DrawRegion)
End Sub
Của class 'cFormUI' và những code trong UserForm.

Tuy nhiên, những code này thực sự chỉ để trang trí thôi. Nếu nó lỗi nhiều quá thì ta bỏ luôn, dùng lại hàm Msgbox của bác Bill (hiện tập tin này đang dùng hàm tự tạo MessageBin)
 
Đúng là mình đã từ bỏ, chơi hẳn 'hàng' của a Sốp cho mau lẹ, phù hợp nhiều tình huống.
 
Tôi đã bỏ luôn cái Sub FileRename.... Tuy nhiên vẫn dính lỗi với thư mục tiếng Việt ở câu lệnh :
Open strBinaryFile For Binary Access Read Write As #F1
(trong class cBinEditor). Các bạn có cách nào xử lý không nhỉ ?

Tôi không có nhu cầu nên cũng chả tải tập tin làm gì. Những nếu đường dẫn có ký tự unicode, vd. tiếng Việt, thì sẽ có lỗi. Open trong VBA không mở được tập tin với đường dẫn unicode.
Mạnh đã gợi ý rồi. Bạn hãy thử lấy đường dẫn ngắn từ đường dẫn full kia.
 
Trong cái Sub FileRename ... nếu là Mạnh viết xài Fso rồi thì sẻ làm như sau:
1/ Bỏ cái Hàm Dir kia đi thay thế vô đó là If Fso.FileExists(FilePath) Then ... vì hàm Dir này folder là tiếng viêt có dấu là lỗi
2/ Sử dụng ShortName để xử lý tên file là tiếng việt có dấu và tên file có khoãng cách ...
3/ Sử dụng ShortPath để xử lý Folder là tiếng việt có dấu ...

vậy là tạm ok xử lý được mấy cái lỗi thông thường
Kiều Mạnh hay bạn nào sửa được up lên cho mọi người coi với, tôi xin chịu nhé.
(Tập dưới đây dùng được với các file có đuôi *.bin |*.xls | *.xla,
Chưa áp dụng được với các file có đuôi *.xlsm | *.xlam | *xlsb)
 

File đính kèm

Tôi đã bỏ luôn cái Sub FileRename.... Tuy nhiên vẫn dính lỗi với thư mục tiếng Việt ở câu lệnh :
PHP:
Open strBinaryFile For Binary Access Read Write As #F1
(trong class cBinEditor). Các bạn có cách nào xử lý không nhỉ ?
1/ Mạnh đang thắc mắc 1 chút tại sao File của Bài này lại không Unlock được cho file bài 1
2/ Lỗi đó không phải do sub đó mà do tiếng Việt có dấu
3/ tất cả lỗi đó Mạnh đã xử lý tốt ... code còn dài dòng quá đang chỉnh lại mai úp cho
4/ File *.xlam bài 1 có gì đó rất khác với sử dụng code bài này lock ?!
 
1/ Mạnh đang thắc mắc 1 chút tại sao File của Bài này lại không Unlock được cho file bài 1
Trong class cBinEditor ở bài 1 có code
PHP:
If strTemp = "CMG=""" Or strTemp = "DPB=""" Or strTemp Like "GC=""*" Then
Tức là có các chuỗi CMG="... Do vậy khi mở khóa / khóa thì addin sẽ sửa những mã này nên file sẽ bị lỗi (hoặc thiếu code...)
2/ Lỗi đó không phải do sub đó mà do tiếng Việt có dấu
Tôi cũng biết là lỗi do tiếng Việt có dấu nhưng vẫn chưa có cách xử lý với việc nén (class cArchiver). Có lẽ phải đổi thuật toán ở sub 'LockCode'
3/ tất cả lỗi đó Mạnh đã xử lý tốt ... code còn dài dòng quá đang chỉnh lại mai úp cho
Hóng
4/ File *.xlam bài 1 có gì đó rất khác với sử dụng code bài này lock ?!
File *.xlam ở bài #1 cũng là loại file ở chủ đề
https://www.giaiphapexcel.com/diendan/threads/mở-vba-project-có-password-mà-không-cần-làm-gì-cả.132525/ (bài #24)
Loại file này đã được mã hóa (nên không thể giải nén) -> không thể dùng addin này để mở khóa được.
 
Lần chỉnh sửa cuối:
Mới thử Lock code cho File *.xlsb lỗi sau
bận quá lướt qua chút mai mốt coi lại

Cảm ơn Bạn
View attachment 196631
Theo như tôi được biết thì file XLSB không thể giải nén được (chỉ XLSX và XLSM mới giải nén được). Vậy nên nếu file XLSB được khóa theo kiểu Project Unview mà dùng cách giải nén để thay đổi nội dụng bên trong là thua
 
Theo như tôi được biết thì file XLSB không thể giải nén được (chỉ XLSX và XLSM mới giải nén được). Vậy nên nếu file XLSB được khóa theo kiểu Project Unview mà dùng cách giải nén để thay đổi nội dụng bên trong là thua
Em làm trên Máy Em thấy ok ... nhưng cũng chỉ làm cho vui và nghiên cứu là chính thôi anh...
Code sau Em học phần chính từ Anh ở thớt vọc chơi Với *.Zip
mã hóa được như file *.xlam bài 1 thì mới tạm ok ... hy vọng các bạn viết thêm code mã hóa như vậy
To @thaipv ... Mạnh úp File các Bạn test và phát triển thêm ... cơ bản xử lý là vậy còn lại tùy biến ở khả năng của từng người
Mã:
Rem ==========
Private Sub LockUnlocProject(ByVal strBinaryFile As String, ByVal LockUlock As Boolean)
    If LockUlock Then
        Call ChangeKeys(strBinaryFile, True)
    Else
        Call ChangeKeys(strBinaryFile, False)
    End If
End Sub
Rem ==========
Private Function FixPath(ByVal sPath As String) As String
    FixPath = sPath & IIf(Right(sPath, 1) <> "\", "\", "")
End Function
Rem ==========
Private Sub ChangeKeys(ByRef strBinaryFile As Variant, ByRef isLockView As Boolean)
    Dim F1 As Long, i As Long, lngCount As Long, bytTemp As Byte, strTemp As String * 5
  
Read_Binary:
    F1 = FreeFile
    Open strBinaryFile For Binary Access Read Write As #F1
        Do
            i = i + 1
            Get #F1, i, bytTemp
            If bytTemp = 67 Or bytTemp = 68 Or bytTemp = 71 Then
                Get #F1, i, strTemp
                If strTemp = "CMG=""" Or strTemp = "DPB=""" Or strTemp Like "GC=""*" Then
                    lngCount = lngCount + 1
                    If isLockView Then GoSub Change_Binary Else GoSub Clear_Binary
                End If
            End If
        Loop While Not EOF(F1)
        GoTo Finally
      
Clear_Binary:
        For i = Loc(F1) - 4 To LOF(F1)
            Get #F1, i, bytTemp
            Put #F1, i, CByte(10) 'https://stackoverflow.com/questions/23590507
            If bytTemp = 13 Then Exit For
        Next
        Return
      
Change_Binary:
        For i = Loc(F1) + 1 To LOF(F1)
            Get #F1, i, bytTemp
            If bytTemp = 34 Then
                Exit For
            ElseIf bytTemp > 64 And bytTemp < 70 Then '{ABCDEF}\F
                Put #F1, i, CByte(bytTemp + 1)
            End If
        Next
        Return
      
Finally:
    Close #F1
'    If lngCount = 3 Or lngCount = 6 Then
'        If strLanguage = "en" Then
'            strMessage = "Wonderful!" & vbNewLine & vbNewLine & _
'                         "The source codes of your file is " & _
'                         IIf(isLockView, "lock.", "unlock.")
'        Else
'            strMessage = UnicodeVBA$("Tuyeejt vowfi !" & vbNewLine & vbNewLine & _
'                         "Max nguoofn taajp tin bajn yeeu caafu ddax dduwowjc " & _
'                         IIf(isLockView, "khosa.", "mowr."))
'        End If
'        isFinished = True
'    Else
'        If strLanguage = "en" Then
'            strMessage = "Hmm, It is too embarrassing!" & vbNewLine & vbNewLine & _
'                         "Something went wrong so LabX can not finish your work."
'        Else
'            strMessage = UnicodeVBA$("Huwfm," & vbNewLine & vbNewLine & _
'                         "Cos ddieefu gif ddos sai sai neen LabX khoong theer " & _
'                         "hoafn thafnh coong vieejc cho bajn.")
'        End If
'        isFinished = False
'    End If
End Sub
Rem ==========
Private Sub LockUnlockVBA(ByVal FileExcel As String, ByVal isLockView As Boolean)
    Dim Fso As Object, ObjShell As Object, TempPath
    Dim FileName_Path, ZipFile, vbaProject As String
    Dim sPath As String, NewFile As String, OldFile As String
    Dim strFileName, strFileType, strFileNote
  
    Set ObjShell = CreateObject("Shell.Application")
    Set Fso = CreateObject("Scripting.FileSystemObject")
    If Fso.FileExists(FileExcel) = False Then Exit Sub
  
    sPath = Fso.GetFile(FileExcel).ShortPath                                ''Lay ShortPath cua File
    FileName_Path = FixPath(Fso.GetFile(sPath).ParentFolder)                ''Lay ShortPath cua Folder .. xu ly loi khi Folder la Tieng Viet co dau
    Rem === Khai bao Thong tin Su dung
    TempPath = FixPath(Fso.GetSpecialFolder(2))                             ''Lay Folder Rac
    vbaProject = TempPath & "vbaProject.bin"
    strFileName = Fso.GetBaseName(FileExcel)
    strFileType = "." & Fso.GetExtensionName(FileExcel)
    strFileNote = IIf(isLockView, "_Unviewable", "_Unlock")
    NewFile = TempPath & strFileName & strFileNote & strFileType
    OldFile = FileName_Path & strFileName & strFileNote & strFileType
    ZipFile = NewFile & ".zip"
    Rem === Xoa het File cu neu co
    If Fso.FileExists(OldFile) Then Fso.DeleteFile (OldFile)
    If Fso.FileExists(NewFile) Then Fso.DeleteFile (NewFile)
    If Fso.FileExists(ZipFile) Then Fso.DeleteFile (ZipFile)
    Rem === Copy File Moi
    Fso.CopyFile FileExcel, NewFile, True
  
    If Fso.FileExists(NewFile) Then
        Fso.MoveFile NewFile, ZipFile
        Rem Cut File vbaProject.bin Trong *.zip ra ngoai Folder
        ObjShell.Namespace(TempPath).movehere ObjShell.Namespace(ZipFile).items.Item("xl\vbaProject.bin")
        Do While ObjShell.Namespace(ZipFile & "\xl\") Is Nothing
            Application.Wait (Now + 0.000005)                               ''Cho xu ly cho toi khi ket thuc sao 0.5 giay
        Loop
      
        Call LockUnlocProject(vbaProject, isLockView)                       ''Xu ly ma hoa chuoi trong File vbaProject.bin
        Rem Cut File vbaProject.bin Vao File *.zip
        ObjShell.Namespace(ZipFile & "\xl\").movehere ObjShell.Namespace(TempPath).items.Item("vbaProject.bin")
        Do Until Not Fso.FileExists(vbaProject)
            Application.Wait (Now + 0.000005)
        Loop
      
        Fso.MoveFile ZipFile, NewFile
        Do Until Not Fso.FileExists(ZipFile)
           Application.Wait (Now + 0.000002)
        Loop
      
        Fso.MoveFile NewFile, FileName_Path
        MsgBox "done", 64, "Thông Báo"
    End If
    Set ObjShell = Nothing
    Set Fso = Nothing
End Sub
Rem ==========
Sub Lock_vbaProject()
    Dim vFile
    vFile = Application.GetOpenFilename("All Files, *.xls; *.xlsx; *.xlsm; *.xlsb;*.xla; *.xlam")
    ''vFile = FilePicker()
    If TypeName(vFile) = "String" Then Call LockUnlockVBA(vFile, True)
End Sub
Rem ==========
Sub UnLock_vbaProject()
    Dim vFile
    vFile = Application.GetOpenFilename("All Files, *.xls; *.xlsx; *.xlsm; *.xlsb;*.xla; *.xlam")
    ''vFile = FilePicker()
    If TypeName(vFile) = "String" Then Call LockUnlockVBA(vFile, False)
End Sub
Rem ==========
 

File đính kèm

Lần chỉnh sửa cuối:
Thế bạn đã thử với file XLSB được khóa theo dạng Project Unview chưa? (không phải là khóa password VBA nha)
có lẻ vầy Anh nói một đường em nói 1 kiểu chi tiết vầy
1/ Nếu sử dung file em úp bài 24 Or bài 1 để khóa 1 file *.xlsb thì chạy xong kiểm tra File thấy OK
2/ Cũng sử dung File úp bài 24 Or bài 1 để mở 1 file dạng Project Unview do chính nó khóa mở ra thì thấy ok
3/ Còn mở file dạng Project Unview do người khác khóa là .................. Tịt ........:p
4/ Còn lại em chưa thử hết ... từ từ tính tiếp
 
3/ Còn mở file dạng Project Unview do người khác khóa là .................. Tịt ........:p
Thì tôi đang nói đến vấn đề này đây!
Nói thì nói thế thôi chứ đã muốn phá thì có vô vàn cách, cùng lắm tôi SaveAs xlsb thành xlsm, sau đó mới chạy code là được chứ gì
 
+ Tôi đã sửa vài lỗi và áp dụng theo thuật toán của @kieu manh về nén và giải nén (trước đây là nén và giải nén cả tập zip, giờ đây chỉ nén và giải nén file cần thiết trong tập zip).
+ Thêm chức năng ẩn mọi module của dự án.
(Các bạn tải về ở bài #1 mà xem nhé)
 
+ Tôi đã sửa vài lỗi và áp dụng theo thuật toán của @kieu manh về nén và giải nén (trước đây là nén và giải nén cả tập zip, giờ đây chỉ nén và giải nén file cần thiết trong tập zip).
+ Thêm chức năng ẩn mọi module của dự án.
(Các bạn tải về ở bài #1 mà xem nhé)
khóa Module rồi sao không code thêm chút nữa mở luôn khóa Module vậy
Hiểu được nguyên lý rồi thì code ko khó lắm mà
 
khóa Module rồi sao không code thêm chút nữa mở luôn khóa Module vậy
Hiểu được nguyên lý rồi thì code ko khó lắm mà
Việc làm hiện lại được module đã ẩn cũng không phải là việc dễ dàng nhé :
1. Khi ẩn module, các vị trí để ghi tên module (vị trí các byte) đều bị thay đổi là 10 (tức là 0A trong hệ thập lục phân), do đó ta không biết chính xác nó ở vị trí nào để có thể sửa lại.
2. Giả sử ta có thể biết được vị trí các byte ghi tên module, ta cũng không biết được module tên là gì để sửa. (Nếu sửa sai tên, module mới sẽ xuất hiện trong dự án nhưng bạn cũng không thể mở module này ra được, nó giống như là 1 module ảo mà thôi).
3. Nếu sau khi ẩn module, người dùng mở tập excel lên và lưu lại, những vị trí lưu tên module (ta đã đổi thành 0A) sẽ bị excel xóa đi > ta hoàn toàn không thể biết được vị trí các byte ghi tên module để sửa lại.
(Các bạn xem hình nhé)
HideModules_Binary.png
--------------------------------------------------------------
Cách làm hiện lại module đã ẩn của dự án tôi cũng đã trình bày ở bài #64 của chủ đề này : https://www.giaiphapexcel.com/diendan/threads/3.132525/page-4
 
+ Tôi đã sửa vài lỗi và áp dụng theo thuật toán của @kieu manh về nén và giải nén (trước đây là nén và giải nén cả tập zip, giờ đây chỉ nén và giải nén file cần thiết trong tập zip).
+ Thêm chức năng ẩn mọi module của dự án.
(Các bạn tải về ở bài #1 mà xem nhé)
Thử với File có Class Module xem điều gì sẻ đến ....
 
Mình dùng Office 2016 x64 không thể Hook được cửa số Password VBE
 
Mình dùng Office 2016 x64 không thể Hook được cửa số Password VBE
Cập nhật phiên bản 1.1 :
+ Sửa lỗi không dùng được với Office 64bit.
+ Thay đổi giao diện thông báo.
+ Thêm tính năng mở khóa sheet hiện hành (nguồn internet).
(Các bạn có thể dùng Addin này để mở những sheet bị khóa của phần mềm #KetoanXA nhé)
 

File đính kèm

Lần chỉnh sửa cuối:
Cập nhật phiên bản 1.1 :
+ Sửa lỗi không dùng được với Office 64bit.
+ Thay đổi giao diện thông báo.
+ Thêm tính năng mở khóa sheet hiện hành (nguồn internet).
(Các bạn có thể dùng Addin này để mở những sheet bị khóa của phần mềm #KetoanXA nhé)
Sao ứng dụng của bạn không có hiện Module vậy? Sao có thể kiểm tra bảo mật được?

Mục đích của addin này là để kiểm tra bảo mật mã nguồn, không có mục đích để bẻ khóa mã nguồn của người khác.


Vậy là đoạn này bạn viết vô nghĩa rồi
 
Vậy là đoạn này bạn viết vô nghĩa rồi
Các bạn dùng addin này để tự kiểm tra bảo mật file excel của chính bạn nhé. Tôi không khuyến khích các bạn đi bẻ khóa phần mềm của người khác.
Tôi có chia sẻ phần mềm #KetoanXA (do tự tôi viết), một số bạn có hỏi tôi mật khẩu khóa sheet nhưng tôi đã quên. Đây cũng là 1 cách để các bạn tự mở khóa sheet của #KetoanXA. (Điều này cũng cho thấy mật khẩu khóa sheet là rất dễ phá, chúng ta cần nghiên cứu tiếp).

Sao ứng dụng của bạn không có hiện Module vậy? Sao có thể kiểm tra bảo mật được?
Vấn đề này dựa trên uy tín cá nhân tôi. Bạn nào tin thì dùng, không tin thì thôi.
 
Sao ứng dụng của bạn không có hiện Module vậy? Sao có thể kiểm tra bảo mật được?

rảnh vào đây coi thêm nha .... Tham khảo xem sao

Cho ai đó iu thích Python nè

Cho ai đó iu thích Delphi
Mã:
program excel_sheet_unprotect;

{$APPTYPE CONSOLE}

uses
  SysUtils, ComObj, ActiveX, Windows, Dialogs,

  Messages, Variants, Classes, Graphics, Controls, Forms,
StdCtrls;

function unprotectSheet(P : Variant): boolean;
    var i, j, k, l, m, i1, i2, i3, i4, i5, i6, n : integer;
    begin
      result := true;
      For i := 65 To 66 do
        For j := 65 To 66 do
          For k := 65 To 66 do
            For l := 65 To 66 do
              For m := 65 To 66 do
                For i1 := 65 To 66 do
                  For i2 := 65 To 66 do
                    For i3 := 65 To 66 do
                      For i4 := 65 To 66 do
                        For i5 := 65 To 66 do
                          For i6 := 65 To 66 do
                            For n := 32 To 126 do
                            begin
                              if P.ProtectContents then
                                try
                                  P.Unprotect(Chr(i) + Chr(j) + Chr(k) + Chr(l) + Chr(m) + Chr (i1) + Chr(i2) + Chr(i3) + Chr(i4) + Chr(i5) + Chr(i6) + Chr(n));
                                  writeln(#13#10'Here is your password:');
                                  writeln(Chr(i) + Chr(j) + Chr(k) + Chr(l) + Chr(m) + Chr (i1) + Chr(i2) + Chr(i3) + Chr(i4) + Chr(i5) + Chr(i6) + Chr(n));
                                except
                                end
                              else
                                exit;
                            end;
      writeln(#13#10'Operation terminated unsuccessfully');
      result := false;
  end;

var
  VExcel, VWB, VWS, vip: OleVariant;
  dialog : TOpenDialog;
  s: string;

begin
  dialog := TOpenDialog.Create(nil);

  writeln('Enter Excel file');
  if not dialog.Execute then
    exit;

  CoInitialize(nil);

  try
    VWB := CreateOleObject('Excel.Application');
  except
    writeln(#13#10'Cannot initiate Excel');
    Exit;
  end;

  VWB.DisplayAlerts := False;
  VWB.Visible := False;
  VWB.WorkBooks.open(dialog.filename);
  VExcel := VWB.Application;
  //VWS := VWB.Workbooks[1].WorkSheets[1];  //MANH BỎ
  VWS := VWB.Workbooks[1];     //THAY DONG TRÊN

  writeln(#13#10'Working...');
  if VWS.ProtectContents then
    unprotectSheet(VWS)
  else writeln(#13#10'Sheet is not locked.');

  // Uncomment one of the lines bellow if you want to save the unprotected file
  //VWB.Workbooks[1].Save;
  //VWB.Workbooks[1].SaveAs (dialog.filename+' new');

  // Closing Excel...
  VWS := Unassigned;
  VWB := Unassigned;
  VExcel.Workbooks.Close;
  VExcel.Quit;
  VExcel := Unassigned;

  writeln(#13#10'Press Enter to Exit');
  s:=#0;
  while(s=#0) do
    readln(s);
end.
Rảnh lang thang trên Google tìm mọi cái có thể .... có cái tìm mờ mắt ko thấy hehehehe
 
rảnh vào đây coi thêm nha .... Tham khảo xem sao

Muốn hỏi làm cách nào để Hiện cái Module sau khi ẩn chứ còn đọc mấy cái đó đọc chi cho rối.

Tại thấy trong file của chủ thớt đây có cái "Ẩn module" mà không thấy chổ "Hiện Module"

Cài "Con Virus" zô Module ẩn chắc chỉ có trình quét Virus thấy.

Nếu ẩn Mã mà còn giả danh nữa Trình quét cũng khó nhận ra.


Mấy cái phá Pass, phá bỏ Unviewproject quen quá rồi.

Còn việc ẩn các Hàm trong Object Browser sau khi ẩn module cũng đã có hướng dẫn.
 
Muốn hỏi làm cách nào để Hiện cái Module sau khi ẩn chứ còn đọc mấy cái đó đọc chi cho rối.

Tại thấy trong file của chủ thớt đây có cái "Ẩn module" mà không thấy chổ "Hiện Module"

Cài "Con Virus" zô Module ẩn chắc chỉ có trình quét Virus thấy.

Nếu ẩn Mã mà còn giả danh nữa Trình quét cũng khó nhận ra.


Mấy cái phá Pass, phá bỏ Unviewproject quen quá rồi.
Thì cái link đầu cái nó chỉ cách chữ to và đậm đó ... chịu khó coi đi xong viết lại cái Hàm sau thêm Tùy chọn xử lý nó

Mã:
Public Sub HideModules(ByRef strBinaryFile As String)
    Dim F1 As Long, i As Long, lngCount As Long
    Dim bytTemp As Byte, strTemp As String * 7
    Dim objFiSystem As Object, strShortPath As String
    
    Set objFiSystem = CreateObject("Scripting.FileSystemObject")
    strShortPath = objFiSystem.GetFile(strBinaryFile).ShortPath
    Set objFiSystem = Nothing
    
Read_Binary:
    F1 = FreeFile
    Open strShortPath For Binary Access Read Write As #F1
    Do
        i = i + 1
        Get #F1, i, bytTemp
        If bytTemp = 77 Then '4D
            Get #F1, i, strTemp
            If strTemp = "Module=" Then
                lngCount = lngCount + 1
                For i = Loc(F1) - 6 To LOF(F1)
                    Get #F1, i, bytTemp
                    Put #F1, i, CByte(10) '0A
                    If bytTemp = 13 Then Exit For '0D
                Next
            End If
        End If
    Loop While Not EOF(F1)
Finally:
    Close #F1
'    If lngCount > 0 Then
'        If strLanguage = "en" Then
'            strMessage = "Wonderful!" & vbNewLine & vbNewLine & _
'                         "All modules of your excel file are hide."
'        Else
'            strMessage = UnicodeVBA$("Tuyeejt vowfi !" & vbNewLine & vbNewLine & _
'                         "Taast car module trong taajp tin bajn yeeu caafu ddax dduwowjc aarn.")
'        End If
'        isFinished = True
'    Else
'        If strLanguage = "en" Then
'            strMessage = "Hmm, It is too embarrassing!" & vbNewLine & vbNewLine & _
'                         "Something went wrong so LabX can not finish your work."
'        Else
'            strMessage = UnicodeVBA$("Huwfm," & vbNewLine & vbNewLine & _
'                         "Cos ddieefu gif ddos sai sai neen LabX khoong theer " & _
'                         "hoafn thafnh coong vieejc cho bajn.")
'        End If
'        isFinished = False
'    End If
End Sub
 
Lần chỉnh sửa cuối:
Độ bảo mật file addin của bạn cũng khá cao có thể bật mí tí ko ? Code mình xem dc rồi chỉ muốn tìm hiểu thêm thôi
 
Bạn nói rõ hơn tí dc không
Addin này được đặt mật khẩu mở file (password open)(mã hoá tập tin). Bình thường, nếu tập tin excel được đặt mật khẩu loại này thì khi file lên nó sẽ hiện hộp thoại yêu cầu nhập mật mã. Với mật mã đặc biệt này thì excel sẽ tự mở mà không hiện hộp thoại đó.
 
Addin này được đặt mật khẩu mở file (password open)(mã hoá tập tin). Bình thường, nếu tập tin excel được đặt mật khẩu loại này thì khi file lên nó sẽ hiện hộp thoại yêu cầu nhập mật mã. Với mật mã đặc biệt này thì excel sẽ tự mở mà không hiện hộp thoại đó.
Hay đó share cho mọi người học với được ko
 
Hay đó share cho mọi người học với được ko
Rất tiếc là tôi không thể chia sẻ mật mã này được (vì nó liên quan quá lớn). Bạn nào cần mã hoá tập tin kiểu này thì gửi file tôi giúp cho (tất nhiên là tôi sẽ xem được code của các bạn. Bạn nào tin tưởng thì mới gửi nhé).
 
Lần chỉnh sửa cuối:
Rất tiếc là tôi không thể chia sẻ mật mã này được (vì nó liên quan quá lớn). Bạn này cần mã hoá tập tin kiểu này thì gửi file tôi giúp cho (tất nhiên là tôi sẽ xem được code của các bạn. Bạn nào tin tưởng thì mới gửi nhé).
Mạnh viết dll API rồi tò mò cũng muốn tìm hiểu xem sao thôi
 
Rất tiếc là tôi không thể chia sẻ mật mã này được (vì nó liên quan quá lớn). Bạn nào cần mã hoá tập tin kiểu này thì gửi file tôi giúp cho (tất nhiên là tôi sẽ xem được code của các bạn. Bạn nào tin tưởng thì mới gửi nhé).
Dù gì nó cũng xem dc Code thì bạn chia sẽ cho mọi người học hỏi
 
Cái Form UI của bạn thiếu đoạn code này, bạn thêm vô để nó hoàn thiện.

Và File 1.1 để mở phần mềm #KetoanXA tôi không thể mở trên Excel với đủ mọi cách.

Một điểm nữa là file #KetoanXA của bạn chia sẻ có pass nén.
-----------------------------
JavaScript:
#If VBA7 Then
  Public Declare PtrSafe Function LockWindowUpdate Lib "user32" (ByVal hwnd As LongPtr) As Long
#Else
  Public Declare Function LockWindowUpdate Lib "user32" (ByVal hwnd As Long) As Long
#End If

Friend Sub FlexibleMove()
    Const WM_NCLBUTTONDOWN = &HA1, HTCAPTION = 2
    Call Transparent(180)
    LockWindowUpdate myHWND
    Call ReleaseCapture
    Call SendMessage(myHWND, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
    Call Transparent
    LockWindowUpdate 0&
End Sub
 
Lần chỉnh sửa cuối:
File #KetoanXA khóa của bạn đây

Bạn thử up file LabX_V1.1.xlsm được khóa Pass của microsoft tôi xem thử, với LabX_V1.1.xlam cứ báo không phải Add-ins, dù mở bằng cách nào Office 2010, cả office 2019.

-------------------------Capture.JPG
 
Lần chỉnh sửa cuối:
File #KetoanXA khóa của bạn đây

Bạn thử up file LabX_V1.1.xlsm được khóa Pass của microsoft tôi xem thử, với LabX_V1.1.xlam cứ báo không phải Add-ins, dù mở bằng cách nào Office 2010, cả office 2019.

-------------------------View attachment 227208
File #KetoanXA mở hoàn toàn nhé (không mã hoá file, không khoá workbook, 1 số sheet bị khoá, không khoá VBA...). Ý tôi ở đây là dùng #LabX để mở khoá sheet đó bạn (những thứ còn lại có khóa đâu mà cần mở).
#LabX_V1.1.xlam được mã hoá nên mở như file bình thường thì mới chạy được (nếu mở theo cách chính thống như vào thẻ Developer/Add-ins... hoặc những cách tương tự thì không Excel không nhận)(Bạn xem lại bài #6 nhé).
 
Sau khi tìm hiểu về cái Pass đặc biệt mà bạn nói với mọi người thì:

"Chẳng có cái Pass đặc biệt nào cả"

và nó là một "Sự lừa dối thế kỉ"

Không biết bạn giấu những cái mà người ta công khai để làm gì và được gì?

Trong khi Microsoft không giấu, mà bạn lại sợ người ta biết.

Đó chỉ là một trò chơi với những "con người khù khờ ngây thơ ngây dại" mà thôi.

[MS-OFFCRYPTO]: Office Document Cryptography Structure
 
Sau khi tìm hiểu về cái Pass đặc biệt mà bạn nói với mọi người thì:

"Chẳng có cái Pass đặc biệt nào cả"

và nó là một "Sự lừa dối thế kỉ"

Không biết bạn giấu những cái mà người ta công khai để làm gì và được gì?

Trong khi Microsoft không giấu, mà bạn lại sợ người ta biết.

Đó chỉ là một trò chơi với những "con người khù khờ ngây thơ ngây dại" mà thôi.

[MS-OFFCRYPTO]: Office Document Cryptography Structure
có pass open trong file mà anh
 
Sau khi tìm hiểu về cái Pass đặc biệt mà bạn nói với mọi người thì:

"Chẳng có cái Pass đặc biệt nào cả"

và nó là một "Sự lừa dối thế kỉ"

Không biết bạn giấu những cái mà người ta công khai để làm gì và được gì?

Trong khi Microsoft không giấu, mà bạn lại sợ người ta biết.

Đó chỉ là một trò chơi với những "con người khù khờ ngây thơ ngây dại" mà thôi.

[MS-OFFCRYPTO]: Office Document Cryptography Structure
Tôi nghĩ bạn nên thận trọng về lời nói. Tôi không thích nói nhiều và không cần giải thích cho bạn về việc có hay không mật mã đặc biệt này !
 
Tôi nghĩ bạn nên thận trọng về lời nói. Tôi không thích nói nhiều và không cần giải thích cho bạn về việc có hay không mật mã đặc biệt này !
Đúng là có mật mã đặc biệt nhưng không chỉ có một mà 20 cái.
Có nó mới đặt pass để mã hoá file được em nói đúng chứ.
 
Đúng vậy. Tôi biết 1 mật mã như thế và cũng suy đoán là có nhiều mật mã loại này. Tuy nhiên số lượng bao nhiêu thì tôi không biết.
Bạn có thể cho biết qui trình tạo ra file hay ko ? Em đoán thử nhé:
-tạo file ko pass
-pm (ko phải của bạn) + các dòng lệnh + mật mã
 
Bạn có thể cho biết qui trình tạo ra file hay ko ? Em đoán thử nhé:
-tạo file ko pass
-pm (ko phải của bạn) + các dòng lệnh + mật mã
1. Tạo file excel bình thường (có hay không có mật khẩu mở file không quan trọng nhưng phải mở được file đó lên).
2. Lưu lại tập tin với mật khẩu đặc biệt (1 dòng code trong VBA, không cần bất cứ phần mềm nào khác)
(Nếu lưu lại với thể loại addin *xlam thì sẽ phức tạp hơn 1 chút, nhưng cũng dưới 10 dòng code thôi)
 
Lần chỉnh sửa cuối:
Trong class cBinEditor ở bài 1 có code
PHP:
If strTemp = "CMG=""" Or strTemp = "DPB=""" Or strTemp Like "GC=""*" Then
Tức là có các chuỗi CMG="... Do vậy khi mở khóa / khóa thì addin sẽ sửa những mã này nên file sẽ bị lỗi (hoặc thiếu code...)

Tôi cũng biết là lỗi do tiếng Việt có dấu nhưng vẫn chưa có cách xử lý với việc nén (class cArchiver). Có lẽ phải đổi thuật toán ở sub 'LockCode'

Hóng

File *.xlam ở bài #1 cũng là loại file ở chủ đề
https://www.giaiphapexcel.com/diendan/threads/mở-vba-project-có-password-mà-không-cần-làm-gì-cả.132525/ (bài #24)
Loại file này đã được mã hóa (nên không thể giải nén) -> không thể dùng addin này để mở khóa được.
-bước 1: bỏ passopen
-bước 2: bỏ unviewable
-bước 3: hiện module đã bị ẩn
 
cho em hỏi là hide module xong thì làm thế nào để hiện lại được module ạ
 
cho em hỏi là hide module xong thì làm thế nào để hiện lại được module ạ
Việc khôi phục lại những module đã bị ẩn không đơn giản. Nếu bạn chứng minh được bạn là tác giả và/hoặc bạn có toàn quyền chỉnh sửa file... thì tải lên GPE, sẽ có nhiều thành viên giúp bạn !
 
Việc khôi phục lại những module đã bị ẩn không đơn giản. Nếu bạn chứng minh được bạn là tác giả và/hoặc bạn có toàn quyền chỉnh sửa file... thì tải lên GPE, sẽ có nhiều thành viên giúp bạn !
Nói chung trong những việc như thế dùng "phần mềm" của người khác rất rách việc. Vd. tôi dùng "phần mềm" của anh A và tôi hide module. Một thời gian sau tôi muốn unhide thì tôi phải lên GPE chứng minh tập tin là của mình rồi nhờ unhide. Anh A có thể nghỉ phép. Sau nửa năm anh A đọc thấy bài đã bị chìm rất sâu và unhide cho tôi. Một thời gian sau chuyện lặp lại với tập tin đó hoặc tập tin khác. Lại phải chứng minh, chờ đợi. Nhưng nếu anh A "nghỉ hưu" rồi, không đam mê GPE nữa, vì lúc này chỉ đam mê chơi hoa, chơi chim, cá, tennis cùng mấy bà cũng nghỉ hưu thì "tèo" :D
 
Nói chung trong những việc như thế dùng "phần mềm" của người khác rất rách việc. Vd. tôi dùng "phần mềm" của anh A và tôi hide module. Một thời gian sau tôi muốn unhide thì tôi phải lên GPE chứng minh tập tin là của mình rồi nhờ unhide. Anh A có thể nghỉ phép. Sau nửa năm anh A đọc thấy bài đã bị chìm rất sâu và unhide cho tôi. Một thời gian sau chuyện lặp lại với tập tin đó hoặc tập tin khác. Lại phải chứng minh, chờ đợi. Nhưng nếu anh A "nghỉ hưu" rồi, không đam mê GPE nữa, vì lúc này chỉ đam mê chơi hoa, chơi chim, cá, tennis cùng mấy bà cũng nghỉ hưu thì "tèo" :D
Thực ra vấn đề ở đây là có 1 số bạn không phải là tác giả (hoặc không có quyền) nhưng cứ thích đi bẻ khóa phần mềm của người khác. (Tôi đã nhận được 1 số email nhờ bẻ khóa). Nếu là tác giả thì cũng chẳng cần phải hiện lại module vì chỉ việc lấy file cũ ra mà xài !
 
Nếu là tác giả thì cũng chẳng cần phải hiện lại module vì chỉ việc lấy file cũ ra mà xài !
Cũng không nhẹ nhàng thế đâu. Vd. sau một thời gian tôi đã nhập thêm nhiều dữ liệu trong tập tin, xào nấu nhiều nên có thể có 1 số sheet được tạo, rồi định dạng, format. Vân vân và mây mây. Bây giờ lấy tập tin cũ thì làm gì có những thay đổi như tập tin hiện hành?
 
Thực ra vấn đề ở đây là có 1 số bạn không phải là tác giả (hoặc không có quyền) nhưng cứ thích đi bẻ khóa phần mềm của người khác. (Tôi đã nhận được 1 số email nhờ bẻ khóa). Nếu là tác giả thì cũng chẳng cần phải hiện lại module vì chỉ việc lấy file cũ ra mà xài !
Em cũng gặp nhiều trường hợp tác giả quên password á anh. Và em đã gửi LabX cho anh ấy tự xử
 
VelvetSweatshop
 
Mạnh viết dll API rồi tò mò cũng muốn tìm hiểu xem sao thôi

File mình gủi bạn có sheet "Temp" bị unhide và đặt password để lock structure không cho unhide. Bạn mở giúp mình nhé. Cám ơn bạn nhiều
Bài đã được tự động gộp:

C
Rất tiếc là tôi không thể chia sẻ mật mã này được (vì nó liên quan quá lớn). Bạn nào cần mã hoá tập tin kiểu này thì gửi file tôi giúp cho (tất nhiên là tôi sẽ xem được code của các bạn. Bạn nào tin tưởng thì mới gửi nhé).

Chào bạn Thái,

File mình gủi bạn có sheet "Temp" bị unhide và đặt password để lock structure không cho unhide. Bạn mở giúp mình nhé. Cám ơn bạn nhiều
 

File đính kèm

Lần chỉnh sửa cuối:
Em cam on anh Batman1,

Anh đã giúp em unhide được sheet "Temp" rồi nhưng sheet này đang bị bôi đen toàn bộ và không hiện được lên các dữ liệu/công thức đang có. Vậy anh giúp em thêm bước này nữa nhé.
 

File đính kèm

File đa mở được rồi. Em cám ơn bác nhiều nhé
 

File đính kèm

  • f.jpg
    f.jpg
    14.5 KB · Đọc: 29
Gửi tặng các bạn addin #LabX giúp khóa và mở khóa mã nguồn vbaProject :
----------------------------------------
+ Mở khóa các dự án vbaProject có bảo vệ mật khẩu bằng kỹ thuật hook (sưu tầm, không rõ tác giả).
+ Mở khóa các dự án vbaProject bằng kỹ thuật chỉnh sửa tập tin nhị phân (bao gồm một số dự án dạng 'Project is unviewable').
----------------------------------------
+ Ẩn tất cả các module (cơ bản) trong dự án bằng kỹ thuật chỉnh sửa tập tin nhị phân.
+ Khóa nhanh mã nguồn dạng 'Project is unviewable'.
----------------------------------------
Mục đích của addin này là để kiểm tra bảo mật mã nguồn, không có mục đích để bẻ khóa mã nguồn của người khác.
Chào bạn
Bạn có thể giúm mình mở file này không hiện file đang bị project is unviewable
cam on nhieu
 

File đính kèm

File này không phải là file của bạn mà, dù mở được bằng tool trên nhưng ko gửi cho bạn được

1619970278588.png

1619970339100.png
 
em có mở khóa file hợp đồng mà đoạn code lại không đọc được. Xin nhờ các bác giúp
 

File đính kèm

Gửi tặng các bạn addin #LabX giúp khóa và mở khóa mã nguồn vbaProject :
----------------------------------------
+ Mở khóa các dự án vbaProject có bảo vệ mật khẩu bằng kỹ thuật hook (sưu tầm, không rõ tác giả).
+ Mở khóa các dự án vbaProject bằng kỹ thuật chỉnh sửa tập tin nhị phân (bao gồm một số dự án dạng 'Project is unviewable').
----------------------------------------
+ Ẩn tất cả các module (cơ bản) trong dự án bằng kỹ thuật chỉnh sửa tập tin nhị phân.
+ Khóa nhanh mã nguồn dạng 'Project is unviewable'.
----------------------------------------
Mục đích của addin này là để kiểm tra bảo mật mã nguồn, không có mục đích để bẻ khóa mã nguồn của người khác.
Bác cho tôi hỏi thêm là khi khóa module thì không chạy được phím tắt gọi Used form lên giả dụ ẩn mất module

Sub goiform1()
UserForm2.Show
End Sub

Tôi đã thử cách xóa module cũ, sau đó sau khi ẩn module và thêm module mới trên hình nhưng cũng ko thể gọi phím tắt được, lệnh trong usedform đó vẫn hđ bình thường

Cho xin hỏi cách khắc phục
 
1718513795799.png
ad cho mình hỏi mình chỉnh về số 1:xlsheetvisibale thì hiện lên bản này có cách nào khắc phục được không ạ. e cảm ơn
 

Bài viết mới nhất

Back
Top Bottom