Excel VBA Save Workbook: Easily Save Excel Files With These 3 Macro Examples

If you've worked with Excel before, you're probably quite familiar with 2 basic commands for saving workbooks:

Excel VBA Tutorial about how to save workbooks and files

It may not surprise you to know that, when working with VBA, you can carry out these same activities.

In fact, knowing how to save Excel workbooks using VBA is essential. As you work with Visual Basic for Applications, you'll notice that saving workbooks is one of the most important things your macros can do.

Due to the importance of knowing how to save workbooks using VBA, this Excel tutorial focuses on this particular topic:

How to save an Excel workbook using VBA.

In addition to providing some examples of VBA code that you can use to save workbooks, I explain the basics surrounding 4 VBA methods that you're likely to encounter and use constantly while saving workbooks. The following table of contents shows the specific topics that I explain in this Excel tutorial:

Table of Contents

This Excel tutorial doesn't cover the topic of saving an Excel workbook as PDF using VBA. I explain how to export an Excel file to PDF using macros, and provide several code examples, here.

Let's start taking a look at the basic ways to save an Excel workbook using VBA.

How To Save An Excel Workbook Using the Workbook.Save VBA Method

The most basic method to save Excel workbooks using VBA is the Workbook.Save method. Workbook.Save saves the relevant workbook.

In other words, the Workbook.Save method is, roughly, the VBA equivalent of the Save command in Excel.

The syntax of the Workbook.Save method is as follows:

Where “expression” is the relevant Workbook object you want to save.

Let's take a look at an example to make this clearer. The following macro, named “Save_Workbook”, saves the current active workbook:

This Excel VBA Save Workbook Tutorial is accompanied by an Excel workbook containing the data and macros I use (including the Save_Workbook macro). You can get immediate free access to this example workbook by subscribing to the Power Spreadsheets Newsletter.

Notice that the macro has only 1 statement which follows the general syntax of the Workbook.Save method explained above:

In this case, ActiveWorkbook is a simplified reference to the Application.ActiveWorkbook property. This property returns a Workbook object, as required by the Workbook.Save method. The workbook that is returned by the ActiveWorkbook property is, more precisely, the workbook in the current active window.

In summary, the sample Save_Workbook macro above simply saves the current active Excel workbook.

Just as when working directly with Excel, the Save method is an important command/method that is relatively easy and straightforward to execute. However, it doesn't allow you to determine much in connection with the way the relevant Excel workbook is saved. The workbook is saved and that's pretty much it.

When working directly in Excel, you use the Save As command if you want to be able to determine more about the way the actual saving of a workbook takes place. Things work in a similar fashion within Visual Basic for Applications.

More precisely, when working with Visual Basic for Applications, you can use the SaveAs method for these purposes. So let's take a look at:

How To Save An Excel Workbook Using The Workbook.SaveAs VBA Method

The arguments or parameters of a method are what allows you to determine the characteristics of the action that a particular method performs.

As explained above, the Workbook.Save method doesn't have any parameters. As a consequence, you can't really determine much about how the relevant workbook is saved.

The Workbook.SaveAs method is different. Its 12 parameters allow you to further determine several aspects about the way in which an Excel workbook is saved. In other words, Workbook.SaveAs is more flexible and complex than Workbook.Save.

Workbook.SaveAs is, roughly speaking, the VBA equivalent of the Save As command in Excel. Therefore, it allows you to save a workbook in a particular file. The complete syntax of the Workbook.SaveAs method is as follows:

expression.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode,ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)

“expression” is, just as in the case of the Workbook.Save method above, the relevant Workbook object.

All of the parameters (which appear within parentheses) of the SaveAs method are optional. However, in order to understand what this method can help you with, I explain these parameters below.

However, as usual, I use a practical macro example for purposes of illustrating how Workbook.SaveAs works. So let's start by taking a look at the basic VBA code of the macro example:

How To Save An Excel Workbook With A New Name Using The Workbook.SaveAs Method

The following piece of VBA code saves the current active workbook with a new name provided by the user.

Dim workbook_Name As Variant

workbook_Name = Application.GetSaveAsFilename

If workbook_Name <> False Then

ActiveWorkbook.SaveAs Filename:=workbook_Name

End If

The following screenshot shows the VBA code behind the example macro (called “Save_Workbook_NewName”) which is included in the Excel workbook that accompanies this Excel VBA Save Workbook Tutorial. You can get immediate free access to this example workbook by subscribing to the Power Spreadsheets Newsletter.

VBA code with ActiveWorkbook.SaveAs

This macro can be divided in the following 3 parts:

Save workbook VBA code with sections

Let's take a quick look at each of these parts to understand how the Save_Workbook_NewName macro works:

Part #1: Dim workbook_Name As Variant

This statement simply declares a variable named workbook_Name. The variable is of the Variant data type.

Even though Variant variables are sometimes undesirable, in this particular case that's not necessarily the case. A Variant variable allows the GetSaveAsFilename (which I introduce below) to be quite flexible.

As implied by its name, and made evident by the following parts of the macro, the purpose of the workbook_Name variable is to store the new name of the saved Excel workbook.

Part #2: workbook_Name = Application.GetSaveAsFilename

This statement assigns a value to the workbook_Name variable. Which value is actually assigned is determined by the Application.GetSaveAsFilename method, which I explain thoroughly below.

At its most basic level, the GetSaveAsFilename method, does the following 2 things:

You're probably quite familiar with this dialog box, as it's the one Excel displays when you execute the Save As command.

Save As dialog displayed by GetSaveAsFilename

Note that the Application.GetSaveAsFilename method doesn't actually save a file. It simply gets a name.

To actually save the file using the name provided by the GetSaveAsFilename method, you usually rely on the Workbook.SaveAs method. This method is used in the last part of the Save_Workbook_NewName macro:

Part #3: If workbook_Name <> False Then ActiveWorkbook.SaveAs Filename:=workbook_Name End If

This is an If… Then… Else statement. These type of statements conditionally execute a particular group of statement depending on whether a condition is met or not. The statement begins with the word If. The whole block finishes with the End If statement.

In the case of the Save_Workbook_NewName macro, the If… Then… Else statement proceeds as follows:

Step #1: Test Whether workbook_Name <> False.

The first part of the If… Then… Else statement carries out a logical test. This logical test seeks to confirm whether the variable workbook_Name has a value that is different from (<>) the logical value False.

If the value of workbook_Name isn't False, the logical test (workbook_Name <> False) evaluates to True. In such a case, the statements within the If… Then… Else are executed.

However, if the value of workbook_Name is equal to the Boolean value False, the logical test evaluates to False. In this case, the conditional statements aren't executed.

For purposes of this logical test, the value of the variable workbook_Name is that assigned in the previous part. Therefore, the value depends on the input given by the user when the Save As dialog box is displayed. More precisely: