excel macros
How to run a macro from a button
You can run an Excel macro by clicking any Excel object you can imagine: text box, shape, picture, chart, etc. See below the main Excel objects you can use…
After storing your Excel macro for future use, you can attach your macro to any button inside any workbook.
Here’s the 3-step process to do it…
1) Create the button in your sheet
Go to the ribbon Insert>Illustrations>Shapes>then, add any of the available shapes. See the picture below…
You can also insert any other type of illustration like: Picture, Clip Art, SmartArt, etc. You can use any already-created button. Additionally, you can also use other Excel objects like charts, equations, etc.
Once the shape/object is in your sheet, you are ready to link an Excel VBA macro to it.
2) Assign a macro to your button/object
Right click over the existing shape or object and then choose “Assign Macro…” on the contextual menu. See the picture below…
Then, specify the source location of your macro in the “Macros in:” drop-down list of the “Assign Macro” dialog (“This Workbook”, “Personal Macro Workbook” or any specific workbook). See the picture below…
Important notice: if your macro is not stored centrally in the Personal Macro Workbook or as an Add-in, you need to open the macro source-workbook before you assign those macros to any button. Read “how to store Excel macros for future use“
Then, select the Excel macro you want to be attached to the button, and then click OK.
Your Excel macro is now attached to your button!
You can also create a new macro that will be automatically attached to the current button. Just click “New” or “Record…” in the “Assign Macro” dialog.
You are almost done, just a final step to make your Excel macro button more reusable…
3) Name your Excel macro button meaningfully
Don’t use names as “Click here” or “Macro 1”, use meaningful names that describe the macro purpose, for example: “Delete selected columns”, “Insert financial formula”, etc. This way you will use the button naturally and without hesitation.
To do it, proceed this way…
Right click over the shape (Text Box, Shape, Equation), then click “Edit text”, then enter your text.
In the case of pictures and charts you can add a Text Box to describe the assigned-macro, it could be something like “click the picture to format columns”, etc.
And be creative with the layout of the button, have fun. Select the shape and then go to Drawing Tools>Format>Shape Styles, there you can change the shade, color, borders, etc.
Here are some examples of Excel macro buttons…
Have button ideas to share? Let us know at the comments section below…
How to store the Excel macros you create or record for future use
If you acquire a brand new car and ignore the location of the keys, you couldn’t open the doors to get in, nor drive the car. In a sense, when you don’t know the location of your recorded Excel macros or written Excel VBA macros you won’t be able to get in the VBA editor to edit the Excel macro or run the macro.
Knowing the location of your Excel VBA macros is essential if you want to create, edit and run your Excel macros!
If you ask some of the questions below, then this Excel VBA article is for you…
- Will my macro be there if I close my workbook or Excel?
- How can I share my Excel macros with others?
- How to use the Excel macros from others?
- How to use a macro I wrote or recorded before?
- How to make my macros available on other Excel VBA workbooks?
- How to create a macro in Excel?
- How to write a macro in Excel?
It’s very simple!
You just need to be aware of some details I will share with you here…
You can think on a workbook as a box with two compartments, one for spreadsheet-data and the other one for VBA-data. In other words, an Excel VBA workbook might contain spreadsheet-data and VBA-data, see the illustration below…
Now, you might ask, “if an Excel macro is stored inside a VBA workbook, will it be available to other workbooks?”
That’s a good question.
The answer is NO, a macro is only available to the same workbook where it was created, but you can make it available to other workbooks, you need some tricks you will learn in just a moment.
First let’s explore the difference between…
Local Excel macros vs. central Excel macros
Let’s suppose you create a macro in Excel VBA, which is a loan calculator app and it works this way: first you enter the arguments like loan amount, annual interest rate, loan period in years, etc, then you hit calculate, finally the Excel macro generates the monthly payments in the same sheet.
You don’t want to run this macro on other workbooks because the relevant data is entered in the given loan sheet. This is a local macro.
Some examples of local macros might be:
- Fixed-layout constrained macros. For example, a macro that works upon a fixed table scheme or report
- Sheet-specific macros. For example, a macro that uses the data of a particular sheet or sheets
- One-time macros
- Etc.
Now think for a moment in a macro you created in Excel to format a raw sales table you receive every week. The macro deletes some columns, sorts the table by invoice number, adds some headings here and there, etc. Every time it does the same to the file you receive weekly.
You want to use this macro each time you receive new data. This macro is required to be centrally stored so is available on each upcoming sales workbook.
Some examples of central macros might be:
- Dynamic macros that work on different sheet and arrays and layouts. E.g. a macro to format a report, write custom formulas on columns with dynamic rows, etc. You can create dynamic macros if you use loops and conditional statements. You can also record dynamic macros if you learn how to place the cursor and use relative references
- Repetition routines like: converting date format, inserting a given formula in the current cell, etc.
Location of recorded Excel macros
If you know how to record a macro in Excel, then you know that when you hit stop, your recorded macro is somewhere in your hard drive and this location depends on what you specified in the “Record Macro” dialog, see the picture below…

