Domenicには、E列にプロジェクトの期日を示すワークシートがあります。

彼は、条件付き書式を使用して期日がいつ(今日の日付と同じか)を示すことができることを知っていますが、本当に必要なのは、期日が到来したときに送信される電子メールです。彼は、Excelでこれを行う方法があるかどうか疑問に思います。

実際には、マクロを使用してもかまわないのであれば、これを行う方法があります。さらに、Outlookを介して電子メールを送信する必要があります。これにより、VBAは問題なく通信します。 (残念ながら、VBAを使用して他のメールクライアントに簡単に接続することはできません。)

たとえば、これはブックが開くたびに実行されるマクロです。ワークシートの各行を自動的にチェックします。具体的には、列Eの期日と列Fの「フラグ値」を入力します(このフラグ値はマクロによって設定されます。列Fに文字「S」が含まれている場合”その後、マクロは電子メールが以前に送信されたことを前提としています。)

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

マクロが実行されると(ここでも、ブックが最初に開かれたとき)、ワークシートの各行がチェックされ、列Fに「S」があるかどうかが確認されます。

そうでない場合は、列Eの日付が今日の日付と等しいかどうかを確認します。そうである場合、コードは送信される電子メールメッセージ(必要に応じて変更できます)をまとめます。電子メールが表示され、必要な変更を加えた後、[送信]ボタンをクリックできます。

その時点で、列Fに「S」インジケーターを配置し、列Gに電子メールが送信された日付を配置することにより、ワークシートが更新されます。

マクロは、プロジェクトの名前が列Bにあることを前提としていることに注意してください。

この情報は、電子メールで送信されるメッセージをまとめるために使用されます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(474)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。