Chào các anh chị em trong diễn đàn,
Dạo này công việc dồn dập, mỗi tuần đều phải gửi báo cáo Excel cho sếp và các bộ phận liên quan. Làm thủ công mất khá nhiều thời gian, đặc biệt là lúc cuối tuần.
Mình tình cờ tìm hiểu và áp dụng thành công việc tự động hóa gửi email báo cáo bằng Outlook kết hợp với VBA. Nay chia sẻ lại với mọi người, hy vọng giúp ích được cho ai đang gặp tình huống tương tự.
Ý tưởng chính:
- Tạo một file Excel chứa dữ liệu báo cáo.
- Viết một đoạn mã VBA để:
- Tự động lấy dữ liệu từ file báo cáo.
- Tạo một email mới trong Outlook.
- Điền sẵn người nhận, tiêu đề, nội dung email.
- Đính kèm file báo cáo (hoặc một file Excel khác tùy chỉnh).
- (Tùy chọn) Gửi email ngay hoặc đặt lịch gửi.
Về đoạn mã VBA:
Đoạn mã này khá đơn giản, chủ yếu là tương tác với Outlook Object Library. Nếu ai chưa quen, có thể tham khảo các ví dụ trên mạng hoặc hỏi mình. Mình đang dùng cấu trúc tương tự như thế này:
Sub SendReportEmail()
Dim OutlookApp As Object
Dim MailItem As Object
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' Hoặc sheet chứa dữ liệu của bạn
Set OutlookApp = CreateObject("Outlook.Application")
Set MailItem = OutlookApp.CreateItem(0)
With MailItem
.To = "nguoinhan@example.com"
.CC = ""
.BCC = ""
.Subject = "Báo cáo Tuần - " & Format(Date, "dd/mm/yyyy")
.HTMLBody = "<p>Kính gửi Anh/Chị,</p><p>Em xin gửi báo cáo tuần.</p>" ' Có thể tùy chỉnh nội dung HTML
.Attachments.Add ThisWorkbook.FullName ' Đính kèm chính file này
'.Send ' Bỏ comment để gửi tự động
.Display ' Hiển thị để kiểm tra trước khi gửi
End With
Set MailItem = Nothing
Set OutlookApp = Nothing
End SubLưu ý nhỏ:
- Cần bật tham chiếu đến Microsoft Outlook XX.X Object Library trong VBA Editor (Tools -> References).
- Nếu muốn gửi tự động, hãy bỏ dấu nháy đơn
'ở dòng.Sendvà comment dòng.Display. - Có thể kết hợp với hàm hẹn giờ trong Excel hoặc Task Scheduler của Windows để chạy tự động theo lịch.
Ai đã từng làm hoặc có cách nào hay hơn thì chia sẻ thêm cho mình học hỏi với nhé!