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.
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.
Kết quả: Như vầy tiện hợn nhiều.
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.
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.