Tự động gửi email cho phép thiết kế thông điệp mẫu gửi đến người dùng. Tạo và gửi email tự động giúp tiết kiệm thời gian. Vì cho phép gửi email tại thời điểm cụ thể, tự động hóa email là cách tuyệt vời tương tác khách hàng tiềm năng. Tính năng quý giá nhất là gửi thông báo email đến người đúng lúc đúng chỗ. Bài viết demo các VBA Macro Excel tự động gửi email khi điều kiện đáp ứng.
Tải workbook thực hành.
3 Phương Pháp Gửi Email Tự Động Khi Điều Kiện Đáp Ứng Trong Excel
Khi điều kiện đáp ứng, thường cần gửi email cho khách hàng. Dùng VBA macros tùy chỉnh chức năng gửi thư. Kết quả: gửi email cho nhiều người cùng lúc qua VBA. Để gửi email tự động bằng macro, máy tính cần cài sẵn Outlook. Mã sẽ dùng Outlook gửi email cho người nhận.
1. Excel VBA Macro Gửi Email Tự Động Dựa Trên Giá Trị Ô
Dùng VBA macro Excel gửi email tự động dựa trên giá trị cột nhất định. Dùng tập dữ liệu dưới. Nếu giá trị ô D5 lớn hơn 10, hàm sẽ tự động gửi email.
Giả sử tập dữ liệu chi tiết khách hàng siêu thị: cột B tên khách, cột C email, cột D số tiền nợ mua hàng. Muốn gửi email nhắc thanh toán, nhưng chỉ gửi nếu nợ > 10. Xem quy trình gửi email tự động dựa trên giá trị ô khi điều kiện đáp ứng.

CÁC BƯỚC:
- Vào tab Developer (Nhà phát triển) từ ribbon.
- Từ nhóm Code, click Visual Basic mở Visual Basic Editor. Hoặc nhấn Alt + F11.

- Hoặc chuột phải worksheet chọn View Code (Xem mã). Cũng mở Visual Basic Editor.

- Cửa sổ Visual Basic Editor hiện ra nơi viết mã tạo bảng từ vùng.
- Copy dán VBA code dưới đây.
Mã VBA:
Dim r As Range Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Target.Cells.Count > 1 Then Exit Sub Set r = Intersect(Range("D5"), Target) If r Is Nothing Then Exit Sub If IsNumeric(Target.Value) And Target.Value > 10 Then Call Send_Mail_Automatically1 End If End Sub Sub Send_Mail_Automatically1() Dim ob1 As Object Dim ob2 As Object Dim str As String Set ob1 = CreateObject("Outlook.Application") Set ob2 = ob1.CreateItem(0) str = "Hello!" & vbNewLine & vbNewLine & "To prevent further costs," _ & vbNewLine & "please pay before the deadline." On Error Resume Next With ob2 .To = Range("C5").Value .cc = "" .BCC = "" .Subject = "Request to Pay Bill" .Body = str .Send End With On Error GoTo 0 Set ob2 = Nothing Set ob1 = Nothing End Sub
- Chạy code click nút RunSub hoặc nhấn F5.

- Hộp thoại Macros hiện ra. Chọn macro đúng, nhấn Run.

- Mở ứng dụng Outlook kiểm tra hộp thư đến, sẽ thấy email vừa gửi qua VBA Macro từ Excel.

Giải Thích Mã VBA
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Target.Cells.Count > 1 Then Exit Su Set r = Intersect(Range("D5"), Target) If r Is Nothing Then Exit Sub If IsNumeric(Target.Value) And Target.Value > 10 Then Call Send_Mail_Automatically1 End If End Sub
Dùng Private Sub vì không chạy qua cửa sổ Macro. Khi giá trị ô thay đổi, code tự chạy. Dùng Private Sub với sự kiện Worksheet Change. Giới hạn 1 ô là D5. Kiểm tra lớn hơn 10. Nếu đáp ứng, thủ tục Send_Email_Automatically1 Sub Procedure chạy.
Sub Send_Mail_Automatically1() Dim ob1 As Object Dim ob2 As Object Dim str As String Set ob1 = CreateObject("Outlook.Application") Set ob2 = ob1.CreateItem(0) str = "Hello!" & vbNewLine & vbNewLine & "To prevent further costs," & vbNewLine & "please pay before the deadline." On Error Resume Next With ob2 .To = Range("C5").Value .cc = "" .BCC = "" .Subject = "Request to Pay Bill" .Body = str .Send
Dùng thủ tục Send_Email_Automatically1. Khai báo biến. Dùng Outlook làm email client. Nhập nội dung email vào code; str là thân email, gửi đến giá trị ô C5 (nơi lưu email khách), đặt chủ đề '.Subject'. Dùng '.Send' gửi email.
Xem thêm: Tự động gửi email từ Excel dựa trên nội dung ô (2 phương pháp)
2. Gửi Email Tự Động Dựa Trên Ngày Hạn (Due Date) Bằng VBA
Phương pháp này dùng Excel VBA macro gửi email tự động khi ngày hạn thanh toán đến gần (nhắc nhở). Dùng tập dữ liệu dưới: cột B tên khách, cột C email, cột D nội dung thư, cột E hạn thanh toán. Xem các bước gửi email tự động theo ngày khi điều kiện đáp ứng.

