Cách gửi email từ bảng tính Excel bằng tập lệnh VBA

Gửi email từ Microsoft Excel chỉ yêu cầu một vài tập lệnh đơn giản. Thêm chức năng này vào bảng tính và bạn thực sự có thể tận dụng tối đa mọi tính năng trong Excel.

Quantrimang đã trình bày rất nhiều các macro Excel tuyệt vời, có thể thực hiện được những thứ giống như các tập lệnh VBA, nhưng không cần kiến ​​thức lập trình. Bên cạnh đó, còn có nhiều thứ nâng cao hơn bạn chỉ có thể làm với VBA, như tạo báo cáo trong bảng tính về tất cả thông tin trên máy tính của bạn.

Tại sao lại gửi email từ Excel?

Có rất nhiều lý do tại sao bạn có thể muốn gửi email từ bên trong Microsoft Excel.

Có thể bạn có nhân viên cập nhật tài liệu hoặc bảng tính hàng tuần và bạn muốn nhận được thông báo qua email khi những cập nhật đó được thực hiện. Hoặc bạn có thể có một bảng tính chứa các địa chỉ mail liên lạc và bạn muốn gửi một email đến tất cả những địa chỉ đó cùng một lúc.

Có thể bạn đang nghĩ rằng việc sử dụng tập lệnh trong Excel sẽ phức tạp. Nhưng yên tâm đi! Thực hiện điều đó vô cùng đơn giản.

Bài viết này sẽ hướng dẫn bạn đọc sử dụng một tính năng có sẵn trong Excel VBA từ rất lâu rồi. Đó là Collaboration Data Objects (CDO).

CDO

CDO là một thành phần trong quá trình gửi email, được sử dụng từ những hệ điều Windows đầu tiên. Trước đây, nó được gọi là CDONTS, và sau đó với sự ra đời của Windows 2000XP, cái tên này đã được thay thế bằng "CDO for Windows 2000" (CDO cho Windows 2000). Thành phần này đã được bao gồm trong cài đặt VBA ở các ứng dụng Microsoft Word hoặc Excel và sẵn sàng để sử dụng.

Sử dụng thành phần làm cho việc gửi email từ bên trong các sản phẩm Windows với VBA cực kỳ dễ dàng. Trong ví dụ này, bạn sẽ sử dụng thành phần CDO trong Excel để gửi email chứa kết quả từ một ô Excel cụ thể.

Cách gửi email từ bảng tính Excel bằng tập lệnh VBA

Bước 1: Tạo VBA Macro

Bước đầu tiên là vào tab Excel Developer.

Bên trong tab Developer, nhấp vào Insert trong hộp Controls, rồi chọn Command Button thích hợp.

Command Button

Vẽ nó vào trang tính và sau đó tạo macro mới cho trang tính bằng cách nhấp vào Macro trong ribbon Developer.

Macro

Khi bạn nhấp vào nút Create, nó sẽ mở trình chỉnh sửa VBA.

Thêm tham chiếu vào thư viện CDO bằng cách điều hướng đến Tools > References trong trình chỉnh sửa.

Thư viện CDO

Cuộn xuống danh sách cho đến khi bạn tìm thấy Microsoft CDO for Windows 2000 Library. Đánh dấu vào hộp kiểm và nhấp OK.

Ok

Khi bạn nhấp vào OK, hãy ghi nhớ tên hàm mà bạn đang dán tập lệnh. Bạn sẽ cần nó sau này.

Bước 2: Thiết lập các trường “From” và “To” của CDO

Để thực hiện việc này, trước tiên bạn cần tạo các đối tượng trong mail và thiết lập tất cả các trường cần thiết để gửi email.

Hãy ghi nhớ rằng mặc dù nhiều trường là tùy chọn, bạn bắt buộc phải điền các trường FromTo.

Dim CDO_Mail As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim strSubject As String
Dim strFrom As String
Dim strTo As String
Dim strCc As String
Dim strBcc As String
Dim strBody As String

strSubject = "Results from Excel Spreadsheet"
strFrom = "rdube02@gmail.com"
strTo = "rdube02@gmail.com"
strCc = ""
strBcc = ""
strBody = "The total results for this quarter are: " & Str(Sheet1.Cells(2, 1))

Điều thú vị nhất là bạn có thể tạo bất kỳ chuỗi nào bạn muốn để tùy chỉnh một email đầy đủ và gán nó vào biến strBody.

Ghép các thành phần của email lại với nhau, bằng cách sử dụng chuỗi & để chèn dữ liệu từ bất kỳ trang tính Microsoft Excel nào vào ngay trong thư email, giống như được hiển thị ở trên.

Bước 3: Định cấu hình CDO để sử dụng SMTP bên ngoài

Phần tiếp theo là nơi bạn sẽ cấu hình CDO để sử dụng bất kỳ máy chủ SMTP bên ngoài nào với mục đích gửi email.

Ví dụ này là thiết lập không phải SSL thông qua Gmail. CDO có khả năng SSL, nhưng nằm ngoài phạm vi của bài viết này. Nếu bạn cần sử dụng SSL, code nâng cao này trong Github có thể hữu ích cho bạn.

Set CDO_Mail = CreateObject("CDO.Message")
On Error GoTo Error_Handling

Set CDO_Config = CreateObject("CDO.Configuration")
CDO_Config.Load -1

