Chào các anh em, hôm nay mình muốn chia sẻ một chút kinh nghiệm về việc tự động hóa tạo file Excel mới theo một mẫu định sẵn bằng VBA. Trong công việc, đôi khi chúng ta cần tạo ra nhiều file Excel có cấu trúc tương tự nhau, ví dụ như báo cáo tuần, báo cáo tháng, hoặc các bảng theo dõi dự án.
Việc này nếu làm thủ công thì khá tốn thời gian và dễ sai sót. Mình đã thử viết một đoạn code VBA để giải quyết vấn đề này và thấy khá hiệu quả. Ý tưởng cơ bản là:
- Tạo một file Excel mẫu (ví dụ:
Template.xlsx) với các sheet, định dạng, công thức, thậm chí là các validation list đã được thiết lập sẵn. - Viết một đoạn code VBA để:
- Hỏi người dùng tên file mới và vị trí lưu.
- Copy toàn bộ nội dung từ file mẫu sang một file mới.
- Lưu file mới với tên và vị trí do người dùng chỉ định.
- Có thể thêm các tùy chỉnh khác như điền sẵn một số thông tin cơ bản vào file mới.
Đoạn code minh họa có thể trông như thế này:
Sub CreateNewFileFromTemplate()
Dim templatePath As String
Dim newFileName As String
Dim newFilePath As String
Dim wbTemplate As Workbook
Dim wbNew As Workbook
' Đường dẫn đến file mẫu
templatePath = ThisWorkbook.Path & "\Template.xlsx"
' Hỏi người dùng tên file mới
newFileName = InputBox("Nhập tên file mới:", "Tạo file mới", "BaoCaoThang_" & Format(Date, "yyyy_mm"))
If newFileName = "" Then Exit Sub
' Hỏi người dùng vị trí lưu
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Chọn thư mục lưu file mới"
.Show
If .SelectedItems.Count = 0 Then Exit Sub
newFilePath = .SelectedItems(1) & "\" & newFileName & ".xlsx"
End With
' Mở file mẫu
Set wbTemplate = Workbooks.Open(templatePath)
' Copy và lưu file mới
wbTemplate.SaveAs newFilePath
Set wbNew = Workbooks(newFileName & ".xlsx")
' Đóng file mẫu
wbTemplate.Close SaveChanges:=False
MsgBox "Đã tạo file mới thành công!", vbInformation
End SubTất nhiên, đoạn code này chỉ là cơ bản. Các bạn có thể tùy biến thêm rất nhiều thứ, ví dụ như yêu cầu người dùng nhập các thông tin để điền vào file mới ngay khi tạo, hoặc tự động đặt tên file dựa trên ngày tháng năm.
Anh em nào có cách làm hay hơn hoặc gặp khó khăn gì khi áp dụng thì cùng thảo luận nhé!