CÁC BƯỚC:
- Vào tab Developer từ ribbon.
- Click Visual Basic mở Visual Basic Editor.
- Cách khác: nhấn Alt + F11.
- Hoặc chuột phải sheet chọn View Code.
- Cửa sổ Visual Basic mở ra.
- Copy dán mã VBA dưới.
Mã VBA:
Public Sub Send_Email_Automatically2() Dim rngD, rngS, rngT As Range Dim ob1, ob2 As Object Dim LRow, x As Long Dim l, strbody, rSendValue, mSub As String On Error Resume Next Set rngD = Application.InputBox("Deadline Range:", "Exceldemy", , , , , , 8) If rngD Is Nothing Then Exit Sub Set rngS = Application.InputBox("Email Range:", "Exceldemy", , , , , , 8) If rngS Is Nothing Then Exit Sub Set rngT = Application.InputBox("Email Topic Range:", "Exceldemy", , , , , , 8) If rngT Is Nothing Then Exit Sub LRow = rngD.Rows.Count Set rngD = rngD(1) Set rngS = rngS(1) Set rngT = rngT(1) Set ob1 = CreateObject("Outlook.Application") For x = 1 To LRow rngDValue = "" rngDValue = rngD.Offset(x - 1).Value If rngDValue <> "" Then If CDate(rngDValue) - Date <= 7 And CDate(rngDValue) - Date > 0 Then rngSValue = rngS.Offset(x - 1).Value mSub = rngT.Offset(x - 1).Value & " on " & rngDValue l = "<br><br>" strbody = "<HTML><BODY>" strbody = strbody & "Hello! " & rngSValue & l strbody = strbody & rngT.Offset(x - 1).Value & l strbody = strbody & "</BODY></HTML>" Set ob2 = ob1.CreateItem(0) With ob2 .Subject = mSub .To = rSendValue .HTMLBody = strbody .Send End With Set ob2 = Nothing End If End If Next Set ob1 = Nothing End Sub
- Nhấn F5 hoặc click Run Sub chạy code.

- Chọn vùng cột hạn chót (Deadline) nhấn OK.

- Tương tự chọn vùng cột email nhấn OK.

- Chọn vùng cột thông điệp (message) nhấn OK.

- Xong. Thư đã gửi đến địa chỉ email. Kiểm tra hộp thư Outlook để xác nhận.
Giải Thích Mã VBA
Public Sub Send_Email_Automatically2() Dim rngD, rngS, rngT As Range Dim ob1, ob2 As Object Dim LRow, x As Long Dim l, strbody, rSendValue, mSub As String On Error Resume Next Set rngD = Application.InputBox("Deadline Range:", "Exceldemy", , , , , , 8) If rngD Is Nothing Then Exit Sub Set rngS = Application.InputBox("Email Range:", "Exceldemy", , , , , , 8) If rngS Is Nothing Then Exit Sub Set rngT = Application.InputBox("Email Topic Range:", "Exceldemy", , , , , , 8) If rngT Is Nothing Then Exit Sub LRow = rngD.Rows.Count Set rngD = rngD(1) Set rngS = rngS(1) Set rngT = rngT(1) Set ob1 = CreateObject("Outlook.Application")
Dùng Private Sub, tên thủ tục Send_Email_Automatically2. Khai báo biến. Dùng InputBox nhập vùng giá trị. Chọn Outlook làm mail client.
For x = 1 To LRow rngDValue = "" rngDValue = rngD.Offset(x - 1).Value If rngDValue <> "" Then If CDate(rngDValue) - Date <= 7 And CDate(rngDValue) - Date > 0 Then rngSValue = rngS.Offset(x - 1).Value mSub = rngT.Offset(x - 1).Value & " on " & rngDValue l = "<br><br>" strbody = "<HTML><BODY>" strbody = strbody & "Hello! " & rngSValue & l strbody = strbody & rngT.Offset(x - 1).Value & l strbody = strbody & "</BODY></HTML>" Set ob2 = ob1.CreateItem(0) With ob2 .Subject = mSub .To = rSendValue .HTMLBody = strbody .Send
Dùng hàm VBA CDate kiểm tra ngày trong 7 ngày tới từ hôm nay. Thiết lập nội dung email trong code. Dùng '.Send' gửi email.
Xem thêm: Cách tự động gửi email từ Excel dựa trên ngày tháng
Bài đọc tương tự
- Cách xem ai đang trong file Excel chia sẻ (với các bước nhanh)
- Cách bật Share Workbook trong Excel
- Gửi email nhắc nhở tự động từ worksheet Excel bằng VBA
- Cách gửi email hàng loạt từ Outlook dùng Excel (3 cách)
- Cách áp dụng Macro gửi email từ Excel kèm file đính kèm
3. Tự Động Gửi Email Bằng Excel VBA Khi Nhiều Điều Kiện Đáp Ứng
Phương pháp này lại dùng VBA Macro gửi email, nhưng chỉ gửi khi nhiều điều kiện đồng thời đáp ứng. Xem quy trình gửi email tự động.

