Domenic có một trang tính hiển thị ngày hết hạn cho các dự án trong cột E.

Anh ấy biết mình có thể sử dụng định dạng có điều kiện để hiển thị khi nào đến ngày đến hạn (khi nó giống với ngày hôm nay), nhưng thứ anh ấy thực sự cần là một e-mail được gửi khi đến ngày đáo hạn. Anh ấy tự hỏi liệu có cách nào để làm điều này trong Excel không.

Trên thực tế, có một cách để làm điều này, miễn là bạn không ngại sử dụng macro. Ngoài ra, bạn sẽ cần gửi e-mail qua Outlook, mà VBA sẽ giao tiếp tốt. (Thật không may, không thể dễ dàng sử dụng VBA để kết nối với các ứng dụng thư khác.)

Ví dụ ở đây là một macro sẽ chạy bất cứ khi nào sổ làm việc của bạn mở ra. Nó tự động kiểm tra từng hàng trong một trang tính, cụ thể là dựa vào hai điều: ngày đến hạn trong cột E và “giá trị cờ” trong cột F. (Giá trị cờ này được đặt bởi macro. Nếu cột F chứa ký tự “S, “thì macro giả định một e-mail đã được gửi trước đó.)

Private Sub Workbook_Open()

Dim OutApp As Object     Dim OutMail As Object     Dim lLastRow As Long     Dim lRow As Long     Dim sSendTo As String     Dim sSendCC As String     Dim sSendBCC As String     Dim sSubject As String     Dim sTemp As String

Set OutApp = CreateObject("Outlook.Application")

OutApp.Session.Logon

' Change the following as needed     sSendTo = "[email protected]"

sSendCC = ""

sSendBCC = ""

sSubject = "Due date reached"



lLastRow = Cells(Rows.Count, 3).End(xlUp).Row     For lRow = 2 To lLastRow         If Cells(lRow, 6) <> "S" Then             If Cells(lRow, 5) <= Date Then                 Set OutMail = OutApp.CreateItem(0)



On Error Resume Next                 With OutMail                     .To = sSendTo                     If sSendCC > "" Then .CC = sSendCC                     If sSendBCC > "" Then .BCC = sSendBCC                     .Subject = sSubject

sTemp = "Hello!" & vbCrLf & vbCrLf                     sTemp = sTemp & "The due date has been reached "

sTemp = sTemp & "for this project:" & vbCrLf & vbCrLf                     ' Assumes project name is in column B                     sTemp = sTemp & "    " & Cells(lRow,2)

sTemp = sTemp & "Please take the appropriate"

sTemp = sTemp & "action." & vbCrLf & vbCrLf                     sTemp = sTemp & "Thank you!" & vbCrLf

.Body = sTemp                     ' Change the following to .Send if you want to                     ' send the message without reviewing first                     .Display                 End With                 Set OutMail = Nothing

Cells(lRow, 6) = "S"

Cells(lRow, 7) = "E-mail sent on: " & Now()

End If         End If     Next lRow     Set OutApp = Nothing End Sub

Khi macro chạy (một lần nữa, khi sổ làm việc được mở lần đầu tiên), nó sẽ kiểm tra từng hàng trong trang tính để xem có chữ “S” trong cột F.

Nếu không, thì nó sẽ kiểm tra xem ngày trong cột E có bằng với ngày hôm nay hay không. Nếu đúng như vậy, thì mã này sẽ kết hợp một tin nhắn e-mail (mà bạn có thể sửa đổi, theo ý muốn) sẽ được gửi đi. E-mail được hiển thị và bạn có thể nhấp vào nút Gửi sau khi thực hiện bất kỳ thay đổi mong muốn nào.

Tại thời điểm đó, trang tính được cập nhật bằng cách đặt chỉ báo “S” vào cột F và ngày email được gửi vào cột G.

Lưu ý rằng macro giả định rằng tên của dự án nằm trong cột B.

Thông tin này được sử dụng để tập hợp thông điệp sẽ được gửi qua e-mail.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (474) áp dụng cho Microsoft Excel 2007, 2010, 2013 và 2016.