If Excel VBA reports “Run-time error ‘-1 (ffffffff)’: Method ‘Send’ of object ‘_MailItem’ failed,” Excel could not complete an email-send request through Outlook. The value -1 is not a worksheet error or a specific diagnosis; the cause is usually in the Outlook setup, message details, or the way the macro is attempting to send.
What the Excel Send -1 error means
This message most often appears in a workbook macro that creates an Outlook email and calls the message’s Send method. Excel is acting as the automation client, while Outlook is responsible for handling the email. A failure at the send step means that this handoff did not complete successfully, but the number alone does not identify why.
In this context, -1 (also displayed as hexadecimal FFFFFFFF) is a broad failure value rather than a useful, uniquely identifying Outlook error code. The wording around it matters: a failure on .Send is different from an error while creating an Outlook application, setting a recipient, or opening a workbook. Record the full error text, the line highlighted in the VBA editor, and whether Outlook displayed a prompt. Those details help narrow down the problem.
If you saw “send -1” in a different place—for example, while using Excel’s Share or email interface rather than a macro—do not assume the VBA explanation applies. Excel’s built-in sharing routes and an Outlook automation error are separate workflows, and the exact dialog text is needed to diagnose the former.
Which Excel email method are you using?
Start by identifying how the message is being sent. A VBA procedure that uses an Outlook MailItem is the most likely source of the quoted error, but Excel can also hand a workbook to a default mail application or use Microsoft 365 sharing. These methods have different dependencies.
- VBA and Outlook: The macro creates or connects to Outlook, prepares a message, and calls
Send. The checks below apply most directly. - Excel’s sharing or email command: Excel uses the available Microsoft 365 or Windows sharing workflow. Account, organization, or app configuration may be relevant, but a VBA MailItem diagnosis is not automatically relevant.
- A different mail program: A workflow that depends on the Windows default email application or a messaging interface may fail if that app is missing or not configured. Outlook VBA is not a general-purpose way to control every mail client.
If a macro is involved, open the VBA editor after the error and note which statement is highlighted. If the highlighted line is .Send, focus on the Outlook account, recipient, message state, and Outlook version. If the failure occurs earlier, investigate that earlier operation instead.
Common causes to check first
There is no single cause behind every Send failure. These are practical checks because each concerns something the mail client needs in order to accept or send the message:
- Outlook is not fully configured or signed in. Open Outlook directly, check that the intended account is present, and confirm that Outlook can send a normal test message. A profile or sign-in problem can affect automation too.
- The recipient is missing or invalid. Inspect the To, Cc, and Bcc fields for spelling mistakes, empty values, extra separators, or addresses pulled incorrectly from cells. Try a known, valid address while troubleshooting.
- Outlook is waiting on a prompt or dialog. A sign-in window, first-run setup, profile choice, security notice, or other modal dialog can interrupt automation. Look at the Outlook window and taskbar rather than assuming Excel is the only app involved.
- The message is not ready to send. A macro may build the message from blank cells, use an invalid attachment path, or attempt to send before required fields have been set. Check each value immediately before the send statement.
- The Outlook edition is incompatible with the automation approach. Traditional Outlook for Windows supports the classic Outlook Object Model used by many Excel VBA examples. New Outlook for Windows does not provide the same COM automation interface, so a macro written for classic Outlook may not work with it.
- Organizational controls block automated sending. Company policies, account restrictions, endpoint protection, or mail-flow rules can prevent or review programmatic messages. Do not try to bypass those controls; ask the organization’s Microsoft 365 or IT administrator.
Step-by-step troubleshooting
- Confirm the exact error. Copy the full message and identify the failing line in the macro. “Error -1” without the method name is not enough to conclude that Outlook’s Send method is responsible.
- Test Outlook outside Excel. Start Outlook yourself, verify that the correct profile and account open, and send a simple message manually. If manual sending fails, resolve that issue before debugging the macro.
- Check the destination and message contents. Temporarily use one known-valid recipient, a short subject, and plain text. Remove attachments and cell-driven fields for the first test. If that works, add the original fields back one at a time.
- Look for a hidden interruption. Check whether Outlook is showing a sign-in, profile, confirmation, or security prompt behind Excel. Complete legitimate setup prompts, then run the macro again.
- Verify which Outlook app is installed. If the macro uses
CreateObject("Outlook.Application")or Outlook object variables, check whether it expects classic Outlook for Windows. Switching to new Outlook may make a COM-based macro incompatible rather than fix it. - Restart both applications and retry. Close Excel and Outlook normally, reopen Outlook first, and then run the workbook macro. This can clear a stalled automation session, though it will not fix a bad recipient, account, or policy restriction.
- Ask IT about managed devices. If Outlook works manually but programmatic sending remains blocked on a work computer, provide IT with the exact error, the failing line, and the Outlook edition. Avoid changing security settings or installing scripts to work around company policy.
Test with a draft before sending automatically
During diagnosis, display the message instead of immediately sending it. This lets you inspect the resolved recipient, subject, body, and attachment list in Outlook. The following Windows VBA example uses late binding, so it does not require adding an Outlook reference in the VBA editor. It creates a draft for review; replace .Display with .Send only after confirming that the message is correct and that automatic sending is appropriate.
Before running any macro, save a copy of the workbook. Changes made by VBA cannot be undone with Ctrl+Z, and a macro that sends messages can have effects outside the workbook.
Option Explicit
Sub CreateOutlookDraft()
Dim olApp As Object
Dim olMail As Object
On Error GoTo HandleError
' Connect to classic Outlook for Windows, or start it if available.
Set olApp = CreateObject("Outlook.Application")
Set olMail = olApp.CreateItem(0)
With olMail
.To = "recipient@example.com"
.Subject = "Review this message"
.Body = "Check the recipient and message before sending."
.Display
End With
Set olMail = Nothing
Set olApp = Nothing
Exit Sub
HandleError:
MsgBox "Outlook automation failed (" & Err.Number & "): " & _
Err.Description, vbExclamation
Set olMail = Nothing
Set olApp = Nothing
End Sub
This example is a diagnostic starting point, not a guarantee that Outlook will send successfully. If it fails while creating the Outlook object, the problem is earlier than sending. If the draft opens but a later .Send call fails, compare the draft’s fields with the original macro and check account or policy restrictions. When using the code on a Mac, do not assume it will work: this Windows COM automation pattern is not a cross-platform Outlook method.
Security and sending risks
Automated email can send confidential information or distribute a message to many people before anyone notices a mistake. Keep .Display in place while testing, especially when recipients or message text come from worksheet cells. Validate the recipient list and attachment paths, and test with a controlled address before enabling bulk sending.
Do not disable Outlook security protections, lower macro security, or store account passwords in worksheet cells as a workaround for -1. These steps can expose accounts or data and may violate workplace policy. If a legitimate business process requires automated sending, use an approved method and ask the organization’s administrator which approach is supported.
When to use another approach
If the task is simply to share a workbook with another person, Excel’s Microsoft 365 sharing features may be more appropriate than a custom macro. The available options depend on the account, organization, and version of Excel; sharing a cloud file is not the same as attaching a copy to an email. For a one-off attachment, save the workbook and attach it using a mail application that is already configured.
For recurring or high-volume notifications, ask an administrator about an approved Microsoft 365 workflow, such as a managed automation service. The best option depends on permissions, licensing, data sensitivity, and whether recipients need an attachment or access to a shared file. Changing from VBA to another method does not remove the need to check recipients and protect sensitive information.
Frequently Asked Questions
Is Excel error -1 a formula error?
No, not when the message says that the Send method of an Outlook MailItem failed. That points to email automation, not a formula in a worksheet cell. Another dialog containing -1 may have a different meaning, so use its full wording.
Does Outlook have to be open before I run the macro?
A macro using classic Outlook automation can attempt to create an Outlook application object, but Outlook still needs to be installed and configured for the account. Opening it first is a useful troubleshooting step because it exposes sign-in or setup prompts.
Will the macro work with new Outlook for Windows?
Do not assume so. The common Excel VBA approach relies on classic Outlook’s COM-based Object Model, which new Outlook does not provide in the same way. Check which Outlook edition the macro was written for before changing applications.
Why does a draft open but Send still fail?
Opening a draft shows that Outlook accepted at least part of the automation request, but sending also depends on message validity, account readiness, and any applicable security or organization policies. Recheck the recipient and attachments, then capture the exact error on the .Send line.
Should I disable Outlook security prompts to fix it?
No. A prompt may be a legitimate protection or organizational control, and suppressing it can create risk. Identify what the prompt says and consult your IT administrator if it is blocking an approved workflow.
Related
- Autofill in Excel From Another Cell: A Practical Guide
- Excel Data Validation Source: How to Find It
- How to Autofill in Excel From the Cell Directly Above
Try it: the Formula Explainer: paste any formula and see each function and reference in plain English.
More in Errors & fixes
- Excel Page Breaks Messed Up? How to Fix Print LayoutIf Excel page breaks are messed up, switch to View > Page Break Preview to see what is…
- Excel Text Hidden Behind the Next Cell? How to Fix ItIf Excel text looks hidden behind the next cell, it is usually still in the original cell: Excel…
- Excel File Not Opening? Fix Corruption and Recover DataIf an Excel file will not open and Excel reports corruption, make a copy first, then try File…
- Paste Values Not Working in Excel? Causes and FixesIf Paste Values is not working in Excel, copy the source cells again, select the destination, then choose…
- Excel Unique Records Only Not Working? Fix the FilterIf Excel’s Unique records only option is not giving the result you expect, check the list range first:…
- Excel File Corruption Fix: Safe Recovery StepsTo fix a corrupted Excel file in Microsoft 365 for Windows, make a copy of it first, then…
Sources: Function behaviour and menu paths: Microsoft Support documentation for Excel. Method & sources
Spotted an error in this guide? Let us know.