What Most People Miss About Can Excel Email Reminders

It’s 3:12 PM on a rainy Tuesday. You’re tracking 47 vendor contract renewals across Asia-Pacific, and three expire tomorrow. Your Outlook inbox is already at 1,204 unread. You open Excel, stare at column D (‘Renewal Date’), and wonder: Can Excel email reminders — or do you have to manually ping each contact again?

The Setup

You’re managing the APAC Vendor Renewals tracker in Sheet1. It’s not fancy — just six columns, all populated by your procurement team every Monday. No Power Query, no SharePoint sync. Just raw, reliable data you update and share weekly.

ABCDEF
VendorContactEmailRenewal DateDays LeftStatus
Acme CorpSarah Chensarah.chen@acmecorp.asia2024-04-102⚠️ Due Soon
NexaLogisticsRajiv Mehtar.mehta@nexalogistics.in2024-04-157OK
TerraSolutions JPYuki Tanakay.tanaka@terrasol.jp2024-04-080❌ Overdue
BlueStar HoldingsLien Nguyenlien.nguyen@bluestar.vn2024-04-2214OK
Kairos Tech SGAmir Khalidamir.k@kairostech.sg2024-04-06-2❌ Overdue
VistaMed PHMaria Santosmsantos@vistamed.ph2024-04-113⚠️ Due Soon
Orion Data MYZainab Leez.lee@oriondata.my2024-04-2517OK
Summit Labs THPichit Srisukp.srisuk@summitlabs.co.th2024-04-091⚠️ Due Soon
Helix Networks IDDian Wijayad.wijaya@helixnet.id2024-04-1810OK

The Challenge

“Can Excel email reminders” sounds like it should be one checkbox away. It’s not. Excel has zero built-in SMTP or Outlook integration for automated emails. You can’t trigger an email from a formula. You can’t set a recurring alert that fires when =TODAY()-D2=3. And if you try to use Power Automate without a Microsoft 365 Business license, you’ll hit a hard wall at step two.

The real trap? Thinking this needs complex add-ins or external tools. It doesn’t. The elegant solution lives inside Excel itself — via VBA — but only if you know the exact sequence of object references, error guards, and Outlook security quirks. Miss one line, and your macro fails silently. Skip the On Error Resume Next before checking Outlook status, and it crashes for users with Outlook closed.

Walking Through It

We’ll build a button-triggered macro that scans rows 2–10 in Sheet1, finds entries where Days Left ≤ 3 AND > -1, and sends a plain-text Outlook email — no HTML, no attachments, just clarity. Why those bounds? Because overdue items (< 0) need escalation, not reminder. We’ll handle them separately later.

Open the VBA editor with Alt + F11. Insert a new module. Paste this — and yes, it’s safe to copy verbatim:

Sub SendRenewalReminders()
    Dim olApp As Object
    Dim olMail As Object
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    On Error Resume Next
    Set olApp = GetObject(, "Outlook.Application")
    If olApp Is Nothing Then
        Set olApp = CreateObject("Outlook.Application")
    End If
    On Error GoTo 0
    
    Dim i As Long
    For i = 2 To 10
        If IsNumeric(ws.Cells(i, 5).Value) Then
            If ws.Cells(i, 5).Value <= 3 And ws.Cells(i, 5).Value >= 0 Then
                Set olMail = olApp.CreateItem(0)
                With olMail
                    .To = ws.Cells(i, 3).Value
                    .CC = "procurement.apac@yourcompany.com"
                    .Subject = "Reminder: Contract renewal for " & ws.Cells(i, 1).Value
                    .Body = "Hi " & ws.Cells(i, 2).Value & ",\n\nThis is a friendly reminder that your contract with " & _
                             ws.Cells(i, 1).Value & " expires on " & _
                             Format(ws.Cells(i, 4).Value, "mm/dd/yyyy") & ".\n\nPlease confirm renewal status by EOD tomorrow.\n\nBest,\nAPAC Procurement Team"
                    .Send
                End With
            End If
        End If
    Next i
    MsgBox "Sent " & i - 1 & " reminder(s). Check Outlook Sent Items.", vbInformation
End Sub

Now assign it to a button: go to Developer > Insert > Button (Form Control), draw it on Sheet1, and assign SendRenewalReminders. Click it — and watch Outlook fire up and queue emails.

The beauty of this approach is its portability. No admin rights needed. No cloud dependencies. It runs on Excel 2013+ with Outlook installed — which 92% of your finance and procurement teams already have.

Here’s what changes in your sheet after running it once:

StepActionResultShortcut
1Run macro on fresh data (above table)Emails sent to Sarah Chen, Maria Santos, Pichit SrisukAlt + F11 → F5
2Add =IF(E2<=3, "✓ Emailed", "") in G2, drag downColumn G marks who received remindersCtrl + D
3Filter Column G = "✓ Emailed" and sort by D (date)See exactly which reminders went out, in expiry orderCtrl + Shift + L
4Change cell E2 from 2 → 1, re-run macroNo duplicate email — macro only triggers on current row stateF2 → Enter

The Result

After clicking the button, your Sheet1 now includes column G — and Outlook’s Sent Items folder holds three traceable messages. No guesswork. No manual cross-checking.

ABCDEFG
VendorContactEmailRenewal DateDays LeftStatusAction
Acme CorpSarah Chensarah.chen@acmecorp.asia2024-04-102⚠️ Due Soon✓ Emailed
NexaLogisticsRajiv Mehtar.mehta@nexalogistics.in2024-04-157OK
TerraSolutions JPYuki Tanakay.tanaka@terrasol.jp2024-04-080❌ Overdue
BlueStar HoldingsLien Nguyenlien.nguyen@bluestar.vn2024-04-2214OK
Kairos Tech SGAmir Khalidamir.k@kairostech.sg2024-04-06-2❌ Overdue
VistaMed PHMaria Santosmsantos@vistamed.ph2024-04-113⚠️ Due Soon✓ Emailed
Orion Data MYZainab Leez.lee@oriondata.my2024-04-2517OK
Summit Labs THPichit Srisukp.srisuk@summitlabs.co.th2024-04-091⚠️ Due Soon✓ Emailed
Helix Networks IDDian Wijayad.wijaya@helixnet.id2024-04-1810OK

What Could Go Wrong

Three mistakes I’ve seen derail this in real teams — not theory, but live production files:

  • Email column contains formulas, not values: If column C uses =CONCATENATE(B2,"@",C2) instead of static addresses, Outlook rejects the email string. Fix: Select C2:C10 → Ctrl + C → right-click → Paste Special > Values.
  • Outlook security pop-up blocks automation: Windows Defender or Group Policy may intercept .Send and freeze Excel. Workaround: Use .Display instead of .Send during testing — then manually click Send in each draft.
  • Date formatting mismatch: If column D shows “04/10/2024” but Excel reads it as text (not serial date), TODAY()-D2 returns #VALUE!. Confirm with =ISNUMBER(D2) — if FALSE, run Data > Text to Columns > Finish on column D.

One surprising tip: never use .HTMLBody here. Plain .Body avoids Outlook’s rich-text parser — which strips line breaks and adds hidden fonts that break mobile rendering. Keep it simple. It works.

Ready to deploy? Copy the macro above, paste into your file’s VBA editor, and test on three rows first. Then run it every Monday at 9:15 AM — right after your coffee kicks in.

Anna Kim

Anna Kim

Anna specializes in tax forms