Menu

Tự động hóa việc gửi email báo cáo hàng tuần bằng VBA

Thào Trinh Long 11/03/2026 14:30 139 lượt xem 2 trả lời

Chào mọi người,

Dạo này công việc của mình liên quan nhiều đến việc gửi báo cáo hàng tuần cho sếp và các phòng ban khác. Mỗi lần như vậy đều phải mở email, đính kèm file, gõ nội dung rồi mới gửi. Khá tốn thời gian và dễ quên.

Sau một hồi tìm hiểu, mình đã viết được một đoạn code VBA nho nhỏ để tự động hóa việc này. Code sẽ tự động mở Outlook, tạo một email mới, đính kèm file báo cáo (mình quy định sẵn tên file và thư mục chứa), điền sẵn tiêu đề và nội dung email cơ bản. Mình chỉ cần kiểm tra lại và bấm gửi.

Đây là đoạn code mình đang dùng, chia sẻ để mọi người tham khảo và đóng góp ý kiến:

Sub SendWeeklyReport() ' Khai báo biến Dim OutlookApp As Object Dim MailItem As Object Dim FilePath As String Dim FileName As String Dim Recipient As String Dim Subject As String Dim Body As String ' Thiết lập đường dẫn và tên file báo cáo FilePath = "C:\BaoCao\" ' Thay đổi đường dẫn thư mục của bạn FileName = "BaoCao_Tuan_" & Format(Date, "yyyy-mm-dd") & ".xlsx" ' Tên file có dạng BaoCao_Tuan_YYYY-MM-DD.xlsx ' Địa chỉ người nhận Recipient = "sep.abc@example.com" ' Thay bằng địa chỉ email của bạn ' Tiêu đề email Subject = "Báo cáo Tuần " & Format(Date, "yyyy-mm-dd") ' Nội dung email Body = "Kính gửi Anh/Chị,

Em xin gửi báo cáo tuần. Vui lòng xem file đính kèm.

Trân trọng,
[Tên của bạn]" ' Khởi tạo đối tượng Outlook Application On Error Resume Next Set OutlookApp = GetObject(, "Outlook.Application") If OutlookApp Is Nothing Then Set OutlookApp = CreateObject("Outlook.Application") End If ' Tạo một mail mới Set MailItem = OutlookApp.CreateItem(0) ' 0 = olMailItem With MailItem .To = Recipient .Subject = Subject .Body = Body .Attachments.Add FilePath & FileName .Display ' Sử dụng .Send để gửi trực tiếp mà không cần xem lại End With ' Giải phóng biến Set MailItem = Nothing Set OutlookApp = Nothing MsgBox "Email báo cáo đã được tạo!", vbInformation End Sub

Lưu ý:

  • Bạn cần thay đổi FilePath, FileName, Recipient và nội dung Body cho phù hợp với tình huống của mình.
  • Đoạn code trên sẽ mở email ra để bạn kiểm tra trước khi gửi. Nếu muốn gửi tự động hoàn toàn, bạn có thể thay .Display bằng .Send. Tuy nhiên, mình khuyến khích dùng .Display để đảm bảo không có sai sót.
  • Đảm bảo rằng bạn đã cài đặt Outlook và thiết lập tài khoản email.

Hy vọng mẹo nhỏ này sẽ giúp ích cho các bạn. Nếu có cách làm hay hơn hoặc gặp lỗi gì, mọi người cùng thảo luận nhé!

5

Hay quá bạn ơi! Việc tự động hóa gửi email báo cáo này thực sự giúp tiết kiệm khối thời gian đấy. Mình cũng đang có nhu cầu tương tự, không biết bạn có thể chia sẻ cụ thể hơn về cách bạn xử lý phần đính kèm file không? Ví dụ, nếu file báo cáo thay đổi tên mỗi tuần thì mình có cách nào để code tự nhận diện được không nhỉ?

2

Hay quá bạn ơi! Việc tự động hóa gửi email báo cáo này thực sự giúp tiết kiệm khối thời gian đấy. Mình cũng đang có nhu cầu tương tự, không biết bạn có thể chia sẻ cụ thể hơn về cách bạn xử lý phần đính kèm file không? Ví dụ, nếu file báo cáo thay đổi tên mỗi tuần thì mình có cách nào để code tự nhận diện được không nhỉ?

Thường thì mình sẽ dùng hàm Dir() để tìm file theo một mẫu tên nhất định (ví dụ: "BaoCao_TuDong_*.xlsx"). Nếu tên file cố định thì việc đính kèm đơn giản hơn nhiều rồi.

0

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

Đăng nhập Đăng ký