Dear Friends,

This is a very simple yet powerful Excel VBA tip for you. Many a times before sending your workbook with Excel VBA Macro code in it, you want to save your workbook without any VBA code in it.
Therefore here in this article, I will show you – how to save your Excel Workbook without excel macro in it.
This can be done manually as well as using Excel VBA.
At the end of this article, I have a usage example of this VBA method. You can also download a FREE Excel Workbook for you to understand and play-around.

Manual Method: Save Workbook without Excel Macro

Follow the below steps to save a copy of your workbook as Excel Macro FREE. There will be no excel Macro code in the copy saved.

Step 1:

Go to File Option and Click on Save AS of your xlsm file as shown in the below picture:
Excel Workbook With Excel Macro

Step 2:

Now save your workbook as xlsx and not as xlsm as shown in the below picture
Save Excel Workbook without Excel Macro

Step 3:

On clicking on save, you receive following confirmation popup, once you click on “Yes” then your excel workbook will be saved without Excel Macro code.

Confirmation Popup - Save Excel without Excel Macro Code

Confirmation Popup – Save Excel without Excel Macro Code

Step 4:

Now once you open your .xlsx workbook, you would not see any of the excel macro code as shown in below picture:

Excel Workbook Without Macro

Excel Workbook Without Macro

VBA Method: Save Workbook without Excel Macro using Excel VBA

Now as you have seen how to achieve this manually, I will show you how you can achieve this by using Excel VBA.

Following VBA statement will be able to save your Workbook with Excel Workbook as a Workbook without any Excel VBA code in it.

ThisWorkbook.SaveAs Filename:="C:\...\abc.xlsx", FileFormat:=xlOpenXMLWorkbook

While executing the above, VBA statement, you will receive the same confirmation popup as shown above – which you get while saving your .xlsm workbook as .xlsx.
This can be annoying in an automated process. To ignore this popup in Excel VBA code, you simply use Application.DisplayAlerts to false before executing the above statement.

Save Excel workbook as Excel Macro FREE Workbook without confirmation Popup

Refer the below VBA code to save your Excel workbook without saving any VBA code in it.

Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:="C:\...\abc.xlsx", FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True 

Example of usage of above Code

For example, if you want to share your workbook as an attachment, you ca save a copy of your current workbook as Macro FREE.

Send current workbook as Macro FREE Workbook as an Attachment in email

Using below code, you can send your current workbook without any VBA code in it which already has VBA codes in it. This is one of the best usage of saving a workbook as Excel Macro FREE Workbook.
Before sending your workbook as an attachment in email, you do not want to share the code along-with the workbook, then this piece of code will do the magic for you.

Sub Email_CurrentWorkBook()

    'Do not forget to change the email ID
    'before running this code

    Dim OlApp As Object
    Dim NewMail As Object
    Dim TempFilePath As String
    Dim fileName As String
    Dim originalWB As Workbook
    Dim tempWB As Workbook
    Dim tempXLSXPath As String
    Dim tempXLSMPath As String

    Set originalWB = ThisWorkbook

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .DisplayAlerts = False
    End With

    ' Save your workbook in your temp folder of your system
    ' below code gets the full path of the temporary folder
    ' in your system
    TempFilePath = Environ$("temp") & "\"
    fileName = VBA.Left(originalWB.Name, (InStrRev(originalWB.Name, ".", -1, vbTextCompare) - 1))
    fileName = fileName & "-" & Format(Now, "dd-mmm-yy h-mm-ss")
    tempXLSMPath = (TempFilePath & fileName & ".xlsm") ' with macro - as is
    tempXLSXPath = (TempFilePath & fileName & ".xlsx") ' without macro

    ' first an as is copy of this workbook is created
    ' and saved as with Macro in it [.xlsm] format
    originalWB.SaveCopyAs (tempXLSMPath)
    ' Now open this copy of the current workbook
    ' and saveAs a Macro FREE Workbook [.xlsx] format
    Set tempWB = Workbooks.Open(tempXLSMPath)
    With tempWB
        .SaveAs fileName:=tempXLSXPath, FileFormat:=xlOpenXMLWorkbook
        .Close savechanges:=False
    End With

    ' Now open a new mail
    Set OlApp = CreateObject("Outlook.Application")
    Set NewMail = OlApp.CreateItem(0)

    On Error Resume Next
    With NewMail
        .To = "[email protected]"
        .CC = "[email protected]"
        .BCC = "[email protected]"
        .Subject = "Type your Subject here"
        .Body = "Type the Body of your mail"
        .Attachments.Add tempXLSXPath ' attach .xlsx file
        .Send   'or use .Display to show you the email before sending it.
    End With
    On Error GoTo 0
    ' Since mail has been sent with the attachment
    ' Now delete both the temp files
    ' .xlsx and .xlsm
    Kill tempXLSMPath
    Kill tempXLSXPath

    'set nothing to the objects created
    Set NewMail = Nothing
    Set OlApp = Nothing
    Set originalWB = Nothing
    Set tempWB = Nothing

    'Now set the application properties back to true
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .DisplayAlerts = True
    End With
End Sub


In the above code, as you can see, first I have created an exact copy of the current workbook with Macro and then I have saved that copy as a Macro FREE workbook. Strange?? Isn’t it?? Why did not I directly used SaveAs statement to save the current workbook as Macro FREE workbook and then attach it to the email and send?

There is a valid reason for doing so… Before I explain the reason, I would like you to read these two main differences between these two methods…

Difference between SaveAs and SaveCopyAs in Excel VBA

Following are the two main differences between these two methods in Excel VBA…

Difference No: 1 :

After running the SaveAs command, new workbook becomes the current Workbook [in VBA terms – ThisWorkbook]. In other words, after running the SaveAs command, your original workbook will no longer remain opened and accessible [unless you open the original workbook again by providing the Workbooks.Open command].

While SaveCopyAs does it exactly opposite. Here original workbook remains open and copy is made as-it-is with the given file name and path.

This is the reason… why I could not directly use this SaveAs method to save a macro free copy of the current workbook where actually my code is running. So as soon as Save As command is run, then in the current workbook there is no macro any more and code will stop running there and further statements will not be executed any more.

Difference No: 2 :

Using SaveAs you can change many things around your Excel Workbook.. like
1. Secure it by providing a password
2. Change the FileName, FilePath, FileFormat, FileType etc.
any more…

While using SaveCopyAs, all you can do is just change the FileName or FilePath or both. Other than this, you can not make any changes in the workbook. It is simply an AS-IS copy of your workbook.

This is the reason… why I could not just use SaveCopyAs method. By using this method, I can not change for FileFormat of the Workbook as Macro FREE (.xlsx).

Now you understand, why a combination of these two methods was required in order to achieve this scenario of sending a Macro FREE copy of current Excel Workbook as an attachment in an email.

Download your Excel Workbook with Code – Send Macro FREE copy of current Workbook

DOWNLOAD -TOP 40 Excel Macro Examples Collection Workbook

Did you like reading this article?

Then share it with your colleagues and friends. If you have a suggestion, question etc. please write them in the comment section, and I would come back to you as soon as possible.

You can also read…

You can read more about sending email using Excel VBA here

and many more….


Join over 10, 000+ Excel VBA Enthusiasts & get this FREE e-Book Now!