Important notice: by default, your recorded Excel macros are named Macro1, Macro2, MacroN and stored in Module1, Module2, ModuleN of the specified workbook.
Many Excel users think that once they learn the art and science of writing macros in Excel, the Excel recorder is not needed anymore, but knowing how to record a macro in Excel is critical in some cases. Here are the guidelines for taking full advantage of your recorded Excel macros…
Make your recorded macros available to the same workbook only (local)
1) Choose “This Workbook” or “New Workbook” in the “Store macro in:” drop down list of your “Record Macro” dialog (see “Record macro dialog” picture above).
2) Then record your Excel macro as normal.
Run that macro by specifying the source workbook where you recorded the macro (it should be open). See the picture below…

Make your recorded macros available to any workbook (central)
1) Choose “Personal Macro Workbook” in the “Store macro in:” drop down list of your “Record Macro” dialog.
2) Then record your Excel VBA macro as normal.
You don’t need to open the source file to run your central macros because the “Personal Macro Workbook” is always loaded. See the picture below…
What’s the Personal Macro Workbook?
It’s a hidden Excel 2007 Binary File workbook (.xlsb) that is always open so you can run its macros all the time. See the picture below…
If you edit any macro of the “Personal Macro Workbook” and close Excel, you are presented with the message below (This is a handy proof this book is open behind the scenes)
The “Personal Macro Workbook” is stored by default in this location: C:/Users/Administrator/AppData/Roaming/Microsoft/Excel/XLSTART
Important notice: show system folders this way (system folders are hidden by default). In the Windows explorer window, go to Organize>Folder and search options>View>Hidden files and folders>Show hidden files, folders, and drivers. See the picture below…
Location of the Excel macros you create
You are free to put the Excel macros you create or write using VBA anywhere inside your Excel VBA compartment (VBA editor). You can store your Excel macros in any module and in any Sub procedure. For example: you can create a module called MyFormulas and create the macros (procedures) MyAdvancedFormula1, MyAdvancedFormula2, MyFinancialFormula1, etc. Or you can create a module called MyCommonRoutines and write the macros: FormatMyReport, DeleteMyColumns, etc.
Here’s an illustration of the location of your macros inside the VBA editor (compartment)…
This is how your Excel macros are stored inside the VBA editor…
You can also put the created macros in the “ThisWorkbook” VBA module or in any VBA Sheet module (under the folder Microsoft Excel Objects) of the VBA Project explorer pane.
Important notice: Sub procedures must be Public in scope so you can call them from outside the source module, e.g. from another module, from a button, shortcut, toolbar, ribbon, etc.
Make your written Excel macros available to the same workbook only (local)
Just write your macros in any module of your VBA editor (workbook compartment). It will be available next time when you open that workbook.
Your local macros will be listed in the Macro dialog, after you select “This workbook”, “All Open Workbooks” or any specific workbook in the “Macros in:” drop-down list. see the picture below…
Make your written Excel macros available everywhere (central)
If you want to run a macro from any other workbook, see the picture below…
You can run a macro in Excel in several ways…
1) Write your macro in the Personal Macro Workbook, it will be available next time on any workbook you open.
This method is not recommendable because you can’t control the location of the master macros book and you can’t organize your macros in meaningful files., e.g. a workbook for formatting macros, another one for calculations, etc.
The best way to do it is by storing your workbook as an add-in. Here’s how to do it…
1) Write your macro in any given VBA module of a new or existing workbook
2) Save your book as an Excel Add-in, go to Office button/File>Save As>Save as type:>set the file type as add-in, see below…
- .xlam – Excel Add-in workbook format in Excel 2007+
- .xla – Microsoft Excel Add-In format in Excel 97-2003
3) Go to Office button/File>Options>Add-Ins>Manage:>Excel Add-ins>Go
4) Then in the Add-ins dialog activate the desired add-in file, if is not listed here, choose “Browse…” and locate your add-in file
Now you can call your macros using any of the methods below…
- Macro dialog
- Shortcut
- Button
- Toolbar or Ribbon
- Triggered by event
- UDF (User defined function)
I hope this article helps.
How to find the code of a VBA macro in a workbook
Are you asking where the macros in a workbook are?
Well, you should know that Excel stores VBA stuff: macros, modules, user forms, etc. as well as spreadsheet data inside workbooks.
How does this work? Here’s a quick explanation…
To access your macros VBA code you need to open the workbook compartment that contains VBA data, this is the VBA interface.
There you will find the macros VBA code (procedures) in modules, see the picture below…
Launch the VBA editor this way…
Excel 2007/2010 users…
The fastest way to show the VBA interface is by using the shortcut ALT+F11, type it when you are in the workbook environment.
You can also use the Ribbon. Excel 2007/2010 brings the “Developer” tab hidden by default. Activate it this way…
If you are using Excel 2007 go to the Microsoft Office button>Excel Options>Popular>”Show Developer tab in the Ribbon”>OK
If you are using Excel 2010 go to the Microsoft Office button>Excel Options>Customize Ribbon, and then activate the “Developer” tab, see the picture below…
Once the Developer tab is shown in the Excel ribbon, activate it and click on the “Visual Basic” toolbar.
Another handy way to show the VBA editor is by right clicking over any sheet tab of your workbook and choosing “View code”.
You can also go directly to any given macro by going to the Ribbon: Developer>Code>Macros>Select your macro>Edit. See the picture below…
Excel 97-2003 users…
Click ALT+F11 or go to Tools>Macro>Visual Basic Editor.
The same right click technique applies to Excel 2003, just right click over any sheet tab of your workbook and choose “View code”.
You can also go directly to any given macro by going to the Tools>Macro>Macros>Select your macro>Edit.
Quick tip to make your recorded Excel macros super fast
Here’s the tip.
Turn off screen updating.
Doing this is like jumping to the desired movie scene instead of watching a chain of quick-motion sequences before you watch it.
When you do this, your macro will not spend computing resources to update the screen at every action it performs.
- Shifting sheets (this does not occur if you implement tip 2 mentioned above)
- Range selections (this does not occur if you implement tip 2 mentioned above)
- Chart creation
- Table creation
- and other outputs
How do you do that?
It’s very simple…
Write this instruction at the beginning of your macro (after the “Public Sub ()” line)…
“Application.ScreenUpdating = False” (without quotation marks)
And this one at the end of your macro (before the “End Sub” line)…
“Application.ScreenUpdating = True” (without quotation marks)
How to communicate with other applications using VBA?
There are a lot of benefits of interacting with other applications using VBA language…
- You can use data generated somewhere in other application, for example: creating new PowerPoint slides using Excel charts and tables
- You can perform commands that don’t exist in your application, e.g. inserting Excel calculations in a Word document
- You can expand the functionality of your program, e.g. you cannot make presentations using Excel, so you send the charts, tables and figures to Power Point; sending 100 emails through Outlook using data from a 100-row Excel table
- and much more
How do you do it?
Let me restate our main question to “How to communicate with other persons in the world using English?”
Can you make any other person in the world act on your instructions?
Well, I am not talking here about influence, I am talking about meaning…my point is, will they understand your commands? You can’t command other people, at least they speak your language (English for our example). The good news is that English is a worldwide used language, non-native-speakers know it so communicating with others is relatively easy.
Let’s get back to our primary question “How to communicate with other applications using VBA?”
You can’t command other applications, at least they speak the programming language you/Excel talks (Visual Basic); Yes, Excel speaks Visual Basic programming language.
The good news is that Visual Basic (VB) is a very popular programming language and many applications speak it. So when Excel talks, VBA-enabled applications will get it, easily.
How is this possible?
Every app has its own objects, e.g. Power Point has slides, animations, etc; Outlook has emails, contacts, etc; Excel has sheets, charts, formulas, etc. You can manipulate those app objects using the user interface, including your mouse and keyboard; e.g. you can add a new slide to an existing PowerPoint presentation, you can add a title to a slide, etc. In Excel, you can add a new sheet, write a new formula in a cell, change the background color of cells, etc.
Ok John, but how those apps make their objects available to other apps?
In a sense, every country makes its citizens available to others through a phone directory, if you know a person’s phone number you can call it. At the same time, every VBA-enabled application makes its objects available to others in the form of a VBA objects library; for example an Excel sheet is a WorkSheet object, a Pivot Table is a PivotTable object, etc. If you know an object name and syntax you can use it.
Here’s a simple 3-step roadmap to communicate with other applications using VBA…
1) First the first…
1.1. Master the app you want to communicate with
You will hardly control Power Point with VBA if you have never created a presentation. To create efficient VBA code you should be proficient using the real objects, e.g. slides, emails, etc.
1.2. Be sure your app speaks VBA language
Your recipient should be ready to receive your instructions, he/she should speak English. At the same time, your to-be-controlled app should understand VB. Your Office package as well as other Microsoft applications supports VBA. Below is a list of some of the MS programs that are VBA-enabled applications…
- Office: Word, Excel, Power Point, Outlook, Access, etc.
- Office for Mac
- Microsoft project
- Microsoft Front Page
There are other popular non-Microsoft programs that are VBA-enable applications…
- AutoCAd – Technical drawings and design; mostly used by civil engineers, mechanical engineers and architects
- ArcGIS – Geographic information systems; mostly used by environmental engineers, planners, etc.
Here’s the full list of VBA-enabled applications.
1.3. Get the app VBA documentation.
What VBA syntax is needed to open a new Word document? You need to know it; what VBA syntax is needed to add a new slide to an existing Power Point presentation? You need to know it.
You can easily obtain all the VBA information in the Help section of your app; you can also use the objects browser to explore the app objects from within Excel.
These are the main things you can get…
- Excel VBA object model, the full hierarchy of VBA objects
- VBA object members: properties and methods of every VBA object
- Visual Basic commands (the same for all applications)
2) Connect with your VBA-enabled application
When you make an international call, the first thing you need to do is entering the country code, e.g. if you want to call to a landline in Ecuador you need the 593 prefix in addition to the phone number.
Dialing 52634232 won’t communicate you with anybody.
While dialing this way will do it…
593-52634232
Think in the country code as a “master key” that opens the gate of every landline phone in the target country.
If you want to communicate with an external VBA-enabled application, you need a key too; this key is activated when you choose the app library in the “References” dialog. Learn more below…
2.1. Activate the VBA-enabled app library
Activate the VBA-enabled app library by launching the VBA interface from within Excel (CTRL+F11), then by going to: Tools>References…
E.g. In the dialog below I activated the libraries of the programs: Access, Outlook, PowerPoint and Word…
You can also reference missing app libraries using the browse button of the “References – VBAProject” dialog. App libraries have a .dll extension.
When you try to access an international phone number without the master key (country code), you get a message like: “Enter the country code first and try again”; the same happens in VBA, you cannot access external app objects without activating its library first. You will get an error like the one below…
Important notice: each VBA-enabled application library is installed at the moment you install the program in your computer.
2.2. Create a VBA-enabled app object
Using the master key (country code) is not enough, you need to dial the phone number so you establish communication with the right house and so with the right person. The same in VBA, you need to create an application VBA master object (phone number) so you can access every VBA object member (persons in the house), do it this way…
This line of code establishes communication with Word.
Set MyWordApp = CreateObject("Word.Application")
This line of code establishes communication with Outlook.
Set myOutlookApp = CreateObject("Outlook.Application")
This line of code establishes communication with Excel (from other application)…
Set MyExcelApp = CreateObject("Excel.Application")
3) Manipulate the VBA-enabled app objects
You are doing it very well, here is the 3-step roadmap…
- Enter the country code so you can communicate with it, in VBA terms, enable the app VBA library so you can access the other app
- Dial the phone number so you can start talking with the persons in the house, in VBA terms, create the app object so you start manipulating its objects
- It’s time to communicate with the persons in the house, in VBA terms, manipulate any app VBA object by using the objects hierarchy, object properties and methods, you can also use any VB command
You can see all these VBA concepts in action below…
VBA macro examples that manipulate other applications
VBA macro example 1 – Create a new PowerPoint presentation slide with an Excel chart
After activating the PowerPoint library, you create a PowerPoint app object (code line 8 below) and then you manipulate PowerPoint objects (code lines >8)…
Here’s the macro code…
Public Sub PasteCharttoSlide() 'Pastes the active chart into a new power point presentation Dim MyPowerPointApp As PowerPoint.Application Dim MyPresentation As PowerPoint.Presentation Dim MySlide As PowerPoint.Slide 'Creates instance of PowerPoint Set MyPowerPointApp = CreateObject("Powerpoint.Application") MyPowerPointApp.Visible = True 'Creates a presentation Set MyPresentation = MyPowerPointApp.Presentations.Add 'Adds one slide Set MySlide = MyPresentation.Slides.Add(1, ppLayoutBlank) 'Copies active chart as a picture ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture 'Pastes chart into slide MySlide.Shapes.Paste.Select MyPresentation.Slides(1).Shapes(1).Left = 100 MyPresentation.Slides(1).Shapes(1).Top = 100 'Saves the presentation MyPresentation.SaveAs "C:/MyPPT.ppt" MyPowerPointApp.Quit ' close Power Point application Set MyPowerPointApp = Nothing 'frees memory Set MyPresentation = Nothing End Sub
This is the end result…
Download the Excel macro file below…
{filelink=7}
VBA macro example 2 – Send an email from Excel
After activating the Outlook library, you create an Outlook app object (code line 10 below) and then you manipulate Outlook objects (code lines >10)…
Public Sub SendEmail() 'www.innateexcel.com - "Make Excel your second nature" 'John Franco 'Feb 08 2012 'Sends an email using the data of the current row (name in column A, email in column B,sales in column D) Dim myOutlookApp As Outlook.Application Dim myeMail As Outlook.MailItem Set myOutlookApp = New Outlook.Application 'sets a new instance of Outlook application 'Set myOutlookApp = CreateObject("Outlook.Application") Set myeMail = myOutlookApp.CreateItem(olMailItem) 'sets a new email item SalesAmount = Cells(ActiveCell.Row, 4) With myeMail .Subject = Cells(ActiveCell.Row, 1) & ", your sales amount..." 'sets the subject line, e.g. "Laura, your sales amount" .To = Cells(ActiveCell.Row, 2) 'reads the salesman email from active row .body = "Dear " & Cells(ActiveCell.Row, 1) & "Your sales amount is: " & Cells(ActiveCell.Row, 4) 'sets the body of email .send 'sends email End With Set myOutlookApp = Nothing 'frees memory End Sub
This is the result…
Download the Excel macro file below…
{filelink=8}