Code VBA Excel Tự Động Lưu Và Tạo Một Bản Sao Chép Vào Thư Mục Khác

Với Excel, mất điện đột ngột, lỗi File, mặc dù trước đó bạn đã bấm lưu, nhưng khi mở ra dữ liệu vẫn có thể bị mất hoặc thậm tệ hơn là mất điện quá lâu và dữ liệu cũng không lưu.

Để giải quyết vấn đề sao lưu tự động bằng VBA, và bạn luôn tự tin File Excel luôn được lưu và được sao chép vào một thư mục lưu trữ quy định trong ổ đĩa, ở đây mình quy định Folder lưu trữ là "Backup", và nó tự động được tạo ra nếu không có sẵn trong ổ đĩa của bạn, còn nếu có sẵn nó sẽ tự biết Copy một bản dự phòng vào đó.

Trước khi file chưa được mở
Code VBA tự tạo thư mục

Chúng ta thực hiện các bước sau:

1 Mở File bạn cần lưu tự động và thực hiện như sau

Mở cửa sổ soạn thảo Code ra, Nhấn ALT+F11 hoặc Developer, bấm chọn VisualBasic hoặc Viewcode để thực hiện viết code, bạn nào chưa biết cách làm tham khảo bài "VBA Cơ Bản Bài 01"

Viet Code VBA cho Sự Kiện Open WorkBook

2 Viết code cho sự kiện WorkbookOpen, gọi Code AutoBackup

Nháy đúp vào 'ThisWorkbook', bên phải chọn sự kiện Open nhé, như hình trên, một Private Sub cho sự kiện Open sẽ tự động sinh ra, bạn chỉ cần chép đoạn code này vào

Private Sub Workbook_Open()
    Application.OnTime Now + TimeValue("00:00:20"), "AutoBackup"
End Sub

3 Viết code cho Sub AutoBackup tại Module "mdAutoBackup"

Nhập đúp chuột vào Module "mdAutoBackup", và copy đoạn code sau dán vào trình soạn thảo VBA của Excel (Nhấn phím Alt + F11 trong màn hình làm việc của Excel).

Option Explicit
Sub AutoBackup()
    Dim FileExtStr  As String
    Dim FileFormatNum As Long
    Dim xWs         As Worksheet
    Dim xWb         As Workbook
    Dim FSO         As Object
    Dim MyPath      As String
    
    Application.ThisWorkbook.Save
    MyPath = ThisWorkbook.Path & "\Backup"        '<< Duong dan thu muc Import
    
    If Right(MyPath, 1) = "\" Then
        MyPath = Left(MyPath, Len(MyPath) - 1)
    End If
    
    Set FSO = CreateObject("scripting.filesystemobject")
    
    If FSO.FolderExists(MyPath) = FALSE Then
        MsgBox "Duong dan " & MyPath & "Thu muc Backup duoc tao!", vbInformation
        Dim FolderName As String
        Application.ScreenUpdating = FALSE
        Set xWb = Application.ThisWorkbook
        FolderName = xWb.Path & "\" & "Backup"        '& DateString
        MkDir FolderName
        MsgBox "File cua ban se duoc luu tai " & MyPath, vbInformation
        ThisWorkbook.SaveCopyAs ThisWorkbook.Path & "\Backup\" & _
                                Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5) & "(" & _
                                Right(Timer, 1) & ")" & Format(Date, "dd.mm.yyyy") & ".xlsm"
    Else
        MsgBox "File cua ban se duoc luu tai " & MyPath, vbInformation
        ThisWorkbook.SaveCopyAs ThisWorkbook.Path & "\Backup\" & _
                                Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5) & "(" & _
                                Right(Timer, 1) & ")" & Format(Date, "dd.mm.yyyy") & ".xlsm"
    End If
    Application.OnTime Now + TimeValue("00:00:20"), "AutoBackup"
End Sub

Tại dòng code cuối cùng , mình đang để chế độ tự động lưu và Backup sau 20s, các bạn thay thế tùy ý nhé

4 Đóng file, và lưu về định dạng .xlsm hoặc .xls

Để File hoạt động được, bạn phải tắt và mở lên, vì chúng ta đang dùng sự kiện Workbook_Open Vậy là xong, chúng ta thử bấm đồng hồ xem có đúng cứ sau 20s nó tự lưu và sao chép một bản vào thư mục Backup không?

Bài tiếp theo tôi sẽ hướng dẫn cách viết Code VBA ADO lấy và tổng hợp dữ liệu từ một file đang đóng vào File báo cáo và Code VBA ADO Tổng hợp dữ liệu từ File đang đóng sang Một File Excel đang đóng khác

Code VBA ADo Tong hop du lieu tu file dang dong hoac tu File dang Dong nay sang File dang dong khac

Có thể các bạn quan tâm các bài viết về lập trình VBA sau

>> Lập trình VBA Từ Căn Bản Đến Nâng Cao

>> Lập Trình VBA Căn Bản Bài 01

>> Tạo Phiếu In Lương Hàng loạt

>> Tạo Form VBA Quản Lý Sheets trong Excel

 

CHO ĐIỂM BÀI VIẾT NÀY

vote data
TOP