Getting started with VBA in Office
Are you facing a repetitive clean up of fifty tables in Word? Do you want a particular document to prompt the user for input when it opens? Are you having difficulty figuring out how to get your contacts from Microsoft Outlook into a Microsoft Excel spreadsheet efficiently?
You can perform these tasks and accomplish a great deal more by using Visual Basic for Applications (VBA) for Office—a simple, but powerful programming language that you can use to extend Office applications.
This article is for experienced Office users who want to learn about VBA and who want some insight into how programming can help them to customize Office.
The Office suite of applications has a rich set of features. There are many different ways to author, format, and manipulate documents, email, databases, forms, spreadsheets, and presentations. The great power of VBA programming in Office is that nearly every operation that you can perform with a mouse, keyboard, or a dialog box can also be done by using VBA. Further, if it can be done once with VBA, it can be done just as easily a hundred times. (In fact, the automation of repetitive tasks is one of the most common uses of VBA in Office.)
Beyond the power of scripting VBA to accelerate every-day tasks, you can use VBA to add new functionality to Office applications or to prompt and interact with the user of your documents in ways that are specific to your business needs. For example, you could write some VBA code that displays a pop up message that reminds users to save a document to a particular network drive the first time they try to save it.
This article explores some of the primary reasons to leverage the power of VBA programming. It explores the VBA language and the out-of-the-box tools that you can use to work with your solutions. Finally, it includes some tips and ways to avoid some common programming frustrations and missteps.
When to use VBA and why
There are several principal reasons to consider VBA programming in Office.
Automation and repetition
VBA is effective and efficient when it comes to repetitive solutions to formatting or correction problems. For example, have you ever changed the style of the paragraph at the top of each page in Word? Have you ever had to reformat multiple tables that were pasted from Excel into a Word document or an Outlook email? Have you ever had to make the same change in multiple Outlook contacts?
If you have a change that you have to make more than ten or twenty times, it may be worth automating it with VBA. If it is a change that you have to do hundreds of times, it certainly is worth considering. Almost any formatting or editing change that you can do by hand, can be done in VBA.
Extensions to user interaction
There are times when you want to encourage or compel users to interact with the Office application or document in a particular way that is not part of the standard application. For example, you might want to prompt users to take some particular action when they open, save, or print a document.
Interaction between Office applications
Do you need to copy all of your contacts from Outlook to Word and then format them in some particular way? Or, do you need to move data from Excel to a set of PowerPoint slides? Sometimes simple copy and paste does not do what you want it to do, or it is too slow. You can use VBA programming to interact with the details of two or more Office applications at the same time and then modify the content in one application based on the content in another.
Doing things another way
VBA programming is a powerful solution, but it is not always the optimal approach. Sometimes it makes sense to use other ways to achieve your aims.
The critical question to ask is whether there is an easier way. Before you begin a VBA project, consider the built-in tools and standard functionalities. For example, if you have a time-consuming editing or layout task, consider using styles or accelerator keys to solve the problem. Can you perform the task once and then use CTRL+Y (Redo) to repeat it? Can you create a new document with the correct format or template, and then copy the content into that new document?
Office applications are powerful; the solution that you need may already be there. Take some time to learn more about Office before you jump into programming.
Before you begin a VBA project, ensure that you have the time to work with VBA. Programming requires focus and can be unpredictable. Especially as a beginner, never turn to programming unless you have time to work carefully. Trying to write a "quick script" to solve a problem when a deadline looms can result in a very stressful situation. If you are in a rush, you might want to use conventional methods, even if they are monotonous and repetitive.
VBA Programming 101
Using code to make applications do things
You might think that writing code is mysterious or difficult, but the basic principles use every-day reasoning and are quite accessible. Microsoft Office applications are created in such a way that they expose things called objects that can receive instructions, in much the same way that a phone is designed with buttons that you use to interact with the phone. When you press a button, the phone recognizes the instruction and includes the corresponding number in the sequence that you are dialing. In programming, you interact with the application by sending instructions to various objects in the application. These objects are expansive, but they have their limits. They can only do what they are designed to do, and they will only do what you instruct them to do.
For example, consider the user who opens a document in Word, makes a few changes, saves the document, and then closes it. In the world of VBA programming, Word exposes a Document object. By using VBA code, you can instruct the Document object to do things such as Open, Save, or Close.
The following section discusses how objects are organized and described.
The Object Model
Developers organize programming objects in a hierarchy, and that hierarchy is called the object model of the application. Word, for example, has a top-level Application object that contains a Document object. The Document object contains Paragraph objects and so on. Object models roughly mirror what you see in the user interface. They are a conceptual map of the application and its capabilities.
The definition of an object is called a class, so you might see these two terms used interchangeably. Technically, a class is the description or template that is used to create, or instantiate, an object.
Once an object exists, you can manipulate it by setting its properties and calling its methods. If you think of the object as a noun, the properties are the adjectives that describe the noun and the methods are the verbs that animate the noun. Changing a property changes some quality of appearance or behavior of the object. Calling one of the object methods causes the object to perform some action.
The VBA code in this article runs against an open Office application where many of the objects that the code manipulates are already up and running; for example, the Application itself, the Worksheet in Excel, the Document in Word, the Presentation in PowerPoint, the Explorer and Folder objects in Outlook. Once you know the basic layout of the object model and some key properties of the Application that give access to its current state, you can start to extend and manipulate that Office application with VBA in Office.
In Word, for example, you can change the properties and invoke the methods of the current Word document by using the ActiveDocument property of the Application object. This ActiveDocument property returns a reference to the Document object that is currently active in the Word application. "Returns a reference to" means "gives you access to."
The following code does exactly what it says; that is, it saves the active document in the application.
Read the code from left to right, "In this Application, with the Document referenced by ActiveDocument, invoke the Save method." Be aware that Save is the simplest form of method; it does not require any detailed instructions from you. You instruct a Document object to Save and it does not require any more input from you.
If a method requires more information, those details are called parameters. The following code runs the SaveAs method, which requires a new name for the file.
Values listed in parentheses after a method name are the parameters. Here, the new name for the file is a parameter for the SaveAs method.
You use the same syntax to set a property that you use to read a property. The following code executes a method to select cell A1 in Excel and then to set a property to put something in that cell.
The first challenge in VBA programming is to get a feeling for the object model of each Office application and to read the object, method, and property syntax. The object models are similar in all Office applications, but each is specific to the kind of documents and objects that it manipulates.
In the first line of the code snippet, there is the Application object, Excel this time, and then the ActiveSheet, which provides access to the active worksheet. After that is a term not as familiar, Range, which means "define a range of cells in this way." The code instructs Range to create itself with just A1 as its defined set of cells. In other words, the first line of code defines an object, the Range, and runs a method against it to select it. The result is automatically stored in another property of the Application called Selection.
The second line of code sets the Value property of Selection to the text "Hello World", and that value appears in cell A1.
The simplest VBA code that you write might simply gain access to objects in the Office application that you are working with and set properties. For example, you could get access to the rows in a table in Word and change their formatting in your VBA script.
That sounds simple, but it can be incredibly useful; once you can write that code, you can harness all of the power of programming to make those same changes in several tables or documents, or make them according to some logic or condition. For a computer, making 1000 changes is no different from making 10, so there is an economy of scale here with larger documents and problems, and that is where VBA can really shine and save you time.
Macros and the Visual Basic Editor
Now that you know something about how Office applications expose their object models, you are probably eager to try calling object methods, setting object properties, and responding to object events. To do so, you must write your code in a place and in a way that Office can understand; typically, by using the Visual Basic Editor. Although it is installed by default, many users do not know that it is even available until it is enabled on the ribbon.
All Office applications use the ribbon. One tab on the ribbon is the Developer tab, where you access the Visual Basic Editor and other developer tools. Because Office does not display the Developer tab by default, you must enable it by using the following procedure:
To enable the Developer tab
On the File tab, choose Options to open the Options dialog box.
Choose Customize Ribbon on the left side of the dialog box.
Under Choose commands from on the left side of the dialog box, select Popular Commands.
Under Customize the Ribbon on the right side of the dialog box, select Main Tabs in the drop down list box, and then select the Developer checkbox.
In Office 2007, you displayed the Developer tab by choosing the Office button, choosing Options, and then selecting the Show Developer tab in Ribbon check box in the Popular category of the Options dialog box.
After you enable the Developer tab, it is easy to find the Visual Basic and Macros buttons.
Figure 1. Buttons on the Developer tab
To protect Office users against viruses and dangerous macro code, you cannot save macro code in a standard Office document that uses a standard file extension. Instead, you must save the code in a file with a special extension. For example you cannot save macros in a standard Word document with a .docx extension; instead, you must use a special Word Macro-Enabled Document with a .docm extension.
When you open a .docm file, Office security might still prevent the macros in the document from running, with or without telling you. Examine the settings and options in the Trust Center on all Office applications. The default setting disables macro from running, but warns you that macros have been disabled and gives you the option to turn them back on for that document.
You can designate specific folders where macros can run by creating Trusted Locations, Trusted Documents, or Trusted Publishers. The most portable option is to use Trusted Publishers, which works with digitally signed documents that you distribute. For more information about the security settings in a particular Office application, open the Options dialog box, choose Trust Center, and then choose Trust Center Settings.
Some Office applications, like Outlook, save macros by default in a master template on your local computer. Although that strategy reduces the local security issues on your own computer when you run your own macros, it requires a deployment strategy if you want to distribute your macro.
Recording a macro
When you choose the Macro button on the Developer tab, it opens the Macros dialog box, which gives you access to VBA subroutines or macros that you can access from a particular document or application. The Visual Basic button opens the Visual Basic Editor, where you create and edit VBA code.
Another button on the Developer tab in Word and Excel is the Record Macro button, which automatically generates VBA code that can reproduce the actions that you perform in the application. Record Macro is a terrific tool that you can use to learn more about VBA. Reading the generated code can give you insight into VBA and provide a stable bridge between your knowledge of Office as a user and your knowledge as a programmer. The only caveat is that the generated code can be confusing because the Macro editor must make some assumptions about your intentions, and those assumptions are not necessarily accurate.
To record a macro
Open Excel to a new Workbook and choose the Developer tab in the ribbon. Choose Record Macro and accept all of the default settings in the Record Macro dialog box, including Macro1 as the name of the macro and This Workbook as the location.
Choose OK to begin recording the macro. Note how the button text changes to Stop Recording. Choose that button the instant you complete the actions that you want to record.
Choose cell B1 and type the programmer's classic first string: Hello World. Stop typing and look at the Stop Recording button; it is grayed out because Excel is waiting for you to finish typing the value in the cell.
Choose cell B2 to complete the action in cell B1, and then choose Stop Recording.
Choose Macros on the Developer tab, select Macro1 if it is not selected, and then choose Edit to view the code from Macro1 in the Visual Basic Editor.
Figure 2. Macro code in Visual Basic Editor
Looking at the code
The macro that you created should look similar to the following code.
Be aware of the similarities to the earlier code snippet that selected text in cell A1, and the differences. In this code, cell B1 is selected, and then the string "Hello World" is applied to the cell that has been made active. The quotes around the text specify a string value as opposed to a numeric value.
Remember how you chose cell B2 to display the Stop Recording button again? That action shows up as a line of code as well. The macro recorder records every keystroke.
The lines of code that start with an apostrophe and colored green by the editor are comments that explain the code or remind you and other programmers the purpose of the code. VBA ignores any line, or portion of a line, that begins with a single quote. Writing clear and appropriate comments in your code is an important topic, but that discussion is out of the scope of this article. Subsequent references to this code in the article do not include those four comment lines.
When the macro recorder generates the code, it uses a complex algorithm to determine the methods and the properties that you intended. If you do not recognize a given property, there are many resources available to help you. For example, in the macro that you recorded, the macro recorder generated code that refers to the FormulaR1C1 property. Not sure what that means?
Be aware that Application object is implied in all VBA macros. The code that you recorded works with Application. at the beginning of each line.
Using Developer Help
Select FormulaR1C1 in the recorded macro and press F1. The Help system runs a quick search, determines that the appropriate subjects are in the Excel Developer section of the Excel Help, and lists the FormulaR1C1 property. You can choose the link to read more about the property, but before you do, be aware of the Excel Object Model Reference link near the bottom of the window. Choose the link to view a long list of objects that Excel uses in its object model to describe the Worksheets and their components.
Choose any one of those to see the properties and methods that apply to that particular object, along with cross references to different related options. Many Help entries also have brief code examples that can help you. For example, you can follow the links in the Borders object to see how to set a border in VBA.
Editing the code
The Borders code looks different from the recorded macro. One thing that can be confusing with an object model is that there is more than one way to address any given object, cell A1 in this example.
Sometimes the best way to learn programming is to make minor changes to some working code and see what happens as a result. Try it now. Open Macro1 in the Visual Basic Editor and change the code to the following.
Use Copy and Paste as much as possible when working with code to avoid typing errors.
You do not need to save the code to try it out, so return to the Excel document, choose Macros on the Developer tab, choose Macro1, and then choose Run. Cell A1 now contains the text Wow! and has a double-line border around it.
Figure 3. Results of your first macro
You just combined macro recording, reading the object model documentation, and simple programming to make a VBA program that does something. Congratulations!
Did not work? Read on for debugging suggestions in VBA.
Programming tips and tricks
Start with examples
The VBA community is very large; a search on the Web can almost always yield an example of VBA code that does something similar to what you want to do. If you cannot find a good example, try to break the task down into smaller units and search on each of those, or try to think of a more common, but similar problem. Starting with an example can save you hours of time.
That does not mean that free and well-thought-out code is on the Web waiting for you to come along. In fact, some of the code that you find might have bugs or mistakes. The idea is that the examples you find online or in VBA documentation give you a head start. Remember that learning programming requires time and thought. Before you get in a big rush to use another solution to solve your problem, ask yourself whether VBA is the right choice for this problem.
Make a simpler problem
Programming can get complex quickly. It is critical, especially as a beginner, that you break the problem down to the smallest possible logical units, then write and test each piece in isolation. If you have too much code in front of you and you get confused or muddled, stop and set the problem aside. When you come back to the problem, copy out a small piece of the problem into a new module, solve that piece, get the code working, and test it to ensure that it works. Then move on to the next part.
Bugs and debugging
There are two main types of programming errors: syntax errors, which violate the grammatical rules of the programming language, and run-time errors, which look syntactically correct, but fail when VBA attempts to execute the code.
Although they can be frustrating to fix, syntax errors are easy to catch; the Visual Basic Editor beeps and flashes at you if you type a syntax error in your code.
For example, string values must be surrounded by double quotes in VBA. To find out what happens when you use single quotes instead, return to the Visual Basic Editor and replace the "Wow!" string in the code example with 'Wow!' (that is, the word Wow enclosed in single quotes). If you choose the next line, the Visual Basic Editor reacts. The error "Compile error: Expected: expression" is not that helpful, but the line that generates the error turns red to tell you that you have a syntax error in that line and as a result, this program will not run.
Choose OK and change the text back to"Wow!".
Runtime errors are harder to catch because the programming syntax looks correct, but the code fails when VBA tries to execute it.
For example, open the Visual Basic Editor and change the Value property name to ValueX in your Macro, deliberately introducing a runtime error since the Range object does not have a property called ValueX. Go back to the Excel document, open the Macros dialog box and run Macro1 again. You should see a Visual Basic message box that explains the run-time error with the text, "Object doesn't support this property of method." Although that text is clear, choose Debug to find out more.
When you return to the Visual Basic Editor, it is in a special debug mode that uses a yellow highlight to show you the line of code that failed. As expected, the line that includes the ValueX property is highlighted.
You can make changes to VBA code that is running, so change ValueX back to Value and choose the little green play button underneath the Debug menu. The program should run normally again.
It is a good idea to learn how to use the debugger more deliberately for longer, more complex programs. At a minimum, learn a how to set break-points to stop execution at a point where you want to take a look at the code, how to add watches to see the values of different variables and properties as the code runs, and how to step through the code line by line. These options are all available in the Debug menu and serious debugger users typically memorize the accompanying keyboard shortcuts.
Using reference materials well
To open the Developer Reference that is built into Office Help, open the Help reference from any Office application by choosing the question mark in the ribbon or by pressing F1. Then, to the right of the Search button, choose the dropdown arrow to filter the contents. Choose Developer Reference. If you do not see the table of contents in the left panel, choose the little book icon to open it, and then expand the Object Model Reference from there.
Figure 5. Filtering on developer Help applies to all Office applications
Time spent browsing the Object Model reference pays off. After you understand the basics of VBA syntax and the object model for the Office application that you are working with, you advance from guesswork to methodical programming.
Of course the Microsoft Office Developer Center is an excellent portal for articles, tips, and community information.
Searching forums and groups
All programmers get stuck sometimes, even after reading every reference article they can find and losing sleep at night thinking about different ways to solve a problem. Fortunately, the Internet has fostered a community of developers who help each other solve programming problems.
Any search on the Web for "office developer forum" reveals several discussion groups. You can search on "office development" or a description of your problem to discover forums, blog posts, and articles as well.
If you have done everything that you can to solve a problem, do not be afraid to post your question to a developers forum. These forums welcome posts from newer programmers and many of the experienced developers are glad to help.
The following are a few points of etiquette to follow when you post to a developer forum:
Before you post, look on the site for an FAQ or for guidelines that members want you to follow. Ensure that you post content that is consistent with those guidelines and in the correct section of the forum.
Include a clear and complete code sample, and consider editing your code to clarify it for others if it is part of a longer section of code.
Describe your problem clearly and concisely, and summarize any steps that you have taken to solve the problem. Take the time to write your post as well as you can, especially if you are flustered or in a hurry. Present the situation in a way that will make sense to readers the first time that they read the problem statement.
Be polite and express your appreciation.
Going further with programming
Although this article is short and only scratches the surface of VBA and programming, it is hopefully enough to get you started.
This section briefly discusses a few more key topics.
In the simple examples in this article you manipulated objects that the application had already created. You might want to create your own objects to store values or references to other objects for temporary use in your application. These are called variables.
To use a variable in VBA, must tell VBA which type of object the variable represents by using the Dim statement. You then set its value and use it to set other variables or properties.
Branching and looping
The simple programs in this article execute one line at a time, from the top down. The real power in programming comes from the options that you have to determine which lines of code to execute, based on one or more conditions that you specify. You can extend those capabilities even further when you can repeat an operation many times. For example, the following code extends Macro1.
Type or paste the code into the Visual Basic Editor and then run it. Follow the directions in the message box that appears and change the text in cell A1 from Wow! to Yes! and run it again to see the power of looping. This code snippet demonstrates variables, branching and looping. Read it carefully after you see it in action and try to determine what happens as each line executes.
All of my Office applications: example code
Here are a few scripts to try; each solves a real-world Office problem.
Create an email in Outlook
Be aware that there are situations in which you might want to automate email in Outlook; you can use templates as well.
Delete empty rows in an Excel worksheet
Be aware that you can select a column of cells and run this macro to delete all rows in the selected column that have a blank cell.
Delete empty text boxes in PowerPoint
Be aware that this code loops through all of the slides and deletes all text boxes that do not have any text. The count variable decrements instead of increments because each time the code deletes an object, it removes that object from the collection, which reduces the count.
Copy a contact from Outlook to Word
Be aware that this code copies the currently open contact in Outlook into the open Word document. This code only works if there is a contact currently open for inspection in Outlook.
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Visual Basic for Applications (VBA) is a form of the Visual Basic programming language integrated into all Microsoft Office products. You can create add-on components within your basic Excel 2019 spreadsheet to create additional functionality. VBA can get complicated, but knowing how to create basic code and functionality can improve your spreadsheet's usefulness and automate certain activity that would take hours of time.
Enabling the Developer Tab in Excel 2019
To use VBA, you need the "Developer" tab enabled. The "Developer" tab has several buttons and features that enhance the way you create spreadsheets. If you don't have the "Developer" tab enabled, follow these next steps to enable it.
Click the "File" ribbon tab, and then click the "Options" link that shows in the bottom-left section of the Excel window. This opens a new configuration window where you can set preference for different elements of Excel. Click the "Customize Ribbon" option in the left panel.
(Excel options and configuration window)
In the image above, notice that the developer option is checked in the far right panel. This check box enables the "Developer" tab in your Excel view. Click "OK" to enable the tab and return to your Excel 2019 interface.
(VBA button location)
You should now see an additional tab marked "Developer" in the list of Excel 2019 menu options. Click this tab, and you'll see the VBA button available on the left side.
Creating a Button on Your Spreadsheet
When you want to use VBA on your spreadsheet, buttons are one of the most common elements that you add to your document. With a button, you can trigger an event and use it to perform an action.
Components for VBA actions are found in the "Developer" tab in the "Insert" button dropdown.
(Form and ActiveX components for VBA)
When you click the "Insert" button, a dropdown displays all of the available components that you can add to your spreadsheets. The top-left control in the "Form Controls" section has the button control. You can hover your mouse over each of the components in the list to see what you can add to a spreadsheet. If you are familiar with HTML web page components, then you will recognize most of the available components in the dropdown.
Click the button control and then you can draw the button on your spreadsheet. Drawing a button lets you make it as large as small as you want. After you draw the button, a window opens where you can assign a macro.
(Assign macro window)
Click "OK" and the window closes. Now you see a button on your spreadsheet with the label "Button 1." You can change the label on the newly created button by right-clicking the button and selecting "Edit Text." This action prompts you for the new button name. Type a new name for your button. In this example, we've used the text "My Button" for the button text.
(A new button with custom text)
You can click the button if you want, and an error message with display telling you that you haven't created a macro for it yet. This is because you haven't created the code that will run when the button is clicked. The button serves no purpose, but you can create the macro that runs when it's pushed, which then removes the error when you click the button.
Right click the button and choose "Assign Macro." This action opens a Visual Basic for Applications workspace. The workspace is tied to the workbook that you have open, but you can make full applications that tie with your spreadsheet using VBA. In this workspace, you can create, test, and run any code that you assign to components in your application.
Working in the VBA Workspace
The VBA workspace looks the same whether you program macros in Word or Excel. It's a workspace where you can program the macro and view all other code that you've previously created.
The image above shows the VBA workspace. When you right click a component such as a button and choose "Edit Code," VBA opens to the location where code is triggered when you click the button. VBA gives names to these functions that help you identify what happens should you perform an activity on it. Since a button is usually triggered by a click event, the function is given the original name of the button, an underscore, and then the word "Click." For your first button created in your spreadsheet, the name for a click event is "Button1_Click()" and you add any code between the "Sub" and "End Sub" phrases.
The "Sub" keyword indicates that you are starting an event. The next part is the name of the event, and the last statement in a trigger event is the "End Sub" statement.
In the left panel of the workspace, you can see other objects in a tree view. The top object is always the workbook. If you recall, a workbook contains worksheet. Under the "Book1" main project header, you see "ThisWorkbook" which represents the workbook that you have opened, and the "Sheet1" represents the worksheet in the workbook. You can write VBA that works directly on a workbook or a worksheet activity such as when you open the workbook, a macro automatically runs.
The "Modules" section holds the files that you store containing VBA code. You can have several of these in your VBA code, or you can just have one file that contains all of the functions used to run macros.
Writing Some Simple VBA Code
With the VBA editor open, you now have a function ready to edit for your button. Anything you type in the "Sub" and "End Sub" statements will run when you click the Button1 component. When you start working with VBA, you want to create easy function statements so that you can follow what is going on as the code runs. In this example, we'll add some text to a cell within the current spreadsheet.
Within the sub start and end phrases, type the following code:
Range("A1").Value = "My Test"
The code above tells Excel 2019 that you want to change the value contained in the cell "A1" in the current sheet to "My Test." The "Range" indicates that you want to apply changes to a cell range set in the functions parameters. You can assign any value to a range, but in this example we apply text. Any formatting already set on the cell will also still apply, so if you have a cell set to bold text, then this value will have the bold format applied.
At the top of the VBA workspace, notice that there are three start, pause and stop buttons. You can use these buttons to test your new code. The "start" button will run the current function and apply changes to the spreadsheet, which in this example is changing content to "My Test."
(The start button in the VBA workspace)
Click the start button and watch the text in the A1 cell change to "My Test." Should you have a long list of statements within your function, you might want to pause the procedure. The stop button stops execution, so should you resume it then execution will start where it left off. With the pause button, execution resumes where the last statement left off.
The "MsgBox" function is extremely common in any application. The MsgBox function displays a warning or a message to the user. In any software application, you've seen pop-up windows that display a message that provides information. Even web applications display messages as pop-ups and warnings. The MsgBox function in VBA is the equivalent of all of these pop-ups that you've seen across different applications.
Suppose that you want to show a confirmation to the user that the button's function completed execution. In this example, only one statement executes, but you might have hundreds of lines of code that must execute and you want to show the user that it's completed. You might have a procedure that takes an unusual amount of time to complete, so users must wait for it to complete and then you display the message to confirm when the procedure is over.
Add the next line of code to the same VBA function Button1_Click():
Range("A1").Value = "My Test"
MsgBox "Cell value change finished"
In the code above, the cell A1 has its value changed to "My Test." After the text is changed in the A1 cell, a message box opens and displays the text "Cell value change finished." This is just a small example of how you can use the MsgBox function. After you finished changing your VBA code, click the play button again. You will see the two statements run, and the program will stop.
After you are finished writing your code, you still need to save it and test it within the spreadsheet. Your users won't open the VBA workspace, so you need to make sure that the code executes outside of the VBA workspace.
Close the VBA workspace. You now need to assign the macro to the button. Right-click the button and click "Assign Macro." Choose the Button1_Click value and click "OK." Should you ever want to go back and change the statements executed by the macro. Use this screen to click the macro name, and then click "Edit" to again open the VBA workspace with the function code shown in the workspace window.
After the window closes, click the button. Notice that the text in cell A1 changes and then a window displays with a message that the procedure has completed. You've just created your first VBA macro that runs in your spreadsheet. You can create much more complex applications with VBA that run across several spreadsheets and can affect several other workbooks that aren't even open on your desktop.
One issue to remember with VBA is that it's a powerful tool that can do harm if it's used the wrong way. Malware writers use VBA macros to download malicious software and install it on your computer. When you work with macros, your recipients of any spreadsheet must give your macros permission to run on their machines. Most users are trained not to open spreadsheets with macros, so they are mostly used within the same organization.
Microsoft Excel 2019 VBA and Macros
- Published 12/18/2018
- 1st Edition
Renowned Excel experts Bill Jelen (MrExcel) and Tracy Syrstad explain how to build more powerful, reliable, and efficient Excel spreadsheets.
Use this guide to automate virtually any routine Excel task: save yourself hours, days, maybe even weeks. Make Excel do things you thought were impossible, discover macro techniques you won’t find anywhere else, and create automated reports that are amazingly powerful. Bill Jelen and Tracy Syrstad help you instantly visualize information to make it actionable; capture data from anywhere, and use it anywhere; and automate the best new features in Excel 2019 and Excel in Office 365. You’ll find simple, step-by-step instructions, real-world case studies, and 50 workbooks packed with examples and complete, easy-to-adapt solutions.
By reading this book, you will:
- Quickly master Excel macro development
- Work more efficiently with ranges, cells, and formulas
- Generate automated reports and quickly adapt them for new requirements
- Learn to automate pivot tables to summarize, analyze, explore, and present data
- Use custom dialog boxes to collect data from others using Excel
- Improve the reliability and resiliency of your macros
- Integrate data from the internet, Access databases, and other sources
- Automatically generate charts, visualizations, sparklines, and Word documents
- Create powerful solutions with classes, collections, and custom functions
- Solve sophisticated business analysis problems more rapidly
About This Book
- For everyone who wants to get more done with Microsoft Excel in less time
- For business and financial professionals, entrepreneurs, students, and others who need to efficiently manage and analyze data
Table of Contents
- Unleash the Power of Excel with VBA
- This Sounds Like BASIC, So Why Doesn't It Look Familiar?
- Referring to Ranges
- Looping and Flow Control
- R1C1-style Formulas
- Creating and manipulating Names in VBA
- Event Programming
- Creating Classes and Collections
- Userforms: An Introduction
- Data Mining with Advanced Filter
- Using VBA to Create Pivot Tables
- Excel Power
- Sample User-Defined Functions
- Creating Charts
- Data Visualizations and Conditional Formatting
- Dashboarding with Sparklines
- Reading from and Writing to the Web
- Text File Processing
- Automating Word
- Using Access as a Back End to Enhance Multiuser Access to Data
- Advanced Userform Techniques
- Windows Application Programming Interface (API)
- Handling Errors
- Customizing the Ribbon to Run Macros
- Creating Add-Ins
- An Introduction to Creating Office Add-ins
- What's New in Excel 2019 and What's Changed
Follow the instructions to download this book's sample files.
- Click the Download button below to start the download.
- If prompted, click Save.
- Locate the .zip file on your computer. Right-click the file, click Extract All, and then follow the instructions.
Macros are indispensable when we have to do repetitive tasks. In this recipe, we are going to create a macro in Excel. Instead of manually typing several lines of VBA code to create a subroutine, or short program, we can simply record a series of actions in Excel and then store it in the same file. The macro recorder will automatically create the VBA code, as we will see in future recipes.
These recorded steps can then be replayed, in order to execute a series of steps in a fraction of a second.
Like functions, macros make use of absolute and relative referencing. In this first macro, we will use absolute referencing because we have two other sheets with exactly the same layout.
Open the file and confirm that Sheet1 is active. Click on the Developer tab. Then, in the Code group, make sure that Use Relative References is not active:
Figure 1.7 – The Relative References option
How to do it…
We will now proceed with the steps to record a macro:
- Make sure that is still open on Sheet1, and that cell A1 is selected. In the Code group of the Developer tab, click on Record Macro. The Record Macro dialog box appears.
- In the first textbox, under the Macro name heading, type . That will be the name of the macro we are going to record.
- Press the Tab key, or click in the textbox under the Shortcut key heading to the right of Ctrl+:
Figure 1.8 – The Shortcut key textbox, Ctrl+
- While holding down the Shift key, press F on the keyboard.
The shortcut key for this macro is now set to Ctrl + Shift + F.
- Under Store macro in, make sure that This Workbook is selected. Other options will be discussed in later recipes.
- Under Description, enter a short description of what the macro will do. Click on OK to start recording:
Figure 1.9 – The Record Macro dialog box with all fields completed
- Observe the Code group on the Developer ribbon. The Record Macro icon has been replaced with the Stop Recording icon. This means you are now in recording mode, and all your actions on the keyboard and with the mouse will be recorded:
Figure 1.10 – Stop Recording is displayed when in recording mode
- While in recording mode, click on the Home tab. Then, select the range C1 to F2, hold down Ctrl, and select the range A3 to B7:
Figure 1.11 – The selected ranges
Now, change the format of the selected cells to bold.
- Next, select the range C3 to F8:
Figure 1.12 – The selected range
Once done, center the cell content and change the format to currency (US$).
- To finish this recording, select cell A1, navigate to the Developer tab | the Code group, and click on Stop Recording.
You have just successfully recorded a macro.
How it works…
Now, this was simple enough, wasn't it? Let's have a look at what just happened.
We set the referencing for the macro to absolute because we want to use the same macro on Sheet2 and Sheet3, too. By starting on cell A1 on Sheet1, we can run the macro from cell A1 on Sheet2 and Sheet3 and get exactly the same results.
Macro names must start with a letter, and there should be no spaces in the name. Furthermore, VBA keywords are not allowed. , , and are three examples of keywords. Special characters are also taboo.
A keyboard shortcut makes it easy to run a macro, but that's all it is – a shortcut. In the next recipe, we will run a macro from the Macro dialog box.
Storing the macro in This Workbook means it will only work in this specific workbook. To make it available for other workbooks, it must be stored in Personal Macro Workbook. We will find out more about that in future recipes.
Many VBA users leave the Description field empty. This will have no effect on the macro, but it is good practice to explain to other users what you had in mind when saving this macro.
Once you are in recording mode, all your actions are recorded, including errors. It is, therefore, a good idea to makes notes of the steps you want to record.
When you click on Stop Recording, the macro recorder is switched off, and you can relax. Each of your actions has been recorded and converted into VBA code in the background. By opening the Microsoft Visual Basic for Applications editor, you will be able to see the recording code.
Once you understand how easy it is to record a series of actions in Excel, you will start looking for reasons to automate all your repetitive tasks.
You can, for instance, record a macro to select the entire sheet and clear it of all formatting. That is much faster than doing so manually, especially if there is more than one sheet.
2019 vba excel
Excel 2019 Power Programming with VBA
Part I: Introduction to Excel VBA 1
Chapter 1: Essentials of Spreadsheet Application Development 3
What Is a Spreadsheet Application? 3
Steps for Application Development 4
Determining User Needs 5
Planning an Application That Meets User Needs 6
Determining the Most Appropriate User Interface 7
Concerning Yourself with the End User 12
Other Development Issues 17
Chapter 2: Introducing Visual Basic for Applications 19
Getting a Head Start with the Macro Recorder 19
Working with the Visual Basic Editor 32
VBA Fundamentals 43
Deep Dive: Working with Range Objects 48
Essential Concepts to Remember 52
Don’t Panic–You Are Not Alone 54
Chapter 3: VBA Programming Fundamentals 61
VBA Language Elements: An Overview 61
Variables, Data Types, and Constants 65
Assignment Statements 76
Declaring Arrays 78
Object Variables 80
User-Defined Data Types 81
Built-in Functions 82
Manipulating Objects and Collections 85
Controlling Code Execution 88
Chapter 4: Working with VBA Sub Procedures 105
About Procedures 105
Executing Sub Procedures 108
Passing Arguments to Procedures 119
Error-Handling Techniques 123
A Realistic Example That Uses Sub Procedures 127
Utility Availability 140
Evaluating the Project 141
Chapter 5: Creating Function Procedures 143
Sub Procedures vs. Function Procedures 143
Why Create Custom Functions? 144
An Introductory Function Example 144
Function Procedures 148
Function Arguments 153
Function Examples 153
Emulating Excel’s SUM Function 167
Extended Date Functions 170
Debugging Functions 172
Dealing with the Insert Function Dialog Box 173
Using Add-Ins to Store Custom Functions 178
Using the Windows API 178
Chapter 6: Understanding Excel’s Events 183
What You Should Know About Events 183
Getting Acquainted with Workbook-Level Events 189
Examining Worksheet Events 197
Monitoring with Application Events 206
Chapter 7: VBA Programming Examples and Techniques 217
Learning by Example 217
Working with Ranges 218
Working with Workbooks and Sheets 246
VBA Techniques 251
Some Useful Functions for Use in Your Code 258
Some Useful Worksheet Functions 263
Windows API Calls 278
Part II: Advanced VBA Techniques 287
Chapter 8: Working with Pivot Tables 289
An Introductory Pivot Table Example 289
Creating a More Complex Pivot Table 295
Creating Multiple Pivot Tables 299
Creating a Reverse Pivot Table 302
Chapter 9: Working with Charts 305
Getting the Inside Scoop on Charts 305
Creating an Embedded Chart 308
Creating a Chart on a Chart Sheet 309
Modifying Charts 309
Using VBA to Activate a Chart 310
Moving a Chart 311
Using VBA to Deactivate a Chart 312
Determining Whether a Chart Is Activated 313
Deleting from the ChartObjects or Charts Collection 313
Looping Through All Charts 314
Sizing and Aligning ChartObjects 317
Creating Lots of Charts 318
Exporting a Chart 321
Changing the Data Used in a Chart 322
Using VBA to Display Custom Data Labels on a Chart 328
Displaying a Chart in a UserForm 331
Understanding Chart Events 334
Discovering VBA Charting Tricks 340
Working with Sparkline Charts 347
Chapter 10: Interacting with Other Applications 351
Understanding Microsoft Office Automation 351
Automating Access from Excel 354
Automating Word from Excel 356
Automating PowerPoint from Excel 360
Automating Outlook from Excel 365
Starting Other Applications from Excel 369
Chapter 11: Working with External Data and Files 377
Working with External Data Connections 377
Power Query Basics 377
Using ADO and VBA to Pull External Data 390
Working with Text Files 397
Text File Manipulation Examples 401
Performing Common File Operations 405
Zipping and Unzipping Files 413
Part III: Working with UserForms 417
Chapter 12: Leveraging Custom Dialog Boxes 419
Alternatives to UserForms 419
Using an Input Box 419
Using the VBA MsgBox Function 426
Using the Excel GetOpenFilename Method 431
Using the Excel GetSaveAsFilename Method 434
Prompting for a Folder 435
Displaying Excel’s Built-in Dialog Boxes 435
Displaying a Data Form 438
Chapter 13: Introducing UserForms 441
How Excel Handles Custom Dialog Boxes 441
Inserting a New UserForm 442
Adding Controls to a UserForm 443
Toolbox Controls 443
Adjusting UserForm Controls 448
Adjusting a Control’s Properties 450
Displaying a UserForm 456
Closing a UserForm 458
Creating a UserForm: An Example 460
Referencing UserForm Controls 473
Customizing the Toolbox 474
Creating UserForm Templates 477
A UserForm Checklist 478
Chapter 14: Looking at UserForm Examples 479
Creating a UserForm “Menu” 479
Selecting Ranges from a UserForm 481
Creating a Splash Screen 483
Disabling a UserForm’s Close Button 486
Changing a UserForm’s Size 487
Zooming and Scrolling a Sheet from a UserForm 488
Exploring ListBox Techniques 490
Using the MultiPage Control in a UserForm 512
Using an External Control 513
Animating a Label 516
Chapter 15: Implementing Advanced UserForm Techniques 519
A Modeless Dialog Box 519
Displaying a Progress Indicator 523
Creating Wizards 534
Emulating the MsgBox Function 541
A UserForm with Movable Controls 545
A UserForm with No Title Bar 546
Simulating a Toolbar with a UserForm 548
Emulating a Task Pane with a UserForm 550
A Resizable UserForm 551
Handling Multiple UserForm Controls with One Event Handler 556
Selecting a Color in a UserForm 559
Displaying a Chart in a UserForm 561
Making a UserForm Semitransparent 562
A Puzzle on a UserForm 563
Video Poker on a UserForm 565
Part IV: Developing Excel Applications 567
Chapter 16: Creating and Using Add-Ins 569
What Is an Add-In? 569
Understanding Excel’s Add-in Manager 572
Creating an Add-In 574
An Add-In Example 575
Comparing XLAM and XLSM Files 581
Manipulating Add-Ins with VBA 587
Optimizing the Performance of Add-Ins 593
Special Problems with Add-Ins 594
Chapter 17: Working with the Ribbon 599
Ribbon Basics 599
Customizing the Ribbon 601
Creating a Custom Ribbon 606
Using VBA with the Ribbon 628
Creating an Old-Style Toolbar 632
Chapter 18: Working with Shortcut Menus 637
CommandBar Overview 637
Referring to Controls in a CommandBar 640
Properties of CommandBar Controls 641
Displaying All Shortcut Menu Items 642
Using VBA to Customize Shortcut Menus 644
Resetting a shortcut menu 646
Shortcut Menus and Events 654
Chapter 19: Providing Help for Your Applications 659
Help for Your Excel Applications 659
Help Systems That Use Excel Components 661
Displaying Help in a Web Browser 670
Using the HTML Help System 672
Chapter 20: Leveraging Class Modules 679
What Is a Class Module? 679
Creating a NumLock Class 681
Coding Properties, Methods, and Events 685
Exposing a QueryTable Event 688
Creating a Class to Hold Classes 692
Chapter 21: Understanding Compatibility Issues 699
What Is Compatibility? 699
Types of Compatibility Problems 699
Avoid Using New Features 701
But Will It Work on a Mac? 703
Dealing with 64-Bit Excel 704
Creating an International Application 705
Multilanguage Applications 707
VBA Language Considerations 708
Using Local Properties 708
Identifying System Settings 709
Date and Time Settings 711
Part V: Appendix 713
Appendix: VBA Statements and Functions Reference 715
Yes. And where did you get your money-mani. How much are you willing to pay. Tanyukha sighed again heavily. Not everything is measured by money.
You will also like:
- Silverlake wellness spa
- 1995 tacoma headlights
- Notebook reviews 2020
- Lafd 2020
- Landed jobs app
- Show production salary
- Custom dragon ball
- Simple mandala painting
- Download scanner driver
- Ppta plasma
- Twilio video quickstart
I wiped her grease off my lips and we started kissing again. I was already touching her unceremoniously, stroking her ass and back under the shirt. The Caucasian woman felt the zipper of my breeches, and unzipped it, dumping my sixteen-centimeter handsome.