Chào các anh em trong diễn đàn,
Dạo này mình có dự án cần gửi email thông báo đến hàng trăm khách hàng mỗi ngày, mà làm thủ công thì tốn quá nhiều thời gian. Sau một hồi mày mò, mình đã viết được một đoạn code VBA nho nhỏ để tự động hóa việc này. Nay chia sẻ lên đây để mọi người cùng tham khảo và đóng góp ý kiến.
Ý tưởng:
- Đọc dữ liệu từ một bảng Excel (bao gồm Tên, Email, Nội dung tùy chỉnh).
- Sử dụng Outlook để gửi email.
- Có thể tùy chỉnh nội dung email cho từng người.
Code mẫu (phần chính):
Sub SendEmails()
Dim OutApp As Object
Dim OutMail As Object
Dim ws As Worksheet
Dim lRow As Long
Dim i As Long
Set ws = ThisWorkbook.Sheets("Sheet1") ' Đổi tên sheet nếu cần
lRow = ws.Cells(Rows.Count, "A").End(xlUp).Row ' Lấy dòng cuối cùng của cột A
On Error Resume Next
Set OutApp = GetObject(, "Outlook.Application")
If OutApp Is Nothing Then
Set OutApp = CreateObject("Outlook.Application")
End If
On Error GoTo 0
For i = 2 To lRow ' Bắt đầu từ dòng 2 để bỏ qua tiêu đề
Set OutMail = OutApp.CreateItem(0) ' 0 = olMailItem
With OutMail
.To = ws.Cells(i, "B").Value ' Cột B chứa địa chỉ Email
.Subject = "Thông báo quan trọng từ công ty" ' Tiêu đề email
.HTMLBody = "<p>Kính gửi: " & ws.Cells(i, "A").Value & "</p>" & _ ' Cột A chứa Tên
"<p>Đây là nội dung email được cá nhân hóa...</p>" & _
"<p>Trân trọng,</p>"
.Display ' Hoặc .Send để gửi trực tiếp
End With
Set OutMail = Nothing
Next i
Set OutApp = Nothing
MsgBox "Hoàn thành gửi email!", vbInformation
End Sub
Lưu ý:
- Bạn cần tham chiếu đến Microsoft Outlook Object Library trong VBA Editor (Tools -> References).
- Code trên đang dùng `.Display` để hiển thị email trước khi gửi. Nếu muốn gửi tự động hoàn toàn, bạn đổi thành `.Send`. Tuy nhiên, hãy cẩn thận khi gửi tự động để tránh gửi nhầm hoặc gửi quá nhiều.
- Cấu trúc file Excel cần có các cột Tên, Email, và có thể thêm các cột khác để tùy chỉnh nội dung email.
Anh em nào có kinh nghiệm xử lý email bằng VBA hoặc có cách tối ưu hơn thì chỉ giáo thêm nhé!