Có thể dùng vba để xóa vba đc không?

Liên hệ QC

quykiemsau

Thành viên chính thức
Tham gia
4/8/10
Bài viết
66
Được thích
0
Em chào các anh chị!
Có code nào có thể test 1 điều kiện nào đó để xóa toàn bộ vba trong file Excel được không ạ?
Cụ thể là
ô A1! của sheet 1! em đặt điều kiện hoặc =0 hoặc =1.
Khi Open file:
ô a1=1 thì file chạy bình thường.
Nếu A1=0 thì toàn bộ vba trong file bị xóa sạch.
Có được không ạ?
 
Cần gì phải đau khổ đến thế chứ, muốn xây thì khó chứ đập ra thì nhanh lắm

PHP:
Sub Xoa_Modules()
Dim x
    On Error Resume Next
    With ActiveWorkbook.VBProject
        For x = .VBComponents.Count To 1 Step -1
            .VBComponents.Remove .VBComponents(x)
        Next x
    End With
End Sub

Còn việc Saveas thì có thể dùng thêm dòng lệnh Application.displayalerts=False để lưu đè lên file gốc rồi mà, đâu cần phải xoá nữa
Nếu bạn biết viết code rồi thì cái này đơn giản mà

Ồ! Ngon. :D.
Mà... Bác nói vậy chứ code em cũng biết viết gì đâu. Chỉ là biết mỗi cái copy và pase thêm 1 tý mô đi phê nữa... hehe!
Tks Bác!
 
Upvote 0


Bạn có chắc chắn là "ngon" 100% không?
Tôi hiểu "xóa toàn bộ vba" của bạn là xóa toàn bộ code trong VBA. Tôi hiểu đúng?
Bạn nên hiểu là xóa component và xóa code là 2 "cô nàng" khác nhau. Code của quanghai là xóa component.
Trong VBE ở bên nửa trái bạn có component, bên nửa phải bạn có code. Nếu component bị xóa thì dĩ nhiên code của nó cũng "cuốn theo chiều gió". Thế nếu component không bị xóa thì sao? Theo lôgíc thì code vẫn còn trơ trẽn nằm tơ hơ.
Code của quanghai không xóa Sheet1, 2, 3, ThisWorkbook, vậy nếu chúng có hằng hà sa số code thì những code này vẫn còn.
Vậy nếu bạn muốn xóa class module, module, userform, ..., code của Sheet1, 2, 3, ..., ThisWorkbook thì

Mã:
Sub DeleteAllCodes()
Dim x
    On Error Resume Next
    With ActiveWorkbook.VBProject
        For x = .VBComponents.Count To 1 Step -1
            If .VBComponents(x).Type <> 100 Then
                .VBComponents.Remove .VBComponents(x)
            Else
                With .VBComponents(x).CodeModule
                    .DeleteLines 1, .CountOfLines
                End With
            End If
        Next x
    End With
End Sub
 
Upvote 0
Bạn có chắc chắn là "ngon" 100% không?
Tôi hiểu "xóa toàn bộ vba" của bạn là xóa toàn bộ code trong VBA. Tôi hiểu đúng?
Bạn nên hiểu là xóa component và xóa code là 2 "cô nàng" khác nhau. Code của quanghai là xóa component.

Code cũng hơi độc hại nên em tính cất lại chút ít. Em viết thế này

PHP:
Sub Xoa_Code()
Dim x As Integer
    On Error Resume Next
    With ActiveWorkbook.VBProject
        For x = .VBComponents.Count To 1 Step -1
            .VBComponents(x).CodeModule.DeleteLines 1, _
            .VBComponents(x).CodeModule.CountOfLines
            .VBComponents.Remove .VBComponents(x)
        Next x
    End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Đúng rồi! Cám ơn Bác nhé!
Em cũng đang thắc mắc vấn đề này từ lúc code của Thầy Ndu cơ.
Thật ra đến thời điểm này Em cũng chưa test 1 trường hợp nào trong bài này cả.
Nên có post nên sợ các Bác bảo lười.
VBA thì có rất nhiều trong sheet như Bác nói, This wordbook nữa.
module,UserForm,class v.v...
Tóm lại là xóa sạch...
Cái này E sẽ thử nó!
 
