kiến thức [Excel VBA] Gửi email hàng loạt bằng Outlook từ tệp Excel

  • Người tạo chủ đề Người tạo chủ đề NguyenDang95
  • Ngày bắt đầu Ngày bắt đầu

NguyenDang95

Senior Member
Chào mọi người. Trong công việc, đôi khi mọi người cần gửi email đến một nhóm với nội dung và theo điều kiện nhất định. Khi tìm hiểu hướng dẫn trên mạng, người ta thường sẽ đi theo hướng (không tính đến trường hợp Mail Merge):
  • Thiết kế một tệp Excel với đầy đủ các trường như địa chỉ email người nhận, tiêu đề thư (Subject), nội dung thư (Body), tệp đính kèm (Attachments), v.v.
  • Viết macro đọc qua từng dòng tương ứng với những trường nói trên để áp dụng các giá trị tương ứng cho email mới tạo.
  • Gửi email đi.
Tuy nhiên nếu gặp trường hợp người dùng có nhiều tài khoản email trong Outlook thì phương án trên lại không linh động khi người dùng muốn gửi email bằng một tài khoản email nhất định chứ không phải tài khoản email mặc định.
Như vậy, chúng ta sẽ tiến hành thêm chức năng này.

Giả sử chúng ta thiết kế một tệp Excel dùng để gửi email hàng loạt như sau:

1667574250369.png


Để thêm chức năng chọn tài khoản email để gửi đi, chúng ta tạo một Combo Box bằng cách chọn thẻ Developer | Insert | Combo Box (Form Control).

1667574776064.png


Đặt code dưới đây vào ThisWorkbook trong cửa sổ soạn thảo VBA (thẻ Developer | Visual Basic | nhấp đúp chuột vào ThisWorkbook).

Mã:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim objComboBox As Excel.Shape
    Set objComboBox = Sheets(1).Shapes("Drop Down 6")
    objComboBox.ControlFormat.RemoveAllItems
    ThisWorkbook.Save
    Set objComboBox = Nothing
End Sub

Private Sub Workbook_Open()
    Call GetOutlookAccountsInfo
End Sub

Code trên đây chỉ có hai nhiệm vụ đơn giản là lấy thông tin tài khoản email trong Outlook khi mở tệp Excel này và thêm vào Combo Box trong Sheet, còn nhiệm vụ còn lại là xóa thông tin trong Combo Box khi đóng lại tệp Excel này (để tránh thông tin bị cộng dồn thêm sau mỗi lần mở tệp Excel này).
Tiếp theo tiến hành sửa code trong hai nút bấm Command Button trên Sheet (đính kèm theo bài viết này).
Tiến hành chạy thử.

1667575242964.png


Mọi người có thể tìm thấy tệp Excel nói trên đính kèm theo bài viết này.
 

Tệp đính kèm

Có cách nào để nó gửi mỗi người 1 file riêng ko bác? kiểu phiếu lương ý
 
Có cách nào để nó gửi mỗi người 1 file riêng ko bác? kiểu phiếu lương ý
Hiện tại mình đang dùng vba để gửi phiếu lương, lấy dữ liệu từ excel gửi mail từ outlook. Nếu bác cần thì file đây.
Mail Merge thôi thím.
Bác cho e hỏi có cách nào giữ đc tiếng việt khi lấy dữ liệu từ excel vào vba xong xuất ra ko ạ
 

Tệp đính kèm

Sửa lần cuối:
Hiện tại mình đang dùng vba để gửi phiếu lương, lấy dữ liệu từ excel gửi mail từ outlook. Nếu bác cần thì file đây.

Bác cho e hỏi có cách nào giữ đc tiếng việt khi lấy dữ liệu từ excel vào vba xong xuất ra ko ạ
Thím cứ làm bằng thao tác bình thường thôi.
 
có cách nào để outlook send luôn mà ko cần bấm thủ công không bác
 
cảm ơn bác, cho em hỏi nốt là có cách nào delay giữa các lần gửi tin không
server công ty em không cho gửi nhanh quá
cách 5s gửi 1 lần là ngon bác ạ
Thím thêm phương thức Application.Wait(Now + TimeValue("0:00:5") dưới phương thức .Send là được.
 
Sửa lần cuối:

Thống kê chủ đề

Ngày tạo
NguyenDang95,
Người trả lời cuối
dtadptvl,
Trả lời
11
Lượt xem
4.344
Quay lại
Lên đầu trang