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

Chia sẻ bởi:hands
★★★★★
Quảng cáo

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 ạ?

Thế thì cho bạn cái "cần câu"

Sub Test()
  With ThisWorkbook.VBProject
    .VBComponents.Remove .VBComponents("Module1")
  End With
End Sub

"câu cá" thế nào là tùy bạn nhé
FileFormat:=51 <==> FileFormat:=xlOpenXMLWorkbook—> Cũng là thằng em XLSX

Bạn cứ vào cửa sổ VBE, gõ đâu đó cái này ThisWorkbook.SaveAs, bôi đen nội dung vừa gõ rồi nhấn F1, tại hàng mô tả về FileFormat, bạn sẽ nhìn thấy một danh mục XlFileFormat. Click vào đó là bạn có thể biết tất cả về mấy con số này thôi mà.
Còn câu lệnh xóa file thì chỉ là như vầy thôi mà: Kill "Đường dẫnTên file"
Tóm lại là bạn cần làm 2 việc:
1. SaveAs file gốc thành file .xlsx (file mới sẽ không còn code nữa).
2. Xóa file gốc đi bằng lệnh Kill.

À đấy! phải thế chứ! thiếu việc 2! =))

Cần gì phải đau khổ đến thế chứ, muốn xây thì khó chứ đập ra thì nhanh lắm

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à

Vấn đề là với mỗi loại file nó có phần mở rộng khác nhau mà anh. Chẳng hạn, file gốc là Test.xlsm, sau khi SaveAs thì nó thành Test.xlsx chứ nhỉ?!
Theo hướng làm ở trên thì em làm như vầy:
Sub Test()
Application.DisplayAlerts = False
ThisWorkbook.SaveAs "C:Test.xlsx", 51
Application.DisplayAlerts = True
Kill "C:Test.xlsm"
End Sub
Ồ! 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!

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ì

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

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

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

Đú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ó!

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.

www.giaiphapexcel.com/diendan/threads/c%C3%B3-th%E1%BB%83-d%C3%B9ng-vba-%C4%91%E1%BB%83-x%C3%B3a-vba-%C4%91c-kh%C3%B4ng.72632

Thiết kế Tổng đãi ngộ (Total Rewards) theo khung SHRM
Khóa học SprinGO phù hợp

Thiết kế Tổng đãi ngộ (Total Rewards) theo khung SHRM

Khóa học “Thiết kế Tổng phần thưởng (Total Reward) chuẩn khung SHRM” giúp bạn nắm vững toàn bộ hệ thống đãi ngộ theo chuẩn...

Xem khóa học
★★★★★ 5 ★ 1 👤 14 ▥ 0
Quảng cáo

Bạn nên đọc

Bình luận

Quảng cáo

Cũ vẫn chất

Xem thêm