Upvote 0
Anh ơi Code độc hại nên em không muốn up lên toàn bộ, chỉ sợ người dùng lạm dụng thôi
Em viết thế này:
PHP:
Sub Xoa_Code()
Dim x As Integer
    On Error Resume Next
    With ActiveWorkbook.VBProject
        For x = .VBComponents.Count To 1 Step -1
            .VBComponents(x).CodeModule.DeleteLines _
            1, .VBComponents(x).CodeModule.CountOfLines
            .VBComponents.Remove .VBComponents(x)
        Next x
    End With
End Sub

Theo tôi nghĩ, code dạng này, theo tác giả là không cho xem code nên mới xóa, thì OK, nhưng nếu người ta không để chế độ tự động chạy macro (macro setting) thì cũng chẳng có gì xảy ra.

Mặt khác, nếu ta giấu code, đặt password cho VBA cũng không là vấn đề. Nếu người muốn thấy code của mình, tức là người đó cũng hiểu biết và thậm chí hiểu biết rất rõ về VBA thì không xóa được với họ đâu, họ không cho chạy macro, rồi họ bẻ khóa (diễn đàn nói nhiều về việc này), thì code cũng sẽ lộ ra ngay trước khi code xóa VBA thực hiện!

Nên tôi nghĩ hướng dẫn thì ta cứ hướng dẫn, chẳng ngại ngùng gì! Người không biết chẳng ai thèm quan tâm đến code, người quá hiểu biết thì có xóa, giấu, cũng không được, chỉ có giấu người dỡ dỡ ương ương thôi.
 
Upvote 0
Nên tôi nghĩ hướng dẫn thì ta cứ hướng dẫn, chẳng ngại ngùng gì! Người không biết chẳng ai thèm quan tâm đến code, người quá hiểu biết thì có xóa, giấu, cũng không được, chỉ có giấu người dỡ dỡ ương ương thôi.

Ác cái là những thành phần "hơi hơi biết" lại thích phá hoại
Tóm lại: Thà không biết thì thôi, biết càng nhiều cũng càng tốt... Còn "dỡ dỡ ương ương" thường lại hay thích làm những chuyện.. "ương ương dỡ dỡ".
Nói cho cùng, mấy "trò chơi" này chẳng được tích sự gì đối với người mới học VBA ---> Dành thời gian nghiên cứu cái khác tốt hơn
 
Upvote 0
Bạn có chắc chắn là "ngon" 100% không?
Tôi hiểu "xóa toàn bộ vba" của bạn là xóa toàn bộ code trong VBA. Tôi hiểu đúng?
Bạn nên hiểu là xóa component và xóa code là 2 "cô nàng" khác nhau. Code của quanghai là xóa component.
Trong VBE ở bên nửa trái bạn có component, bên nửa phải bạn có code. Nếu component bị xóa thì dĩ nhiên code của nó cũng "cuốn theo chiều gió". Thế nếu component không bị xóa thì sao? Theo lôgíc thì code vẫn còn trơ trẽn nằm tơ hơ.
Code của quanghai không xóa Sheet1, 2, 3, ThisWorkbook, vậy nếu chúng có hằng hà sa số code thì những code này vẫn còn.
Vậy nếu bạn muốn xóa class module, module, userform, ..., code của Sheet1, 2, 3, ..., ThisWorkbook thì

Mã:
Sub DeleteAllCodes()
Dim x
    On Error Resume Next
    With ActiveWorkbook.VBProject
        For x = .VBComponents.Count To 1 Step -1
            If .VBComponents(x).Type <> 100 Then
                .VBComponents.Remove .VBComponents(x)
            Else
                With .VBComponents(x).CodeModule
                    .DeleteLines 1, .CountOfLines
                End With
            End If
        Next x
    End With
End Sub
Tks Bác Nhiêù!
Nhưng Có lẽ chưa fai là Ngon 100% Bác àh!
Nêú pássword VBA thì code trên cũng không có tác dụng phải không ạ?
Có cách nào Remove cả páss vba rôì mơí xóa tât cả không?
 
Upvote 0
Tks Bác Nhiêù!
Nhưng Có lẽ chưa fai là Ngon 100% Bác àh!
Nêú pássword VBA thì code trên cũng không có tác dụng phải không ạ?
Có cách nào Remove cả páss vba rôì mơí xóa tât cả không?

