Académique Documents
Professionnel Documents
Culture Documents
Testimonials
Dear John, This is the book I was waiting for! Looking forward to your online Excel School on VBA TNX! Fondest Regards, Dick PS: Im verry glad to see you back online again
Dick
Just wanted to say thanks for putting out such wonderful, helpful, easy-tounderstand tips and instructions. Youre one of the best resources for Excel on the web! I look forward to learning about VBA!
Will
Page | 2
Dear John, I would like to tall you that you do a good job as you give it free. I am a Executive of a pharmaceuticals & I worked here as a Cost Accountant and I believe that I can do a lot better with your book. Thanks Hasan
Page | 3
IMPORTANT: As an added bonus for downloading this book, you have also access to more free Excel VBA training. To access your bonuses go to:
www.masterofmacros.com/blog
Page | 4
Notice of Rights All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher. If you want to sell this book, use it for commercial purposes, distribute it in bulk quantities in your workplace, or a hard copy version; please Contact me
Notice of Liability
The author and publisher have made every effort to ensure the accuracy of the information herein. However, the information contained in this book is sold without warranty, either express or implied. Neither the author and excelvba.org, nor its dealers or distributors, will be held liable for any damages to be caused either directly or indirectly by the instructions contained in this book, or by the software or hardware products described herein.
Trademark Notice
Rather than indicating every occurrence of a trademarked name as such, this book uses the names only in an editorial fashion and to the benefit of the trademark owner with no intention of infringement of the trademark.
Page | 5
Acknowledgement
You are enjoying a better Excel Macro book because I received the great advice and suggestions of a spontaneous/welcomed editor. Thank you Ron S. Contact him here: rohnskii@gmail.com
Page | 6
Table of contents
TESTIMONIALS ...........................................................................................................................2 ACKNOWLEDGEMENT .................................................................................................................6 TABLE OF CONTENTS ..................................................................................................................7 PURPOSE OF THIS BOOK .............................................................................................................9 BRIEF TABLE OF CONTENTS ..................................................................................................... 11 1. 2. 3. INTRODUCTION TO EXCEL MACROS .................................................................................. 12 WHAT IS AN EXCEL MACRO .............................................................................................. 15 HOW THE EXCEL MACRO RECORDER WORKS .................................................................... 22 3.1. THE EXCEL RECORDER REGISTERS EVERY ACTION YOU PERFORM ON EXCEL ....................................... 22 3.2. THE EXCEL RECORDER GENERATES A VBA INSTRUCTION AFTER THE GIVEN ACTION HAS BEEN PERFORMED ON EXCEL 24 3.3. THE EXCEL RECORDER CHANGES THE PROPERTIES OF EXCEL OBJECTS PROGRAMMATICALLY .............. 25 3.4. THE EXCEL RECORDER USES THE METHODS OF EXCEL OBJECTS PROGRAMMATICALLY ...................... 28 3.5. USING RELATIVE REFERENCE PRODUCES DIFFERENT VBA CODE .................................................. 29 4. HOW TO PLAN THE RECORDING OF AN EXCEL MACRO........................................................ 32 4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 5. GET RID OF UNSYSTEMATIC STUFF ............................................................................................ 33 BREAK THE MACRO INTO SMALLER CHUNKS ............................................................................... 35 DEFINE THE TYPE OF MACRO: SPECIFIC OR GENERALLY-APPLICABLE MACRO ...................................... 36 PLAN ONLY ONE INSTANCE ...................................................................................................... 40 FINISH THE MACRO SMARTLY .................................................................................................. 40 BACKUP THE FILE BEFORE RECORDING ...................................................................................... 41
HOW TO RECORD AN EXCEL MACRO ................................................................................. 42 5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. 5.8. 5.9. 5.10. WHERE TO PLACE THE CURSOR BEFORE RECORDING A MACRO? ..................................................... 43 WHERE TO PLACE THE CURSOR BEFORE STOPPING A MACRO? ........................................................ 44 HOW TO SET UP A MACRO ....................................................................................................... 44 HOW TO RECORD A DYNAMIC (GENERALLY-APPLICABLE) MACRO ..................................................... 48 HOW TO RECORD A SPECIFIC MACRO ......................................................................................... 49 HOW TO START THE RECORDING ............................................................................................... 50 HOW TO MODIFY THE MACRO WHILE YOU RECORD ........................................................................ 50 HOW TO STOP THE RECORDING OF A MACRO? ............................................................................. 51 HOW TO MODIFY THE CODE AFTER YOU RECORD A MACRO ............................................................. 53 HOW TO MERGE TWO OR MORE MACROS ................................................................................... 53
6.
HOW TO INTEGRATE AN EXCEL MACRO INTO YOUR WORKBOOKS ....................................... 57 6.1. 6.2. 6.3. 6.4. 6.5. HOW TO ACCESS A MACRO FROM THE WORKBOOK IT WAS CREATED ................................................. 57 HOW TO ACCESS A MACRO FROM ANY WORKBOOK ....................................................................... 67 WHERE TO PUT A MACRO YOU RECEIVE FROM OTHERS .................................................................. 82 HOW TO STOP THE EXECUTION OF A MACRO ................................................................................ 82 WHAT TO DO WHEN YOUR MACRO DONT DO WHAT YOU WANT ........................................................ 83
7.
HOW EXCEL VBA WORKS ................................................................................................. 84 7.1. 7.2. 7.3. 7.4. 7.5. VBA SYNTAX ........................................................................................................................ 88 EXCEL OBJECTS PROPERTIES AND METHODS .............................................................................. 89 HOW TO FIND EXCEL OBJECTS PROPERTIES AND METHODS? ......................................................... 91 EXCEL OBJECT MODEL REVEALED............................................................................................. 98 POPULAR EXCEL VBA OBJECTS.............................................................................................. 104
Page | 7
HOW TO MAKE AN EXCEL MACRO ADAPTABLE FOR VARIABLE-SIZED ARRAYS..................... 128 9.1. 9.2. 9.3. 9.4. MAKE YOUR MACRO VALID FOR STARTING EVERYWHERE IN THE SHEET ........................................... 128 HOW TO CHANGE ABSOLUTE REFERENCES INTO RELATIVE ONES .................................................... 135 MAKE YOUR MACRO TAKE DECISIONS ...................................................................................... 135 AVOID REPETITION ............................................................................................................... 138
10. HOW TO TROUBLESHOOT AN EXCEL MACRO.................................................................... 143 10.1. 10.2. 10.3. FIX VBA SYNTAX ERRORS ...................................................................................................... 143 FIX COMPILATION-TIME ERRORS ............................................................................................. 146 FIX RUN-TIME ERRORS .......................................................................................................... 147
11. ABILITIES AND WEAKNESSES OF RECORDED MACROS..................................................... 150 11.1. 11.2. WHAT THE EXCEL MACRO RECORDER CAN DO ........................................................................... 151 WHAT THE EXCEL MACRO RECORDER CANNOT DO...................................................................... 151
Page | 8
www.masterofmacros.com/blog
How to take full advantage of this book? The book was written for Excel 2007+ users in mind, but I included Excel 2003 directions so both users groups enjoy the book. I recommend you start from the chapter one: Introduction to Excel Macros on page 12; do it even if you are already familiar with recording Excel Macros, the reading is simple and you will refresh vital concepts. Otherwise, jump to the area that most interests you by using the detailed table of contents at the beginning on page 7 or the brief TOC below Page | 9
John Franco
P a g e | 10
10. HOW TO TROUBLESHOOT AN EXCEL MACRO.................................................................... 143 11. ABILITIES AND WEAKNESSES OF RECORDED MACROS..................................................... 150
P a g e | 11
1.
Computing is not about computers any more. It is about living Nicholas Negroponte
acros are for your work on Excel the same thing an Excavator for a Building construction project; excavating a given building foundation by hand would take 12 months
P a g e | 12
When you use manual labor, your productivity is set by your muscle power and the time you can employ your force decreases as you use it because you get bored. Even worst All the important tasks (pouring concrete, raising pillars and walls, etc.) are halted during the excavation process. You cannot pour any drop of concrete until you finish the foundation hole, only occurring after 12 months. Yes, your goal is finishing the building but you are limited to employ your force and talent on digging, for 12 bored months. On Excel, the time you employ copying/pasting or moving cells using your mouse is manual labor. While you are doing this industrious work, you cannot employ your energy on the things that add value to your work and organization: analyzing data, finding relationships, etc. (in other words, finishing the building). Here is the good news
P a g e | 13
P a g e | 14
2.
All programmers are playwrights and all computers are lousy actors Author unknown
The main benefit of such device is that everything you spoke once can be repeated over and over again without you physically speak again. Your voice is in the tape. You can even be heard without you been there. The Excel Macro recorder feature is a similar device. The difference is that you store Excel actions instead of your voice. These actions can be repeated again and again without your physical intervention on Excel. For example: Select a given data region, insert a table, and create a Pivot Table Select a heading of a given table and apply a particular formatting Delete all the empty sheets Delete all sheets except the current one Arrange cells in a particular layout And more An audio tape is a set of recorded sounds. A Macro is a set of recorded instructions. What kind of instructions? Actions like: changing the color of a cell, renaming a sheet, creating a table, sorting, filtering, etc. P a g e | 15
P a g e | 16
The Excel 2007/2010 status bar also indicates that Excel is in recording mode
On Excel 2003 Go to: Tools>Macro>Record New Macro And specify the Macro configuration (name, description, etc.)
After pressing OK, the status bar indicates that Excel is in recording mode
While this mode is activated, EVERYTHING you do on Excel will be recorded. This is not so good as it might appears; the same way your voice recording device registers your hesitations and background noise, the Excel recorder captures all your mistakes and incidental actions. This creates the need to edit recorded actions in Macros.
P a g e | 17
Tip While Excel is on recording mode, its behavior is normal, with one exception: in the background, Excel creates a Module (Module1, Module2, Module3, ModuleN) and a Sub procedure with the name you specify on the Record Macro dialog. By default: Macro1, Macro2, Macro3, MacroN.
Now I names by default are Macro1, Macro2, etc. as above to put Excel in The will record a simple Macro (Macro1). Proceed recording mode. Want to see whats going in the background? Split the Excel and the Excel VBA editor windows by right clicking on the Windows task bar (arrange windows vertically). See below the code window (Module1) with the Sub Macro1 before I do my first action on Excel
P a g e | 18
P a g e | 19
This is Macro1 after I select the cell A1 again and delete the content:
P a g e | 20
P a g e | 21
3.
he Excel macro recorder is a built-in engine that traces and stores your actions in Excel; its capabilities and features must be understood so you record efficient macros.
Additionally, you will need the Macro recorder even after you learn how to write macros from scratch; I still use it to record simple macros and as an Excel VBA content provider. So lets start
3.1. The Excel recorder registers every action you perform on Excel
On your audio recording device; while the Record button is pressed, everything is recorded: your voice and the background noise. On Excel; the same thing happens; while it is in recording mode every action is recorded. These actions might be: selecting a cell, writing a formula, scrolling, formatting a cell, zooming, etc. And every action is written on a line per line basis. Give a look
P a g e | 22
The same way a voice recording captures your hesitations and background noise, the Macro recorder captures everything you do, including your mistakes and incidental actions.
Tip Overlooked actions like: minimizing a window, adding a workbook, closing the current workbook, zooming, etc. are also recorded
P a g e | 23
Incidental action 4
3.2. The Excel recorder generates a VBA instruction after the given action has been performed on Excel
When you record your voice, you need to talk first so the recording device captures your speech; the same thing happens with Excel Macros. You need to perform an action on Excel (see left window below) so the Excel recorder registers it. See below
Selection first
Recording later
This is one of the main shortcomings to develop smart applications. A Macro does not have flow control, it starts and ends. It has no anticipation, no decision.
P a g e | 24
www.masterofmacros.com/blog
Lets see the next feature
3.3. The Excel recorder changes the properties of Excel objects programmatically
At first sight the produced VBA language is Greek; nothing more far from truth. Decode the VBA language grammar quickly by reading a short introduction to objects On the real world, your hair has properties: length, color, type; you can cut it, change its shape, etc. Your hair behaves in specific ways: it grows, it falls, etc.
Some properties can be changed, like the color. Yes you can apply a cosmetic treatment and turn your black hair into red, blond, etc. Some properties are read-only, you can know them but you cant change them. For example: your hair type: curly, straight. Lets summarize the features of your hair A hair Property is what you hair is: length, color, etc. A hair Method is what you can do with your hair: cut it, change its shape A hair Event is how it behaves: it grows, it falls, etc. Now back to Excel Excel has properties and methods too, and you can manipulate them by using VBA language. You are fully aware of the way you change properties of Excel objects, you know how to change the color of a cell, the font, the name of a sheet, etc. But you are not quite aware of how to change them programmatically; a Macro preforms that very easily. Lets see it Record a new Macro P a g e | 25
On the background, Excel translates that into VBA code. For now, imagine there is one by one correspondence between everything you do on Excel and the VBA code. So the above action would produce the following code
P a g e | 26
P a g e | 27
3.4. The Excel recorder uses the methods of Excel Objects programmatically
The same way you change the properties, you use the methods of Excel objects when you cut a cell, delete a sheet, open a workbook, etc. Here are some examples of how the Excel recorder uses Excel methods: The following action
P a g e | 28
Cut are recorded differently when you set the reference of the Macro to absolute
P a g e | 29
How do you set an absolute reference? On Excel 2007 go to View>Macros>Click on the drop down arrow; and then
Dont press it
On Excel 2003, use the Stop Recording toolbar (displayed in recording mode)
Now if you perform the same actions above: cut, select and paste but using relative reference, you would get a code like this one
When you run this Macro it will select the active cell instead of Range(A1)
P a g e | 30
Press it
On Excel 2003, use the Stop Recording toolbar (displayed in recording mode)
Tip You can change the reference from absolute to relative and vice versa while you record.
This has been all about how the Excel recorder works. Now, let me share to you everything about
P a g e | 31
4.
ecording a Macro is very easy from the point of view of the initiation process; you launch the Record Macro command and Excel starts to record everything you do.
The Excel recorder will also record your mistakes so If you want to record Macros that make what you want, you need to do some extra steps. I will show them below. But before you plan a Macro, you must answer the question Can this given task be done without Macros? You will know it to the extent you know the available functions and commands of Excel. Heres an example: not many users know how to transpose a column into a row and vice versa.
P a g e | 32
You can do this by using the Transpose option of the Paste Special command but if you dont know this, you would intend to record a Macro. It is not good to try to reinvent the wheel. Overlooking available Excel commands leads you to record unnecessary Macros.
Tip You will avoid recording unnecessary Macros as long as you know more about Excel available features. Now that you are ready to record a Macro, heres the process to make it efficiently
4.1.
Imagine you have a database like the one shown below with thousands of registers in raw format on column A. All the records are separated by one row, except the first group that is separated by two rows. See below
P a g e | 33
The purpose of your Macro is to turn each block of data into a line (table format). The formatting would be something like this one:
Recording a Macro in such circumstances would demand you create a Macro for two conditions. Yes you can do it, but let me ask you a question: is the development time worth the effort? It would be better to delete that row and record a Macro for a version of the report that has one row separation between blocks of data. Some prototyping measures include: Pasting all the data into the same sheet Leaving the same amount of space between data Get rid of random stuff Any other measure to uniform the data
P a g e | 34
Tip Dont try to make your Excel Macro EXCESSIVELY universal at least the benefits will pay off the development time and effort.
4.2.
Henry Ford stated that any task can be done if it is divided in enough doable parts. Plan your keystrokes by dividing them in workable parts. You decide what is doable for you. Here are some examples: Formatting, editing, etc. Moving cells, deleting rows, writing field headers, etc. You can be as detailed as you prefer For the case above, you can divide the Macro in two stages: 1. Arrange data (move cells and delete the inter-block row)
Move cells
Delete row
And P a g e | 35
Dont worry about having separate Macros; you can run them separately or merge them very easily. See: How to merge two or more Macros on page 53. Another idea is to perform a kind of dress rehearsal, this way you detect bottlenecks; with this information you can decide how to make the Recording Macro process more manageable. It doesnt hurt to try and make mistakes; given the fact that you create a backup to restore it at any time.
Tip Recording a Macro in a relaxed manner helps you to minimize incidental actions and mistakes.
But the tables are not on the same position, see tables below
P a g e | 36
The relative reference makes your Macro works based on the position of the cursor when you recorded the Macro.
The cursor was here before recording the Macro
Choose the location of the cursor carefully so you can remember that position easily in the future when running the Macro. How do you activate the relative reference parameter? It is very easy On Excel 2007/2010, go to: View>Macros>Macros P a g e | 37
On Excel 2003, activate it by using the Stop Recording toolbar (displayed while you are recording):
For example: I recorded the process shown below (writing of title, date and table headings) in a Macro with relative reference
Even I recorded the actions starting on cell A1, the Macro will work on any cell I run it, see below
The cursor must be here before I run the Macro
P a g e | 38
Tip Absolute or relative reference setting can be changed during the recording process. If you want to create the same table always at one location, whatever the position of the cursor; you need to use absolute reference Use absolute reference Use this option when your Macros will be applied on the same location all the time. See below
For example, if you record the actions that produce the table formatting below using absolute reference, the table will be always produced at that location.
P a g e | 39
Always starts on A1
4.4.
On the example below, you want to rearrange thousands of groups of raw data into table format. You need to plan one block because the rest is the same. The Macro is the processing of one block repeated thousands times. Plan this block only
4.5.
When you have thousands of blocks that repeat like the case shown above, you must record a block and finish the Macro at the start of the next block. In other words, the Macro will start on block 1 and will finish on the beginning of the block 2. Dont forget to set reference to relative. P a g e | 40
Tip Record a Macro at the start of one block and finish it at the start of the next block.
4.6.
Take into account that the actions are not undoable when you are recording a Macro. In consequence, avoid headaches. Get room for mistakes. Use the Save As command or make a copy using the Windows Explorer. You can also make a copy of the sheet you will apply the Macro on. Now you are ready to learn
P a g e | 41
5.
ecording a Macro is a linear process, you cannot move forward/backward and you cannot undo the recorded actions. Assuming you have planned your Macro, here you will learn how to record it.
In a nutshell To record a Macro, proceed this way On Excel 2007 or 2010 go to: View>Record Macro>Macro name:>Ok or click the Macro icon at the status bar
After you click the Ok button, Excel turns to recording mode. The status bar always indicates that Excel is in recording mode, see below
On Excel 2003, go to: Tools>Macro>Record New Macro>Macro name:>Ok. Excel 2003 shows Recording at the status bar to let you know it is in recording mode
This is just the beginning of the recording process. Lets go into details now
P a g e | 42
How to Record Excel Macros that Work 5.1. Where to place the cursor before recording a Macro?
This step is critical. It defines the reusability of the Macro. The starting location of the cursor does not matter when you are recording Macros that perform operations on the same location on each next time (using absolute references). On the other hand; the location of the cursor is critical when you are recording Macros that perform operations on a different location each next time (using relative references). Before you record a Macro, place the cursor at the start of any given sequence of actions. Choose a place that is reproducible later when running the macro. See below
Place the cursor here before recording
Always place your cursor at the right place before you launch the Record Macro command.
Tip When you record dynamic macros, place your cursor at a border location you will easily remember later.
P a g e | 43
How to Record Excel Macros that Work 5.2. Where to place the cursor before stopping a Macro?
The last position of the cursor does not matter when you are recording Macros using absolute reference. On the other hand; the ending location of the cursor is critical when you are recording Macros using relative reference. Before you stop a Macro place the cursor at the start of any given NEXT sequence of actions. See below
What happens when you do this? Your Macro will move across blocks of data on each run.
5.3.
You should set all the parameters of a Macro: Name, Shortcut, Store Macro in, and Description. Here I will show you how to do it
P a g e | 44
P a g e | 45
You can discern what the Macro does by looking at the name. Additionally, you will remember Macros weeks or months later. A good practice is to start a Macro name with a verb followed by the name of the object it affects (start each section in uppercase), for example: OpenWorkbook CloseExcel DeleteFormat ChangeColorCell ChangeColorFont Set a shortcut This also increases the usability of a Macro. You run a Macro from two keystrokes instead of searching the Macro on the Macro dialog list. On the Record Macro dialog, specify the shortcut key by just typing the letter you want to assign to the Macro. The shortcut key text box is case sensitive
P a g e | 46
You can change the shortcut and description later by going to the Macro dialog and click the Options button. See below
Define where to store the Macro There are two options Storing the Macro on a workbook. This forces you to open the file to run the Macro
P a g e | 47
Learn more about where to store your macros on the chapter: How to Integrate an Excel Macro into your Workbooks on page 57 Set a description You forget what a Macro does hours later, so provide a description about its purpose, and specify any detail needed for the correct use. This is more important if the Macro will be used by other users. The description can be edited later using the Options button of the Macro dialog
P a g e | 48
Relative References: 6. Record one instance of the Macro (if you have one thousands blocks of data, record just one) 7. Stop the Macro when your mouse is at the starting position of your next block of data (corresponding position to the location you started on step 1 of this tutorial)
6. Learn more about how to develop adaptable Macros by going to: Make your
Macro valid for starting everywhere in the sheet on page 128.
5.5.
As you learn before, these types of macros perform operations on the same location on each next time (using absolute reference). Heres the step by step procedure 1. Launch the Record Macro dialog (not necessary to put your cursor at any given position in your spreadsheet; in other words, you can include earlier mouse movements in your Macro 2. Assign a shortcut to your Macro (so you can repeat it easily) 3. Click Ok on the Record Macro dialog 4. Use Absolute references. Perform this before you perform any movement of your cursor. The absolute reference is set by default; in case Relative references are activated, deactivate them this way a. On Excel 2003 do it this way: click the Relative Reference button on the Stop Recording toolbar: b. On Excel 2007 do it this way: go to View>Macros> Macros>Use
Relative References: 5. Record the keystrokes you want to be repeated in your macro 6. Stop the Macro when all the keystrokes are recorded P a g e | 49
5.6.
Assuming that your cursor is on the correct position (for generally-applicable Macros) you just need to hit the Ok button and record the actions you have planned.
Relax please, if things go wrong, you have a backup copy to try it again.
5.7.
Split the windows (Excel VBA editor and Excel) so you know what lines are added as you execute movements on Excel. This way, you get awareness of the way each action is turned into VBA code. See below
P a g e | 50
If you commit mistakes or perform incidental actions, you can delete them on the go and keep recording. See below
Take care to not delete the last Selection statement. e.g. Range(A2).Select ; when the next instruction depends on it. Take care to not delete the End Sub statement. It is required for Excel to recognize where the macro ends.
Tip The new Macro code will be always written at the bottom of your last line in the Sub procedure.
5.8.
Once you have performed the last operation, you are ready to stop the recording of the Macro.
P a g e | 51
On Excel 2003, the Stop Recording toolbar is shown automatically after you start recording. See toolbar below
Sometimes, you close this toolbar by mistake and dont know how to stop the recording of a Macro; you can do it by going to Tools>Macro>Stop Recording.
Or you can show the toolbar again by right clicking on the toolbar area and activate the Stop Recording toolbar. See below
P a g e | 52
5.9.
If you are not comfortable with the code being created it is time to improve it. To make even minor modifications you need at least a basic foundation of Excel VBA knowledge. See: How Excel VBA works on page 84 for a quick introduction. If the modifications are big enough, there is no alternative than record the Macro again or write it from scratch (out of the scope of this book). Get your free Excel VBA bonus Beyond the Excel Recorder by visiting:
www.masterofmacros.com/blog
5.10. How to merge two or more Macros
Not all Macros are recorded in one sitting; you can enhance an existing Macro or record new lines apart and add them to an existing Macro. How do you do it? Just open the module that contains the Sub procedure (Macro), place the cursor on the desired location and paste instructions recorded in other Macros.
P a g e | 53
Here is an example of how to merge code This Macro writes Hello world on cell A1
P a g e | 54
P a g e | 55
Tip Keep aware that the Selection statements instructions of the pasted code are corresponding to the preceding and subsequent lines.
P a g e | 56
6.
hen you travel, bringing your camera with you is not enough; if the camera is stored on a bag difficult to open, you will lose important shots. It is better to carry the camera on your hand.
Now your Macro lies dormant in some module. It is of no value to your productivity if you cannot access it easily and at the right time. Here you will learn: Where to put your recorded Macros (recorded by you or received from others) How to make a Macro available to all workbooks How to make a Macro available to the workbook where it was created To access a Macro effectively you must first know where it is located. You specify this at the moment of recording. Macros are stored in Modules (.bas). Lets start
P a g e | 57
How do you make a Macro available to a workbook? You need to put it into a module of the given workbook. How do you do that? You have three options: 1) Specify the location at the moment of recording Set the field Store Macro in: to This Workbook or New Workbook. See below
Tip Changing the name of the module or the Sub wont affect their listing on the Macro dialog. 2) Paste a Macro into a workbook module You can also create your own modules and store Macros there. See below
P a g e | 59
For editing and managing purposes, it is a good practice to locate Macros in related modules with meaningful names.
P a g e | 60
You can also store your Macros on .txt files. Later, you can copy and paste the code into a module of any given workbook.
P a g e | 61
Once your Macro is on a module of a given workbook you can call it using several methods Access a Macro from the Macro Dialog Launch the Macro dialog by pressing ALT + F8. Then, choose Macros in: and select This Workbook (the Macros are listed on the pane below Macro name:). Then select the Macro you want to run and hit Run.
P a g e | 62
On the Assign Macro dialog, choose the desired Macro. Now your button is clickable! Add an extra touch Right click over the button and choose Edit text
P a g e | 63
Tip You can copy and paste a button to other workbook. The path of the Macro will be kept
P a g e | 64
If you forget to specify the shortcut at the moment of the recording, you can specify a shortcut later on the Macro dialog. Do it by going to: ALT + F8>Options>Shortcut key: See below
P a g e | 65
I used Sheet1 for this example; then, on the code window, choose Worksheet. See below
Choose object
Choose event
P a g e | 66
Or you can also call the Macro that is located in some module of the current project
6.2.
To make a Macro available to all your workbooks and from any session of Excel you must store it in the Personal workbook. The Personal workbook is a binary file (.xlsb) saved in a central location. The Macros on this workbook are visible to all books in any Excel session. See below
P a g e | 67
How do you do that? Specify the location at the moment of recording Set the field Store Macro in: to Personal Macro Workbook. See below
At the moment of running the Macro, it is not necessary you open the Personal Macro Workbook. See below
P a g e | 68
Tip By default the location of the personal workbook is: Windows Vista: C:\Users\user name\AppData\Local\Microsoft\Excel\XLStart Windows XP: C:\Documents and Settings\user name\Application Data\Microsoft\Excel\XLStart
Now that your given Macro is properly stored, you can Access a Macro from the Ribbon (Excel 2007) Unfortunately, Excel 2007 does not allow you to customize the Ribbon. The most you can do is to personalize the Quick Access Toolbar (QAT)
P a g e | 69
3. Select the Macro you want to add to the QAT and click on the Add>> button
P a g e | 70
Access a Macro from the Ribbon (Excel 2010) Now that your Macro can be called from any workbook, it is a good idea to create a dedicated Ribbon.
P a g e | 71
Group
Commands
Commands
Group
In 2010 you MUST create a new tab to be able to add new commands and macros. The existing tabs can only be modified to remove commands, new commands or macros cannot be added. Create a new tab with groups and commands (Macros) by proceeding this way 5. Right click over any area of the Ribbon and choose Customize the Ribbon
P a g e | 72
8. Right click on the default group created and choose Rename. Assign a name. See below
P a g e | 73
11. Right click over the recently added Macro and choose Rename. Assign a meaningful name and icon. See below
P a g e | 74
Tip You can export your Ribbon personal configuration and load it on any other PC.
Access a Macro from a toolbar (Excel 2003) Now that your Macro can be called from any workbook, it is a good idea to create a dedicated toolbar. Just to refresh your knowledge of the old Excel toolbar system, lets familiarize with the components again
Toolbar
Commands
You can create a new toolbar with commands (Macros). Proceed this way 1. Right click over any toolbar and choose Customize from the contextual menu.
P a g e | 75
2. Click on New in the Toolbars tab and assign a meaningful name. See below
3. Click on Commands tab>Categories: and go to Macros. Then drag and drop a Custom Button (Commands: area) to the recently created toolbar. See below
P a g e | 76
4. Right click over the recently created button and click Assign Macro. Choose the Macro to link to the button.
P a g e | 77
5. Modify the appearance of the button by right clicking on it and choosing: Edit Button Image, Name, etc.
You may also place a macro command on an existing toolbar. Access a Macro from a menu (Excel 2003) Now that your Macro can be called from any workbook, it is a good idea to create a dedicated menu. P a g e | 78
Command
Proceed this way 1. Right click over any toolbar and choose Customize from the contextual menu.
2. Click on Commands tab>Categories: and select New menu. Then drag and drop the New Menu button (Commands: area) to the desired location in the menu area. See below
P a g e | 79
3. Click on Macros and then drag and drop a Custom Button to the recently created menu.
P a g e | 80
4. Right click on the recently created button and then click assign Macro.
P a g e | 81
Proceed the same way as explained above in Access a Macro from a toolbar (Excel 2003) on page 75. You may also place a macro on an existing menu.
6.3.
First, open the workbook that contains the Macro, go to the module and copy the procedure, then open the destination workbook and open or create a module and paste the Sub procedure. You can also import any given module.
6.4.
You know how to run a Macro but what happens when the Macro is taking too much time or the Macro dont do what you want? You can stop a Macro while it is running by pressing the Esc key. And then, by pressing the End button. See below
P a g e | 82
www.masterofmacros.com/blog
P a g e | 83
7.
Those parts of the system that you can hit with a hammer (not advised) are called hardware; those program instructions that you can only curse at are called software. Author Unknown
magine you are going to spend your next vacation on Japan, you dont know Japanese but you equip with a 3-phrase vocabulary: How much is it? Where do I find cheap hotels?
After landing, your trip is going wonderful but suddenly your little son feels sick at the zooHow do you ask for help? The three phrases serve too little. To succeed in capricious situations, you need a wider lexicon. Recording Macros without knowing Excel VBA language is the same situation, you soon face disorientation because you dont know what the VBA code does and how to adapt your script to new situations like making your Macros work for variable-size arrays and workbooks. You can only be efficient on real social environment by understanding the language grammar so you can construct new expressions as new needs arise. At the same time, to get ahead on your automation requirements you must understand the basic principles of Excel VBA so you record Macros with confidence and alter its code to suit your needs. This book enables you to record efficient Macros and to gain a reasonable Excel VBA grammar awareness so you deal with new situations with more confidence. Lets understand the Excel VBA language better P a g e | 84
I bet you did! If not, you are somehow familiar with it because your children play it or because you have seen some TV commercial. Anyway Lets imagine for a moment you are a skilled video game developer (a coder) and you are creating the Mario character (the tiny guy on red dress below) for a new version of the game
As the developer, you must define his behavior and unique characteristics so players can manipulate Mario using a joystick.
So by the means of game designing tools you set all his features You first define his properties (physical and non-physical): Hair color Dress color Height Score P a g e | 85
Finally, you define the consequences of the actions Mario executes (events); for example: if an enemy kills Mario, he will die. You cannot create a command to make it die because nobody dies by command. Dying is a consequence of being killed, being ill, etc. The events you would create are: Height increase (when Mario eats a mushroom). Mario has two height modes: short (by default) and tall (after he eats a mushroom) Height reducing (when he is hit by an enemy while he is in tall mode) Die (when he is hit by an enemy while he is in short mode) Mario is ready. He is now an object with behavior and characteristics. By using the same developing means you must specify how the properties, methods and events interact with the user. In other words, how Mario would interact when a user uses a joystick. Any given player can change Mario height property by eating a mushroom or he can make him run, jump, etc. Lets imagine you write the instructions in plain English
If Mario eats a mushroom, then change the height of Mario to 5 pixels, or you
can use a more structured syntax: IF Mario eats a mushroom THEN Mario height = 5 pixels In VBA language this would be Mario.height = 5 P a g e | 86
Tip You cannot record Macros for object Events but you can use Excel object events when you write Macros from scratch.
7.1.
VBA syntax
To give an instruction in real world you use English, to give an instruction to Excel you use VBA language. And the syntax is as follows To change an object property, use the following syntax Objectname.PropertyNameHere = value assigned to property To get the value of an object property, use the following syntax Value gotten from property = Objectname. PropertyNameHere Now let me show you a real VBA syntax example I assign 8.5 width to the column A Columns("A:A").ColumnWidth = 8.5 To execute an object method, use the following syntax Objectname.MethodNameHere (argument1 of the method, argument2 of the method, argumentN of the method) Here I show you an example that executes the Select method of the range "A1:D1": Range("A1:D1").Select Where do you find the full syntax for a particular object and their members (properties, methods and events)? Go to: How to find Excel Objects properties and methods? On page 91 This has been a quick and practical introduction to Excel VBA grammar. Do you still find Excel VBA as Greek?
P a g e | 88
Edificio (Spanish)
KTpio (Greek)
Can you find a trace of a building in the words: edificio or KTpio? I bet you didnt Human languages work because a group of people accepts a set of symbols and give them unique meaning. So if you want to fully master Excel VBA grammar, you need to accept its arbitrariness the same way you accept the conventions of English.
Tip In English there is no a unique way to convey meaning, for example Susan, paint the wall, please Susan paint the wall, etc. Also, in VBA language, you can convery meaning in several correct ways.
7.2.
An Excel Macro is a group of instructions written in VBA language. A Macro modifies properties and executes methods of Excel objects (range, worksheet, workbook, etc.). If you want to alter the code of a Macro to get different results, change the way Excel modifies the properties of objects and the way it executes objects methods. P a g e | 89
How to Record Excel Macros that Work 7.3. How to find Excel Objects properties and methods?
What happens when you learn how to modify and access properties and methods? You acquire a key VBA competency. You need this knowledge to make Macros do what you want. So then if properties and methods are so important, where do I start? Properties and methods are related to any given object so first identify the object you want to manipulate: Range Worksheet Workbook, etc. The names of the members (properties and methods) are in English and are meaningful. For example: Borders ClearComments ActiveCell SpellingOptions MergeCells, etc. Use these handy techniques to find properties and methods Record instructions in a new Macro and then copy and paste them on the Macro you are modifying Use the Macro recorder as a VBA code provider. As simple as it sounds, if you want to add a line of code that write a formula in a given cell, record that action in a Macro and then copy and paste the produced code. If you want to change the font of a cell, record that action and then copy and paste that code. Get assistance from the Auto List Members command while you write I love this way of knowing the properties and methods. Avoid writing code from scratch, type CTRL + J to launch the Auto List Members feature. You can also launch this feature by using the Edit toolbar
P a g e | 91
See below
What is shown on the Auto List Members list? You see the available members at the current slot. See below
Methods for Range(A1)
Use the up/down arrows to navigate through members and the Tab/Enter key to accept a choice. The Auto List member feature is automatically displayed after entering a point
For any given method, its arguments are provided after you type the space bar or write a parenthesis
Tip Identify object methods with this symbol Identify object properties with this symbol Identify object events with this symbol
Use the VBA editor Help section For Excel 2007 users While you are on the VBA editor, press F1 or go to the Help menu. Then choose: Excel Object Model Reference, then pick the object and then browse the members list
P a g e | 93
3) Pick members
For Excel 2003 users While you are on the VBA editor, press F1 or go to the Help menu. Then type the name of the object on the search box
P a g e | 94
Use the Object browser The object browser is a pane that contains all the objects and their members organized. While you are on the Visual Basic editor, press F2 to launch it. Then, choose the VBA library
P a g e | 95
After that, pick any given object on the left pane and explore its members (properties, methods and events) on the right pane
You can copy the objects syntax from the pane and paste it on any given code window. Use right click or CTRL + C. See below
Use the Local Windows This is a more advanced technique Create this Macro:
P a g e | 96
The above methods are great to get the full syntax and help about any object property and method. If you want to go deeper in the Excel Objects universe, come with me, I will show you the
P a g e | 97
How to Record Excel Macros that Work 7.4. Excel Object Model revealed
The Excel object model is a necessary conceptual artifact to manage the objects of an application. Now, you will create a new frame of mind to understand this concept. Imagine the earth is composed of one surface and many trees
Trees
1 2
Fruits
Surface
Now imagine for a moment you are the creator of this earth. The inventory of everything on it would be this one
Now, imagine you give a command to a human to collect the fruit 1 from the trees. The human would ask you: the fruit 1 of which tree? So you need to narrow down your instruction. You would say, bring me the fruit 1 of the tree 2. P a g e | 98
Lets talk more about collections The earth has three collections (notice the s at the end, collections are always plural): Trees Branches Fruits The collection of trees would be something like this one
P a g e | 99
And each object in a given collection has its own features. See below
P a g e | 100
And some objects dont belong to any collection but they also has properties and methods
An object model is the hierarchy of collections and objects of a whole system. Here you have a detailed object model of the earth
P a g e | 101
P a g e | 102
So In Excel to access a range object, you must specify which one from which worksheet and from which workbook. P a g e | 103
But, if you want to write Hello world on the cell A1 of the Sheet2 (while Sheet1 is active), you must write the sheet qualifier. See below
7.5.
Heres a list of the most prominent Excel objects and their most used members (properties and methods). This list is not exhaustive (additionally, I have not included events). Range Here is the list of the 57 (out of 97) most used Range Properties:
Name Activate AddComment Address AutoFilter AutoFit BorderAround Description1 Activates a single cell, which must be inside the current selection. To select a range of cells, use the Select method. Adds a comment to the range. Returns a String value that represents the range reference in the language of the Macro. Filters a list using the AutoFilter. Changes the width of the columns in the range or the height of the rows in the range to achieve the best fit. Adds a border to a range and sets the Color, LineStyle, and Weight properties for the new border. Variant.
P a g e | 104
Borders Cells Clear ClearComments ClearContents ClearFormats ClearHyperlinks Column Columns Comment Copy Count
Returns a Borders collection that represents the borders of a style or a range of cells (including a range defined as part of a conditional format). Returns a Range object that represents the cells in the specified range. Clears the entire object. Clears all cell comments from the specified range. Clears the formulas from the range. Clears the formatting of the object. The description for this item will appear in the final release of Office 14. Returns the number of the first column in the first area in the specified range. Read-only Long. Returns a Range object that represents the columns in the specified range. Returns a Comment object that represents the comment associated with the cell in the upper-left corner of the range. Copies the range to the specified range or to the Clipboard. Returns a Long value that represents the number of objects in the collection. Returns a Range object that represents the current region. The current region is a range bounded by any combination of blank rows and blank columns. Read-only. Cuts the object to the Clipboard or pastes it into a specified destination. Deletes the object. Returns a Range object that represents the cell at the end of the region that contains the source range. Equivalent to pressing END+UP ARROW, END+DOWN ARROW, END+LEFT ARROW, or END+RIGHT ARROW. Readonly Range object. Finds specific information in a range. Continues a search that was begun with the Find method. Finds the next cell that matches those same conditions and returns a Range object that represents that cell. Doesnt affect the selection or the active cell. Returns a Font object that represents the font of the specified object. Returns a FormatConditions collection that represents all the conditional formats for the specified range. Read-only. Returns or sets a Variant value that represents the object's formula in A1style notation and in the language of the Macro. Returns or sets the array formula of a range. Returns (or can be set to) a single formula or a Visual Basic array. If the specified range doesn't contain an array formula, this property returns null. Read/write Variant. Returns or sets the formula for the object, using A1-style references in the language of the user. Read/write Variant.
End Find
FormulaArray FormulaLocal
P a g e | 105
FormulaR1C1 FormulaR1C1Local HorizontalAlignment Hyperlinks Insert Interior Item Merge Name NumberFormat Offset
Replace Row Rows Select Sort Table Text TextToColumns UnMerge Value Value2 VerticalAlignment
P a g e | 106
Worksheet
Here is the list of the 26 (out of 77) most used Range methods:
Name Activate AddComment AutoFilter Clear ClearComments ClearContents ClearFormats ClearHyperlinks
2
Description2 Activates a single cell, which must be inside the current selection. To select a range of cells, use the Select method. Adds a comment to the range. Filters a list using the AutoFilter. Clears the entire object. Clears all cell comments from the specified range. Clears the formulas from the range. Clears the formatting of the object. The description for this item will appear in the final release of Office 14.
P a g e | 107
P a g e | 108
Name Cells
P a g e | 109
Here is the list of the 15 (out of 30) most used Worksheet methods:
Name Activate Description4 Makes the current sheet the active sheet. Calculates all open workbooks, a specific worksheet in a workbook, or a specified range of cells on a worksheet, as shown in the following table. Returns an object that represents either a single embedded chart (a ChartObject object) or a collection of all the embedded charts (a ChartObjects object) on the sheet. Copies the sheet to another location in the workbook. Deletes the object. Moves the sheet to another location in the workbook. Pastes the contents of the Clipboard onto the sheet. Pastes the contents of the Clipboard onto the sheet, using a specified format. Use this method to paste data from other applications or to paste data in a specific format. Returns an object that represents either a single PivotTable report (a PivotTable object) or a collection of all the PivotTable reports (a PivotTables object) on a worksheet. Read-only. Creates a new PivotTable report. This method doesnt display the PivotTable Wizard. This method isnt available for OLE DB data sources. Use the Add method to add a PivotTable cache, and then create a PivotTable report based on the cache. Prints the object. Shows a preview of the object as it would look when printed. Protects a worksheet so that it cannot be modified. Saves changes to the chart or worksheet in a different file.
Calculate
PasteSpecial
PivotTables
P a g e | 110
Workbook Here is the list of the 14 (out of 108) most used Workbook properties:
Name Description Returns a Chart object that represents the active chart (either an embedded chart or a chart sheet). An embedded chart is considered active when it's either selected or activated. When no chart is active, this property returns Nothing. Returns an object that represents the active sheet (the sheet on top) in the active workbook or in the specified window or workbook. Returns Nothing if no sheet is active. Returns a Sheets collection that represents all the chart sheets in the specified workbook. Forces a full calculation of a workbook. Read/write. Returns the name of the object, including its path on disk, as a string. Read-only String. Returns a String indicating the name of the object, including its path on disk, as a string. Read-only. Returns a String value that represents the name of the object. Returns a Names collection that represents all the names in the specified workbook (including all
ActiveChart
P a g e | 111
Path
RemovePersonalInformation Saved
Sheets
Windows
Worksheets
Here is the list of the 8 (out of 65) most used Workbook methods:
Name Activate Close RefreshAll Description Activates the first window associated with the workbook. Closes the object. Refreshes all external data ranges and PivotTable reports in the specified workbook.
P a g e | 112
Application Here is the list of the 24 (out of 206) most used Application properties:
Name Description5 Returns a Range object that represents the active cell in the active window (the window on top) or in the specified window. If the window isn't displaying a worksheet, this property fails. Read-only. Returns a Chart object that represents the active chart (either an embedded chart or a chart sheet). An embedded chart is considered active when it's either selected or activated. When no chart is active, this property returns Nothing. Returns or sets the name of the active printer. Read/write String. Returns an object that represents the active sheet (the sheet on top) in the active workbook or in the specified window or workbook. Returns Nothing if no sheet is active.
ActiveCell
ActiveChart ActivePrinter
ActiveSheet
5
P a g e | 113
ActiveWorkbook
Cells Charts
Columns Range
Worksheets
ReferenceStyle
P a g e | 114
Windows WorksheetFunction
Here is the list of the 18 (out of 51) most used Application methods:
Name GetSaveAsFilename Goto InputBox OnKey Description Displays the standard Save As dialog box and gets a file name from the user without actually saving any files. Selects any range or Visual Basic procedure in any workbook, and activates that workbook if its not already active. Displays a dialog box for user input. Returns the information entered in the dialog box. Runs a specified procedure when a particular key or key combination is pressed. Schedules a procedure to be run at a specified time in the future (either at a specific time of day or after a specific amount of time has passed). Sets the text of the Undo and the name of the procedure thats run if you choose the Undo command (Edit menu) after running the procedure that sets this property. Quits Microsoft Excel. Repeats the last user-interface action. Cancels the last user-interface action. Pauses a running Macro until a specified time. Returns True if the specified time has arrived.
OnTime
P a g e | 115
P a g e | 116
P a g e | 117
8.
The question of whether a computer can think is no more interesting than the question of whether a submarine can swim Edsger W. Dijkstra
E
So
xcel records everything you do: if you scroll, if you shift sheets to give a look, if you minimize a window, etc. All these unnecessary lines of VBA code can be easily detected and deleted without affecting the end result of a macro.
Why to have redundant code that does not contribute to the end result of your Macro?
If you find recorded Macros horrible, here you will learn what to discard and what to keep, and have the same results.
8.1.
Some of the actions you can delete right away are: Scrolling Selections of Ranges Selections of Sheets Zooming Any other action that does not add value to the Macro bottom line The best way to be aware of how the code is produced is by splitting the Excel VBA editor window and the Excel window. Right click on the Windows task bar and click on Arrange Windows Vertical P a g e | 118
P a g e | 119
How to Record Excel Macros that Work 8.2. Polish all the With structures
When I was learning Macros years ago, I thought I had got it, I said to me: Excel records each action after you executes it on the frontend interface But I felt disoriented when I performed a single keystroke and Excel wrote a paragraph (not a single line as expected). Try the following: record a Macro that only center-aligns cell A1 using the alignment tab.
You expect to see a single line of code at the module. Something like this one
P a g e | 120
Why did Excel produce more VBA code than the actions I performed? First, let me explain what a With structure is The concept is very simple, instead of writing all this code: Selection.HorizontalAlignment = xlCenter Selection.WrapText = False Selection.Orientation = 0 Etc The With statement allows you to perform a series of instructions for the given object (Selection on this case) without re-qualifying the name of the object. For the above instructions you would write With Selection .HorizontalAlignment = xlCenter .WrapText = False .Orientation = 0 End With When is a With structure produced? Excel groups VBA instructions into a With structure each time you change Excel properties that come in groups, for example: the Format Cells dialog. P a g e | 121
See the produced code after I just changed the Paper size to A3
P a g e | 122
As you can notice it, Excel set all the parameters under the Page tab. For the case above, leave only the things you are changing. For some cases, the With structure is not necessary so you can proceed in two different ways
P a g e | 123
Delete the With structure Even more efficient, you can delete the with structure (no more necessary)
The Macro shown below consumes fewer resources. This is noticeable when your Macro makes hundreds of selections.
Dont delete selections that are used by your Macro. Keep the last selection statement if it will be used for next instructions. Delete unnecessary references Cells dont need to be selected to work with them. So you can also delete selections more intelligently
P a g e | 125
8.4.
You can add new instructions to any part of your recorded Macro. For example to auto fit columns, format a group of cells, etc. Take into account the Selection statements before and after the added code. In other words: if the added code uses Selection, it should be corresponding with the last line of code. At the same time, your added code must end with a selection compatible with the next line of code. To add code you can proceed in two different ways: write it from scratch or just record a macro and merge it to the Macro you are editing.
8.5.
Turn long lines into short ones by adding a break. How do you add a break? Place the cursor at the location you want to split, hit the space bar and write the _ character. See below
P a g e | 126
How to Record Excel Macros that Work 8.6. Document every Macro
When you provide a password to your Gmail or Yahoo account, you are asked for a private question; why is that required? You will remember that question decades later. The same way you must provide description to Macros so you remember them even in the years coming. Here are some guidelines Describe WHY things are being done, not HOW. Use blank lines to separate blocks of logic, to make the code more readable. Use indentation to identify blocks of code especially in repeating loops like FOR NEXT, IF ELSE END IF A professional comment must include these elements: Purpose (what the macro does) Assumptions (external variable, control, file, etc. accessed by the macro) Effects (each affected external variable, control, or file, and the effect it has (only if it is not obvious)) Inputs Returns For commenting, use the Edit toolbar
Or simply use an apostrophe () before a line. By default, comments are turned into green. Here is an example
P a g e | 127
9.
ow you will get a quick-start understanding of two basic concepts: variables and branching.
A full understanding of the Excel VBA language is out of the scope of this book but here you will learn the basics to make Macros work for variable conditions. There are many ways of doing a Macro usable for the next time and for the next worksheet, I will expose the three main techniques here:
9.1. Make your Macro valid for starting everywhere in the sheet
Imagine you are programming Mario to climb up a ladder; he climbs up rung 1, then 2, etc. until he reaches the top. Now, what would happen if Mario starts to climb up beginning at the rung 4? If Mario is set to start always at rung 1, he would jump back to step 1 when he is at rung 4. If he is on the rung 3, the same would occur.
P a g e | 128
5 5 4 3 2 2 1
How to fix this problem? Mario must be able to climb up to the NEXT step wherever he starts in the ladder. The effective programming of this routine should be relative to his current position.
5 5 4 3 2 2 1
Some Macros must be able to run correctly from different starting cells. In other words you must prepare your Macro to start from a different position from where you recorded it. Hopefully, this is easily achieved by setting the reference to Relative. See how to do it on the picture below P a g e | 129
P a g e | 130
Tip When you use relative references, Excel replaces an absolute selection like this one: Range("B3").Select
The cell B3 will be always selected when you use Range("B3")
When I run the above Macro, it will always write Hello world at the cell A1. Even if the cursor is at B3
I move the cursor to the cell C7 and run the Macro, guess what? It writes Hello world at the cell A1.
P a g e | 131
The key design factor is to perform the action based on the actual position. The following Macro uses a relative reference
When I run the Macro, it will always write Hello world at the current cell. I run the Macro at cell C3
P a g e | 132
After moving the cells to columns B, C, D, E, and F; you must delete these rows
The key strategy is to record the Macro (using relative reference) only for the first block and finish it on the starting cell of the next block
P a g e | 133
1) After you move all the cells and delete the rows
The Macro will do the same starting on the active cell A2 above To run the Macro efficiently, assign it a shortcut so you execute it again and again. Here is the Macro
P a g e | 134
Try the above macro by yourself. The ColumnToTable.xls file is provided as part of the download .zip file. The final result is this one
9.3.
All things get better when a Macro takes a decision. There are several condition structures; here you will learn to use the If Then Else structure P a g e | 135
The expression: Range(A1) = can be replaced by any expression that returns TRUE/FALSE, for example: Range(A1) = Range(A1) < 0 ActiveSheet.Name = report And more You dont want the Macro run if the current cell is empty so copy the ColumnToTable Macro (above example) into the IFTHENELSE structure. See below If the current cell is empty the Macro shows a message: No data to process
P a g e | 136
P a g e | 137
The PC does not get bored when processes thousands of lines instead of a couple of them. To process all the blocks in the raw report above, you need to press the shortcut each time you want to execute a block. It is fun but you need to keep pressing a couple of keys for a while. This is good because you have control of the process; but sometimes you want the Macro processes thousands of records at once. I will show you how to do it without you further intervene You will use two repetition structures (loops) For Next Loop The following code loops through every cell from row 1 to 65,536 in column 1.
For the above example, if you would have 2000 blocks, you would copy and paste your ColumnToTable Macro code into the following loop structure.
P a g e | 138
Do Until loop Imagine Mario must climb up the ladder until he finds a mushroom, you dont know where the mushroom will be. For these cases you create an open loop. This type of loop repeats itself until the given condition occurs. For the above example, if you dont know how many records you have in the sheet, you can create a loop that repeats until the last cell is empty. See below
P a g e | 139
Use counters Tables contain hundreds and thousands of registers, a key skill is to be able to go row by row and column by column to make any sort of computation. How to process each row/column without effort? The secret is to use the objects: Cells, Offset and collections with counters. What is a counter? Instead of using a fixed number like: Cells(1,1)
P a g e | 140
You can replace the i variable name for any other valid description: RowCounter, MyCounter, etc. The following Macro renames each sheet with the content of its cell A1.
P a g e | 141
P a g e | 142
Problems in Macros are normal; here I will show you basic tactics that can save your day.
10.1.
When you check a document to find spelling mistakes you have a quite easy task since the rules are established; and things get easier because you dispose of spelling checking tools. When you use the popular Text processor Microsoft Word, you get a visual aid about where the errors are located. See below
On the Excel VBA code window you have a similar assistance when you commit a syntax mistake. The syntax errors are shown in red by default. This syntax checking feature can be changed on Tools>Options>Editor Format>Code Colors>Syntax Error Text
P a g e | 143
VBA syntax errors might be: Misspelling of an object name, property, method, argument Lack of arguments Lack of list separators (,), () Lack of (=) sign The same way that occurs in MS Word, you are notified of such errors as soon as you finish the writing. This syntax checking feature is active by default on Tools>Options>Editor>Code Settings>Auto Syntax Check. See below
P a g e | 144
To fix syntax errors you must write VBA instructions correctly; try these tactics when you get errors Find help about the right syntax for the objects and members you are writing. Press F1 Replace wrong instructions by right ones, if you cant do it record the macro again Use the Auto List Members feature to get the right syntax instead of writing it yourself. Use CTRL + J to launch this feature Follow the instructions of the warning message (error dialog): Expected: list separator or ), Expected: Expression, etc. Press the Help button on the warning message and implement the suggested solution Here are some examples of syntax mistakes:
P a g e | 145
Lack of the column specification. The correct syntax is: Offset (row,column)
10.2.
A compilation-time error is only detected when you try to run a Macro. Typical mistakes are incomplete structures. See example below
P a g e | 146
10.3.
These are the errors that occur during the execution of the Macro; let me explain it to you better with an example The Macro below works perfectly: no syntax errors, no compilation-time errors but while running, it gives you an error. See example below The following Macro deletes the active sheet
But if the sheet you try to delete is the unique of the workbook, Excel will show you the message
P a g e | 147
But it doesnt matter, either way you wanted to delete the sheet so you can ignore the error message. Include the statement: On Error Resume Next. This statement ignores the line where the error was produced and continues on the next line. See below
Proceed certain way when an error is produced The error produced when you try to delete the unique sheet of a given workbook is predictable, so you must create an error trap routine to manage the situation.
P a g e | 148
P a g e | 149
But they are useless. They can only give you answers Pablo Picasso, about computers
adly, recording Macros is not the panacea for your automation requirements. To be aware of the limitations of Macros; take into account that an excavator by itself is only able to dig and discharge soil on trucks.
The same way the excavator needs planning beyond the mere digging command (what to do while the trucks are gone, what to do if the soil gets more compact, what to do if the soil gets softer, etc.); there are Excel activities that definitely cannot be achieved using plain Macros, for example: creating forms, performing advanced analysis, etc. At this point you need to modify and create your own Macros. On one of my surveys to my subscribers, one of them gave me a great answer In response to this question What are the top two questions about recording/fine-tuning Excel Macros that I ABSOLUTELY must answer on this program? He replied: Nothing with recording...that is a garbage way of doing
things...write the VBA code from scratch otherwise this course is a waste of money and time. Any moron can record a Macro!
I agree that Writing Macros from scratch is the way to go but I disagree about the Excel recorder impractical nature. Here you have a short list of the pros and cons of the Excel recorder P a g e | 150
How to Record Excel Macros that Work 11.1. What the Excel Macro recorder can do
Here is a list of the things Excel recorder can do: Performs repetitive operations Creates Pivot Tables, Charts, Tables Writes formulas Provides you with VBA content otherwise you must write it Teaches you how to put Excel VBA code to work. It is a kind of ondemand VBA example generator
11.2.
It It It It It It It
Here is a list of the things Excel recorder cannot do: does does does does does does does
My final message is: Master your recording Macros skills and you will have a great background and coder-assistant when you write Excel Macros from scratch. Relax while the PC performs the slave-labor job. Thats all on this eBook I hope you have enjoyed it! And remember, you assimilate 10% of what you hear 40% of what you see 90% of what you do! Put your hard hat and record Excel Macros NOW! The next couple of minutes are enough to record a single Macro and break the inertia.
P a g e | 151
www.masterofmacros.com/blog
P a g e | 152