Menu

Tự động hóa gửi báo cáo Excel bằng Outlook và VBA - Kinh nghiệm cá nhân

Trương Kiệm Tín 05/06/2026 18:11 315 lượt xem 3 trả lời

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 Sub

Lư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 .Send và 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é!

4

Cảm ơn bạn đã chia sẻ kinh nghiệm quý báu này! Mình cũng đang tìm cách để tối ưu hóa quy trình gửi báo cáo hàng tuần, việc tự động hóa bằng VBA và Outlook nghe rất khả thi.

Cho mình hỏi thêm một chút, ngoài việc tự động đính kèm file báo cáo, bạn có cách nào để VBA tự động lấy danh sách người nhận từ một ô trong Excel không? Đôi khi danh sách này cũng thay đổi theo từng báo cáo.

4

Hay quá bạn ơi! Mình cũng đang đau đầu vụ gửi báo cáo Excel thủ công mỗi tuần, nhất là khi deadline sát nút. Cái vụ tự động hóa bằng VBA và Outlook này đúng là cứu cánh.

Bạn có thể chia sẻ chi tiết hơn về đoạn mã VBA mà bạn dùng được không? Cụ thể là làm sao để nó tự động đính kèm file báo cáo Excel, rồi điền sẵn người nhận, tiêu đề email không? Mình đang rất muốn áp dụng thử.

5

Hay quá bạn ơi! Mình cũng đang đau đầu vụ gửi báo cáo Excel thủ công mỗi tuần, nhất là khi deadline sát nút. Cái vụ tự động hóa bằng VBA và Outlook này đúng là cứu cánh.

Bạn có thể chia sẻ chi tiết hơn về đoạn mã VBA mà bạn dùng được không? Cụ thể là làm sao để nó tự động đính kèm file báo cáo Excel, rồi điền sẵn người nhận, tiêu đề email không? Mình đang rất muốn áp dụng thử.

2

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

Đăng nhập Đăng ký