Menu

Tự động hóa việc tạo tệp tin Excel mới dựa trên mẫu có sẵn bằng VBA

Biện Công Ngân 12/06/2026 08:29 357 lượt xem 1 trả lời

Chào các bạn, mình là thành viên mới của diễn đàn và cũng là một người khá thích mày mò VBA để tự động hóa công việc. Hôm nay mình muốn chia sẻ một đoạn code nhỏ mà mình đã tự viết để giúp tạo các tệp tin Excel mới dựa trên một tệp tin mẫu có sẵn. Tính năng này rất hữu ích khi các bạn cần tạo nhiều báo cáo theo một cấu trúc định sẵn, ví dụ như báo cáo doanh thu hàng ngày, báo cáo tồn kho, hay các biểu mẫu nhập liệu.

Vấn đề gặp phải:

Trước đây, mỗi khi cần tạo một báo cáo mới, mình thường phải mở tệp tin mẫu ra, sau đó Save As sang một tên mới rồi mới bắt đầu nhập liệu. Việc này tốn khá nhiều thời gian và dễ bị nhầm lẫn nếu quên đổi tên hoặc chỉnh sửa nhầm vào file mẫu gốc.

Giải pháp với VBA:

Mình đã viết một đoạn code đơn giản để giải quyết vấn đề này. Ý tưởng là:

  • Xác định tệp tin mẫu.
  • Nhập tên tệp tin mới mong muốn.
  • Copy toàn bộ nội dung và định dạng từ tệp tin mẫu sang một tệp tin mới hoàn toàn.
  • Lưu tệp tin mới với tên đã nhập.

Dưới đây là đoạn code minh họa:

Sub CreateNewFileFromTemplate()
    Dim templatePath As String
    Dim newFileName As String
    Dim wbTemplate As Workbook
    Dim wbNew As Workbook
    
    ' --- Cấu hình ---
    templatePath = "C:\DuLieu\MauBaoCao.xlsx" ' Thay đổi đường dẫn đến tệp tin mẫu của bạn
    
    ' Yêu cầu người dùng nhập tên tệp tin mới
    newFileName = InputBox("Nhập tên tệp tin mới (không bao gồm đuôi .xlsx):", "Tạo tệp tin mới")
    If newFileName = "" Then
        MsgBox "Bạn chưa nhập tên tệp tin. Thao tác bị hủy bỏ.", vbExclamation
        Exit Sub
    End If
    newFileName = newFileName & ".xlsx"
    
    ' Mở tệp tin mẫu
    On Error Resume Next
    Set wbTemplate = Workbooks.Open(templatePath)
    If wbTemplate Is Nothing Then
        MsgBox "Không tìm thấy tệp tin mẫu tại đường dẫn: " & templatePath, vbCritical
        Exit Sub
    End If
    On Error GoTo 0
    
    ' Copy tệp tin mẫu sang một tệp tin mới
    wbTemplate.SaveCopyAs newFileName
    
    ' Mở tệp tin mới vừa tạo
    Set wbNew = Workbooks.Open(newFileName)
    
    ' Đóng tệp tin mẫu mà không lưu (tránh chỉnh sửa nhầm)
    wbTemplate.Close SaveChanges:=False
    
    MsgBox "Đã tạo thành công tệp tin mới: " & newFileName, vbInformation

End Sub

Lưu ý:

  • Bạn cần thay đổi biến templatePath cho phù hợp với đường dẫn và tên tệp tin mẫu của bạn.
  • Tệp tin mẫu nên được lưu dưới định dạng .xlsx hoặc .xlsm (nếu mẫu có macro).
  • Đoạn code này chỉ đơn giản là copy file, nếu bạn muốn tự động điền một số thông tin vào file mới (ví dụ: ngày tháng, tên người dùng) thì cần bổ sung thêm các dòng code xử lý sau khi mở wbNew.

Hy vọng chia sẻ này hữu ích cho các bạn. Nếu có thắc mắc hay có cách làm hay hơn, mọi người cùng thảo luận nhé!

4

Hay quá bạn ơi! Mình cũng đang tìm cách để tự động hóa việc tạo file báo cáo theo mẫu. Đoạn code này của bạn có thể copy-paste trực tiếp hay cần tùy chỉnh gì nhiều không?

2

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký