Cách gửi email cá nhân trong Excel

Deal Score0
Deal Score0

Microsoft Outlook là công cụ giúp cho việc gửi thư điện tử từ Excel thông qua macro trở nên tương đối dễ dàng. Với vài thao tác đơn giản, chỉ cần tạo một tập tin Outlook và chỉnh sửa dựa trên dữ liệu từ bảng tính là bạn có thể hoàn thành. 

Tuy nhiên, nếu bạn không muốn dùng Outlook thì sao? Dưới đây PhanMemFREE sẽ mách bạn bí kíp giúp bạn tạo được một email cá nhân trực tiếp ngay từ Excel. Mời các bạn tham khảo.

Ví dụ

Giả sử ta có một bảng tính đơn giản như hình ở dưới. Nhiệm vụ là phải gửi được email đến tất cả 3 người có tên trong danh sách, thông báo cho từng người số tiền thưởng trong năm mà họ được nhận.

Cách gửi email cá nhân trong Excel

Email

Mẫu email đầu tiên sẽ có dạng như sau:

“Dear John Jones,

I am pleased to inform you that your annual bonus is $2,000.

William Rose

President”

Câu lệnh VBA

Dưới đây là nội dung câu lệnh VBA sử dụng để tạo và gửi email tự động:

“Private Declare Function ShellExecute Lib “shell32.dll” _

Alias “ShellExecuteA” (ByVal hwnd As Long, ByVal lpOperation As String, _

ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, _

ByVal nShowCmd As Long) As Long

Sub SendEMail()

    Dim Email As String, Subj As String

    Dim Msg As String, URL As String

    Dim r As Integer, x As Double

    For r = 2 To 4 ‘data in rows 2-4

‘       Get the email address

        Email = Cells(r, 2)

‘       Message subject

        Subj = “Your Annual Bonus”

‘       Compose the message

        Msg = “”

        Msg = Msg & “Dear ” & Cells(r, 1) & “,” & vbCrLf & vbCrLf

        Msg = Msg & “I am pleased to inform you that your annual bonus is “

        Msg = Msg & Cells(r, 3).Text & “.” & vbCrLf & vbCrLf

        Msg = Msg & “William Rose” & vbCrLf

        Msg = Msg & “President”

‘       Replace spaces with %20 (hex)

        Subj = Application.WorksheetFunction.Substitute(Subj, ” “, “%20”)

        Msg = Application.WorksheetFunction.Substitute(Msg, ” “, “%20”)

‘       Replace carriage returns with %0D%0A (hex)

        Msg = Application.WorksheetFunction.Substitute(Msg, vbCrLf, “%0D%0A”)

‘       Create the URL

        URL = “mailto:” & Email & “?subject=” & Subj & “&body=” & Msg

‘       Execute the URL (start the email client)

        ShellExecute 0&, vbNullString, URL, vbNullString, vbNullString, vbNormalFocus

‘       Wait two seconds before sending keystrokes

        Application.Wait (Now + TimeValue(“0:00:02”))

        Application.SendKeys “%s”

    Next r

End Sub”

Cách thức hoạt động của câu lệnh

Macro sẽ chạy vòng xung quanh các hàng, chọn lấy địa chỉ hòm thư email và tự soạn thảo mẫu văn bản tương ứng. Hãy chú ý đến cách sử dụng hàm Substitute trong Excel. Hàm này có tác dụng thay thế các chuỗi kí tự dấu cách dòng và trở về dòng tiếp theo bằng các kí tự mã hex tương đương (vì các kí tự đó không sử dụng được trong link URL).

Sau đó một đường link URL sẽ được tạo và được lưu trong biến “URL”. Thông qua hàm ShellExecute API, trình ứng dụng chạy đường link trên sẽ được kích hoạt.

Sau đó sẽ xuất hiện hộp thoại soạn thảo Outlook Express cho phép bạn gửi email đi. Lệnh Sendkeys sẽ được dùng để kích hoạt tổ hợp phím Alt+S (cũng chính là lệnh “gửi thư” trong Outlook Express). Sẽ mất khoảng 2 giây để đoạn mã có thể gửi thành công. Bạn có thể tùy chỉnh lại mức thời gian trễ này.

Sendkeys chỉ được sử dụng như giải pháp cuối cùng. Bởi vì do có độ trễ nhất định nên sẽ mất thời gian một chút khi chạy macro này.

Bạn cần phải lưu ý:

  • Độ dài email tối đa không quá 255 kí tự
  • Hướng đi ban đầu là sử dụng phương pháp FollowHyperlink trong bảng tính. Tuy nhiên lại không có cách nào có thể chèn được khoảng trắng vào nội dung email.

Cập nhật mới

Bugs hướng dẫn cách để chèn vào 1 đoạn ký tự tĩnh vào nội dung email, từ đó cho phép bạn có thể soạn thảo nhiều hơn 255 ký tự cho phép. Sau đó sao chép nội dung kí tự vào Clipboard. Sau đó thêm chuỗi mã lệnh này đằng sau câu lệnh Application.Sendkeys theo mẫu dưới đây:

Application.SendKeys “{Tab}{Tab}{Tab}{Tab}{Tab}^{End}{Return}{Return}^v”

Lệnh này sẽ chạy liên tục qua phần tiêu đề cửa sổ soạn thảo email, trỏ xuống cuối đoạn văn bản, tự động xuống dòng 2 lần và cuối cùng là dán nội dung ký tự vừa được sao chép lên Clipboard vào trong văn bản đích. Số lần Tab cần dùng là bao nhiêu thì cần phải thử nhiều lần để biết chính xác.

We will be happy to hear your thoughts

Leave a reply

Phần mềm FREE