kiến thức [Office VBA] Sao lưu hàng loạt macro trong Word, Excel, Powerpoint

NguyenDang95

Senior Member
Chào mọi người. Trong quá trình làm việc thường phát sinh nhiều vấn đề phải viết macro để giải quyết giúp hiệu quả công việc nâng cao và diễn ra trơn tru hơn, cho nên quản lý, sao lưu macro là việc làm cần thiết. Tuy nhiên, thật kỳ cục và mất thời gian khi trong VBProject có hơn chục cái macro các loại mà phải lọ mọ sao lưu thủ công từng cái bằng File-Export File, chưa kể nếu cần đưa số macro này cho người khác dùng thì phải lọ mọ import từng cái một rất mất thời gian.

1640449795725.png


Macro dưới đây sử dụng thuộc tính Application.VBE trong Word, Excel và Powerpoint (Outlook không hỗ trợ do vấn đề bảo mật) để có thể sao lưu hàng loạt macro các loại trong VBProject.
Trước khi chạy macro dưới đây, cần chọn Tools-References và chọn Visual Basic For Applications Extensibility 5.3. Trong Trust Center-Macro Settings, chọn Trust access to the VBA project object model, nếu không sẽ có thông báo lỗi.

1640449828668.png


1640449881928.png


Code:
Option Explicit

Sub BackupAllMacros()

Dim VBEditor As VBIDE.VBE
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBComponent
Dim CountOfMacros As Long
Dim strExportFolder As String

strExportFolder = "C:\" 'Sửa lại đường dẫn cho phù hợp với nhu cầu
Set VBEditor = Application.VBE
Set VBProj = VBEditor.VBProjects("Normal")
For Each VBComp In VBProj.VBComponents
    If VBComp.Type = vbext_ct_StdModule Then
        VBComp.Export strExportFolder & "\Modules\" & VBComp.Name & ".bas" 'Nhớ tạo trước thư mục Modules
        CountOfMacros = CountOfMacros + 1
    ElseIf VBComp.Type = vbext_ct_MSForm Then
        VBComp.Export strExportFolder & "\Forms\" & VBComp.Name & ".frm" 'Nhớ tạo trước thư mục Forms
        CountOfMacros = CountOfMacros + 1
    ElseIf VBComp.Type = vbext_ct_ClassModule Or VBComp.Type = vbext_ct_Document Then
        VBComp.Export strExportFolder & "\Class Modules\" & VBComp.Name & ".cls" 'Nhớ tạo trước thư mục Class Modules
        CountOfMacros = CountOfMacros + 1
    End If
Next
If Err.Number = 0 Then
    MsgBox "Backup completed. " & CountOfMacros & " macros has been exported successfully.", vbInformation + vbOKOnly, "Report of Export Macro"
End If
Set VBEditor = Nothing
Set VBProj = Nothing
Set VBComp = Nothing

End Sub

Kết quả: Như vầy tiện hợn nhiều.

1640449588918.png


1640449724931.png
 
Back
Top