CÁC BƯỚC:
- Click tab Developer trên ribbon.
- Mở Visual Basic Editor click Visual Basic.
- Hoặc nhấn Alt + F11.
- Hoặc chuột phải sheet chọn View Code.
- Cửa sổ Visual Basic hiện ra.
- Viết mã tại đây.
Mã VBA:
Sub Send_Email_Automatically3() Dim wrksht As Worksheet Dim add As String, mSub As String, N As String Dim eRow As Long, x As Long Set wrksht = ThisWorkbook.Sheets("Multiple Conditions") With wrksht eRow = .Cells(.Rows.Count, 5).End(xlUp).Row For x = 5 To eRow If .Cells(x, 4) >= 1 And .Cells(x, 5) = "Yes" Then add = .Cells(x, 3) mSub = "Request to Pay Bill" N = .Cells(x, 2) Call Multiple_Conditions(add, mSub, N) End If Next x End With End Sub Sub Multiple_Conditions(mAddress As String, mSubject As String, eName As String) Dim ob1 As Object Dim ob2 As Object Set ob1 = CreateObject("Outlook.Application") Set ob2 = ob1.CreateItem(0) With ob2 .To = add .CC = "" .BCC = "" .Subject = mSub .Body = "Hello!" & N & ", To prevent further costs, please pay before the deadline." .Attachments.add ActiveWorkbook.FullName .Send End With Set pMail = Nothing Set pApp = Nothing End Sub
- Nhấn F5 chạy code.

- Hộp thoại Macros hiện ra. Chọn macro phù hợp nhấn Run.

- Tương tự, mở Outlook kiểm tra hộp thư, sẽ thấy email vừa gửi qua VBA Macro từ Excel.
Giải Thích Mã VBA
Sub Send_Email_Automatically3() Dim wrksht As Worksheet Dim add As String, mSub As String, N As String Dim eRow As Long, x As Long Set wrksht = ThisWorkbook.Sheets("Multiple Conditions") With wrksht eRow = .Cells(.Rows.Count, 5).End(xlUp).Row For x = 5 To eRow If .Cells(x, 4) >= 1 And .Cells(x, 5) = "Yes" Then add = .Cells(x, 3) mSub = "Request to Pay Bill" N = .Cells(x, 2) Call Multiple_Conditions(add, mSub, N)
Dùng 2 thủ tục khác. Send_Email_Automatically3 là Sub Procedure đầu. Đặt sheet 'Multiple Conditions', khai báo Variable. Tìm số hàng cuối. Vì giá trị bắt đầu hàng 5, lặp từ hàng 5 đến cuối.
Sub Multiple_Conditions(mAddress As String, mSubject As String, eName As String) Dim ob1 As Object Dim ob2 As Object Set ob1 = CreateObject("Outlook.Application") Set ob2 = ob1.CreateItem(0) With ob2 .To = add .CC = "" .BCC = "" .Subject = mSub .Body = "Hello!" & N & ", To prevent further costs, please pay before the deadline." .Attachments.add ActiveWorkbook.FullName .Send
Gọi Multiple_Conditions, Sub Procedure thứ 2. Chọn Outlook mail client. Thiết lập nội dung email. Dùng kỹ thuật Attachment đính kèm file Excel. Dùng '.Send' gửi.
Xem thêm: Cách gửi email nếu điều kiện đáp ứng trong Excel (3 phương pháp dễ dàng)
Kết Luận
Các phương pháp trên hỗ trợ Gửi Email Tự Động Khi Điều Kiện Đáp Ứng Trong Excel. Hy vọng hữu ích! Nếu có câu hỏi, góp ý, phản hồi, hãy để lại phần comment. Hoặc xem thêm bài viết khác tại blog ExcelDemy.com!
Các Bài Viết Liên Quan
- Cách gửi email tự động từ Excel đến Outlook (4 phương pháp)
- Cách gửi email từ Excel kèm nội dung bằng Macro (với các bước dễ dàng)
- Excel Macro: Gửi email đến địa chỉ trong ô (2 cách dễ dàng)
- Cách gửi hàng loạt email từ bảng tính Excel (2 phương pháp dễ dàng)
- Macro gửi email từ Excel kèm nội dung (3 trường hợp hữu ích)
- Cách gửi bảng tính Excel có thể chỉnh sửa qua email (3 phương pháp nhanh)