Bạn ạ,
Bạn nói code của bạn nên bạn muốn dấu. Bây giờ bạn lại nói là nó có password. Vậy thì code của bạn hay của người khác? Của bạn thì đâu cần bẻ cái gì? Tôi biết cũng không chỉ cho bạn.
Trong bối cảnh này nếu bạn có vụng chèo khéo chống là "để học hỏi" thì tôi cũng không tin
Mà code có password hay không thì nó vẫn chạy chớ sao lại không?
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn ạ,
Bạn nói code của bạn nên bạn muốn dấu. Bây giờ bạn lại nói là nó có password. Vậy thì code của bạn hay của người khác? Của bạn thì đâu cần bẻ cái gì? Tôi biết cũng không chỉ cho bạn.
Trong bối cảnh này nếu bạn có vụng chèo khéo chống là "để học hỏi" thì tôi cũng không tin
Mà code có password hay không thì nó vẫn chạy chớ sao lại không?

Ôi! Bác hiêủ lâm y Em rôì!
Nêú là file của ngươì khác khi đătj pás vba thj sao mjnh có thêr chèn code đó vào đc hả Bác.
Chỉ có file của mình và mình biêts pás thi moi chèn dc code vào chu'.
Vi du em tao 1 file co vba va trong do co code xoa toàn bô nay! Nhung khi Em dat páss thi code xoa toan bo se vô dụng.
Ý E là vây? Chú khéo chôngs gì dâu!
Bác nghi có dúng không ạ! Có lẽ Bác vôi trả loi quá! hic!
 
Upvote 0
Ôi! Bác hiêủ lâm y Em rôì!
Nêú là file của ngươì khác khi đătj pás vba thj sao mjnh có thêr chèn code đó vào đc hả Bác.
Chỉ có file của mình và mình biêts pás thi moi chèn dc code vào chu'.
Vi du em tao 1 file co vba va trong do co code xoa toàn bô nay! Nhung khi Em dat páss thi code xoa toan bo se vô dụng.
Ý E là vây? Chú khéo chôngs gì dâu!
Bác nghi có dúng không ạ! Có lẽ Bác vôi trả loi quá! hic!

Bạn hỏi: Có cách nào Remove cả páss vba rôì mơí xóa tât cả không?
Tôi hỏi: code của bạn thì cần gì bẻ cái gì? Còn code của người khác thì tôi không chỉ.
Mà tôi đã nói: có pass hay không vẫn chạy. Tất nhiên nếu người ta không cho chạy macro thì dĩ nhiên nó không chạy và chả có gì xóa cả. Tôi không bàn về lý do (ở bài trước), cũng không bàn về hiệu quả (nếu disable macro) mà chỉ bổ sung code của quanghai thôi. Kiểu là: đã làm thì làm tới cùng như ... thế này.
Mà bạn nên học những điều có ích thì hơn.
 
Upvote 0
Bạn hỏi: Có cách nào Remove cả páss vba rôì mơí xóa tât cả không?
Tôi hỏi: code của bạn thì cần gì bẻ cái gì? Còn code của người khác thì tôi không chỉ.
Mà tôi đã nói: có pass hay không vẫn chạy. Tất nhiên nếu người ta không cho chạy macro thì dĩ nhiên nó không chạy và chả có gì xóa cả. Tôi không bàn về lý do (ở bài trước), cũng không bàn về hiệu quả (nếu disable macro) mà chỉ bổ sung code của quanghai thôi. Kiểu là: đã làm thì làm tới cùng như ... thế này.
Mà bạn nên học những điều có ích thì hơn.
Nghĩa là vầy: Với 1 VBProject được đặt password thì code không chạy anh à! Thành ra cần phải có công đoạn Unlock VBProject trước mới chạy code XÓA CODE
 
Lần chỉnh sửa cuối:
Upvote 0
Thông thường pass VBA rất dễ mở hoặc phá, nhưng em có file này không thể phá pass được. Anh chị nào mở hoặc phá được pass của file này em thật sự phục sát đất. File này không có dữ liệu gì cả, chỉ có pass VBA bên trong thôi
 

File đính kèm

  • Excel.rar
    13.7 KB · Đọc: 194