Set SMTP_Config = CDO_Config.Fields

With SMTP_Config
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "email@website.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Update
End With

With CDO_Mail
Set .Configuration = CDO_Config
End With

Bước 4: Hoàn tất thiết lập CDO

Bây giờ bạn đã cấu hình xong kết nối đến máy chủ SMTP để gửi email. Tất cả những gì còn lại bạn phải làm là điền vào các trường thích hợp cho CDO_Mail object và phát lệnh Send.

Đây là cách bạn làm điều đó:

CDO_Mail.Subject = strSubject
CDO_Mail.From = strFrom
CDO_Mail.To = strTo
CDO_Mail.TextBody = strBody
CDO_Mail.CC = strCc
CDO_Mail.BCC = strBcc
CDO_Mail.Send

Error_Handling:
If Err.Description <> "" Then MsgBox Err.Description

Sẽ không có bất kỳ cảnh báo bảo mật nào. Điều này có thể xảy ra khi bạn sử dụng đối tượng mail Outlook.

CDO chỉ cần đặt tất cả các thành phần của email lại với nhau và sử dụng chi tiết kết nối máy chủ SMTP để kích hoạt việc gửi mail. Đó là cách dễ dàng nhất để kết hợp email vào các tập lệnh Microsoft Word hoặc Excel VBA.

Để kết nối Command Button với tập lệnh này, hãy vào trình chỉnh sửa code và nhấp vào Sheet1 để xem VBA code cho trang tính đó.

Nhập tên của hàm mà bạn đã dán tập lệnh ở trên.

Nhập tên hàm

Đây là mail mà bạn sẽ nhận được trong hộp thư đến của mình:

Ví dụ

Lưu ý: Nếu bạn nhận được lỗi The transport failed to connect to the server, hãy đảm bảo bạn đã nhập đúng tên người dùng, mật khẩu, máy chủ SMTP và số cổng trong các dòng code được liệt kê bên dưới With SMTP_Config.

Tự động hóa toàn bộ quá trình

Tất cả đều diễn ra tốt đẹp và bạn có thể gửi email từ Excel chỉ bằng một lần nhấn nút. Tuy nhiên, bạn có thể muốn sử dụng chức năng này một cách thường xuyên, nên việc tự động hóa quy trình sẽ có ý nghĩa vô cùng quan trọng.

Để làm như vậy, bạn cần thực hiện thay đổi đối với macro. Đi đến Visual Basic Editor, sau đó sao chép và dán toàn bộ code mà bạn đã gộp lại.

Visual Basic Editor

Tiếp theo, chọn ThisWorkbook từ hệ thống phân cấp Project.

Từ hai trường dropdown ở đầu cửa sổ code, chọn WorkbookOpen từ menu dropdown Methods.

Dán tập lệnh email ở trên vào Private Sub Workbook_Open().

Điều này sẽ chạy macro bất cứ khi nào bạn mở file Excel.

Tiếp theo, mở Task Scheduler.

Bạn sẽ sử dụng công cụ này để yêu cầu Windows tự động mở bảng tính theo các khoảng thời gian được đặt trước. Tại thời điểm đó macro của bạn sẽ được kích hoạt và gửi email.

Đặt thời gian

Chọn Create Basic Task... từ menu Action và làm việc theo cách của bạn thông qua trình hướng dẫn cho đến khi bạn tới màn hình Action.

Chọn Start a program và nhấn Next.

Start a program

Sử dụng nút Browse để tìm vị trí của Microsoft Excel trên máy tính hoặc sao chép và dán đường dẫn vào trường Program/script.

Sau đó, nhập đường dẫn đến tài liệu Microsoft Excel của bạn vào trường Add arguments.

Hoàn tất quá trình và lịch biểu của bạn sẽ được thực hiện.

Bạn nên chạy thử nghiệm bằng cách lên lịch cho hành động trong một vài phút, sau đó sửa đổi lại khoảng thời gian, khi bạn xác nhận rằng nó đã hoạt động.

Lưu ý: Bạn có thể phải điều chỉnh cài đặt Trust Center để đảm bảo rằng macro chạy đúng cách.

Để làm như vậy, hãy mở bảng tính và điều hướng đến File > Options > Trust Center.

Từ đây, hãy nhấp vào Trust Center Settings và trên màn hình tiếp theo, hãy chọn Never show information about blocked content.

Microsoft Excel là một công cụ cực kỳ mạnh mẽ, nhưng việc học cách tận dụng tối đa nó có thể là một thử thách. Nếu bạn thực sự muốn làm chủ phần mềm, bạn sẽ cần phải thoải mái với VBA và đó không phải là một nhiệm vụ dễ dàng.

Tuy nhiên, với một ít kinh nghiệm về VBA, bạn sẽ sớm có thể lập trình Microsoft Excel thực hiện các tác vụ cơ bản một cách tự động, giúp bạn có thêm thời gian để tập trung vào các vấn đề quan trọng hơn.

Cần có thời gian để tích lũy kiến ​​thức chuyên môn về VBA, nhưng bạn sẽ sớm thấy được thành quả nếu thực sự nghiêm túc.

Chúc bạn thành công!

Xem thêm:

Thứ Tư, 07/11/2018 15:25
53 👨 8.210
0 Bình luận
Sắp xếp theo
    ❖ Microsoft Excel