Upvote 0
Thông thường pass VBA rất dễ mở hoặc phá, nhưng em có file này không thể phá pass được. Anh chị nào mở hoặc phá được pass của file này em thật sự phục sát đất. File này không có dữ liệu gì cả, chỉ có pass VBA bên trong thôi

Mở khóa trong vòng 3s
 

File đính kèm

  • Excel.xls
    43.5 KB · Đọc: 117
Upvote 0


Hình như 3s này chỉ là cách nói cường điệu một chút thì phải. Tôi mở bằng hexeditor --> tìm 3 "chú" --> sửa lại --> ghi lại. Tổng cộng mất mười mấy s.
Hay là Tuấn có automata? Chuột phải --> chọn automata --> xong luôn?
 
Upvote 0
Hình như 3s này chỉ là cách nói cường điệu một chút thì phải. Tôi mở bằng hexeditor --> tìm 3 "chú" --> sửa lại --> ghi lại. Tổng cộng mất mười mấy s.
Hay là Tuấn có automata? Chuột phải --> chọn automata --> xong luôn?

Em cũng dùng Hexeditor nhưng làm quen tay rồi anh à:
- Ctrl + F
- Gõ CMG, Enter
- Bôi đen chổ cần xóa rồi bấm nút Delete và Save
Xong!
Ẹc... Ẹc... 3s hơi cường điệu nhưng sự thật là rất nhanh
 
Upvote 0
Nghĩa là vầy: Với 1 VBProject được đặt password thì code không chạy anh à! Thành ra cần phải có công đoạn Unlock VBProject trước mới chạy code XÓA CODE

Đúng là trong trường hợp này Bác đã hiểu ý tôi.
Về trường hợp không cho chạy Macro thì chẳng phải bàn làm gì.
Nhưng mà đã nói là cho chạy thì cũng phải chạy 1 cách ngon nghẻ chứ!
Việc tự xóa vba này cũng là 1 trường hợp bảo mật.
Mà đã nói đến bảo mật đến mức phải xóa vba đi thì tất nhiên là phải đặt pass rồi.
Nhưng đặt Pass VBA thì mấy bài viết trên coi như là vô dụng.
E, thấy các Bác nghĩ về bài viết này theo chiều hướng xấu... định giải thích thêm với các BÁc nhưng mà chắc gì các BÁc đã tin
May có BÁc ndu nhìn thấu vấn đề !Ý em hỏi cũng như Bác ndu đã nói đó... lời nói của rất có trọng lượng...
 
Upvote 0
Em cũng dùng Hexeditor nhưng làm quen tay rồi anh à:
- Ctrl + F
- Gõ CMG, Enter
- Bôi đen chổ cần xóa rồi bấm nút Delete và Save
Xong!
Ẹc... Ẹc... 3s hơi cường điệu nhưng sự thật là rất nhanh

Trên mạng có file password.xla (chắc của một cao thủ nước ngoài), mình tìm nó không có CMG thì làm sao? Mình không muốn phá khóa để lấy code, chỉ muốn học cách khóa code như họ. Bạn có biết họ khóa kiểu gì không?
 
Upvote 0
Nhưng đặt Pass VBA thì mấy bài viết trên coi như là vô dụng.

Vấn đề Unprotect Password VBA tôi đã nghiên cứu từ rất lâu rồi mà dường như.. không có cách
Tham khảo các trang web nước ngoài, người ta cũng chỉ có thể dùng phương pháp SendKeys (kiểu như "dạy" cho máy tính cách ta làm bằng tay bằng cách bấm các tổ hợp phím nào đó)
Tuy nhiên, phương pháp dùng SendKeys đôi lúc không ổn định, khi được khi không nên tôi chưa giới thiệu
Nghe đồn rằng có cách dùng hàm API để truy đến các cửa sổ lập trình VBA gì gì đó nhưng tiếc là tôi lại không rành ---> E rằng làm được món này chỉ có thể là siwtom ---> Chở xem
------------------------------------------
Trên mạng có file password.xla (chắc của một cao thủ nước ngoài), mình tìm nó không có CMG thì làm sao? Mình không muốn phá khóa để lấy code, chỉ muốn học cách khóa code như họ. Bạn có biết họ khóa kiểu gì không?
Cái này để mình bàn trong 1 dịp khác nha anh (vi phạm nội quy đấy)
 
Upvote 0
Web KT
Back
Top Bottom