Adjusting a Control's PropertiesUsing the Properties window Common properties Accommodating keyboard users Displaying a UserForm Adjusting the display position Displaying a modeless User
Trang 2Excel® 2013 Power Programming with VBA
Table of Contents
Introduction
Topics Covered
What You Need to Know
What You Need to Have
Conventions in This Book
Excel commands
Visual Basic Editor commands
Keyboard conventions
Mouse conventions
What the Icons Mean
How This Book Is Organized
Part I: Some Essential Background
Part II: Understanding Visual Basic for Applications
Part III: Working with UserForms
Part IV: Advanced Programming Techniques
Part V: Developing Applications
Part VI: Other Topics
Part VII: Appendixes
Trang 3About This Book's Website
About the Power Utility Pak Offer
How to Use This Book
Part I: Some Essential Background
Chapter 1: Excel in a Nutshell
Excel 5 and 95 dialog sheets
Excel's User Interface
About the Ribbon
Shortcut menus and the Mini toolbar
Trang 4Protecting formulas from being overwritten
Protecting a workbook's structure
Applying password protection to a workbook
Protecting VBA code with a password
Excel's Help System
Chapter 2: Formula Tricks and Techniques
About Formulas
Calculating Formulas
Cell and Range References
Why use references that aren't relative?
About R1C1 notation
Referencing other sheets or workbooks
Using Names
Trang 5Naming cells and ranges
Applying names to existing references
Excel Auditing Tools
Identifying cells of a particular type
Viewing formulas
Tracing cell relationships
Tracing error values
Fixing circular reference errors
Using the background error-checking feature
Using Excel's Formula Evaluator
Array Formulas
An array formula example
An array formula calendar
Array formula pros and cons
Counting and Summing Techniques
Counting formula examples
Summing formula examples
Trang 6Other counting tools
Lookup Formulas
Working with Dates and Times
Entering dates and times
Using pre-1900 dates
Creating Megaformulas
Chapter 3: Understanding Excel Files
Starting Excel
File Types
Excel file formats
Text file formats
Database file formats
Other file formats
Excel File Compatibility
Protected View
Using AutoRecover
Recovering versions of the current workbook
Recovering unsaved work
Trang 7Inside an Excel File
Dissecting a file
Why is the file format important?
The OfficeUI File
The XLB File
Add-In Files
Excel Settings in the Registry
About the Registry
Excel's settings
Chapter 4: Essentials of Spreadsheet Application Development
What Is a Spreadsheet Application?
Steps for Application Development
Determining User Needs
Planning an Application That Meets User Needs
Determining the Most Appropriate User Interface
Customizing the Ribbon
Customizing shortcut menus
Creating shortcut keys
Creating custom dialog boxes
Using ActiveX controls on a worksheet
Executing the development effort
Concerning Yourself with the End User
Testing the application
Trang 8Making the application bulletproof
Making the application aesthetically appealing and intuitive
Creating a user Help system
Documenting the development effort
Distributing the application to the user
Updating the application when necessary
Other Development Issues
The user's installed version of Excel
Language issues
System speed
Video modes
Part II: Understanding Visual Basic for Applications
Chapter 5: Introducing Visual Basic for Applications
Getting Some BASIC Background
Delving into VBA
Object models
VBA versus XLM
Covering the Basics of VBA
Introducing Visual Basic Editor
Displaying Excel's Developer tab
Activating VBE
VBE windows
Working with Project Explorer
Trang 9Adding a new VBA module
Removing a VBA module
Exporting and importing objects
Working with Code Windows
Minimizing and maximizing windows
Storing VBA code
Entering VBA code
Customizing the VBE Environment
Using the Editor tab
Using the Editor Format tab
Using the General tab
Using the Docking tab
The Macro Recorder
What the macro recorder actually records
Relative or absolute recording?
Recording options
Cleaning up recorded macros
About Objects and Collections
The object hierarchy
Trang 10The Comment Object: A Case Study
Viewing Help for the Comment object
Properties of a Comment object
Methods of a Comment object
The Comments collection
About the Comment property
Objects contained in a Comment object
Determining whether a cell has a comment
Adding a new Comment object
Some Useful Application Properties
Working with Range Objects
The Range property
The Cells property
The Offset property
Things to Know about Objects
Essential concepts to remember
Learning more about objects and properties
Chapter 6: VBA Programming Fundamentals
VBA Language Elements: An Overview
Comments
Variables, Data Types, and Constants
Defining data types
Declaring variables
Trang 11Scoping variables
Working with constants
Working with strings
Working with dates
Assignment Statements
Arrays
Declaring arrays
Declaring multidimensional arrays
Declaring dynamic arrays
Object Variables
User-Defined Data Types
Built-in Functions
Manipulating Objects and Collections
With-End With constructs
For Each-Next constructs
Controlling Code Execution
GoTo statements
If-Then constructs
Select Case constructs
Looping blocks of instructions
Chapter 7: Working with VBA Sub Procedures
About Procedures
Declaring a Sub procedure
Trang 12Scoping a procedure
Executing Sub Procedures
Executing a procedure with the Run Sub/UserForm command
Executing a procedure from the Macro dialog box
Executing a procedure with a Ctrl+shortcut key combination
Executing a procedure from the Ribbon
Executing a procedure from a customized shortcut menu
Executing a procedure from another procedure
Executing a procedure by clicking an object
Executing a procedure when an event occurs
Executing a procedure from the Immediate window
Passing Arguments to Procedures
What you need to know
Some preliminary recording
Initial setup
Code writing
Trang 13Writing the Sort procedure
More testing
Fixing the problems
Utility availability
Evaluating the project
Chapter 8: Creating Function Procedures
Sub Procedures versus Function Procedures
Why Create Custom Functions?
An Introductory Function Example
Using the function in a worksheet
Using the function in a VBA procedure
Analyzing the custom function
Functions with no argument
A function with one argument
A function with two arguments
A function with an array argument
A function with optional arguments
A function that returns a VBA array
Trang 14A function that returns an error value
A function with an indefinite number of arguments
Emulating Excel's SUM function
Extended Date Functions
Debugging Functions
Dealing with the Insert Function Dialog Box
Using the MacroOptions method
Specifying a function category
Adding a function description manually
Using Add-ins to Store Custom Functions
Using the Windows API
Windows API examples
Determining the Windows directory
Detecting the Shift key
Learning more about API functions
Chapter 9: VBA Programming Examples and Techniques
Learning by Example
Working with Ranges
Copying a range
Moving a range
Copying a variably sized range
Selecting or otherwise identifying various types of ranges
Resizing a range
Trang 15Prompting for a cell value
Entering a value in the next empty cell
Pausing a macro to get a user-selected range
Counting selected cells
Determining the type of selected range
Looping through a selected range efficiently
Deleting all empty rows
Duplicating rows a variable number of times
Determining whether a range is contained in another range
Determining a cell's data type
Reading and writing ranges
A better way to write to a range
Transferring one-dimensional arrays
Transferring a range to a variant array
Selecting cells by value
Copying a noncontiguous range
Working with Workbooks and Sheets
Saving all workbooks
Saving and closing all workbooks
Hiding all but the selection
Creating a hyperlink table of contents
Synchronizing worksheets
VBA Techniques
Toggling a Boolean property
Trang 16Displaying the date and time
Displaying friendly time
Getting a list of fonts
Sorting an array
Processing a series of files
Some Useful Functions for Use in Your Code
The FileExists function
The FileNameOnly function
The PathExists function
The RangeNameExists function
The SheetExists function
The WorkbookIsOpen function
Retrieving a value from a closed workbook
Some Useful Worksheet Functions
Returning cell formatting information
A talking worksheet
Displaying the date when a file was saved or printed
Understanding object parents
Counting cells between two values
Determining the last nonempty cell in a column or row
Does a string match a pattern?
Extracting the nth element from a string
Spelling out a number
A multifunctional function
Trang 17The SHEETOFFSET function
Returning the maximum value across all worksheets
Returning an array of nonduplicated random integers
Randomizing a range
Sorting a range
Windows API Calls
Determining file associations
Determining disk drive information
Determining default printer information
Determining video display information
Reading from and writing to the Registry
Part III: Working with UserForms
Chapter 10: Custom Dialog Box Alternatives
Before You Create That UserForm
Using an Input Box
The VBA InputBox function
The Excel InputBox method
The VBA MsgBox Function
The Excel GetOpenFilename Method
The Excel GetSaveAsFilename Method
Prompting for a Directory
Displaying Excel's Built-In Dialog Boxes
Displaying a Data Form
Trang 18Making the data form accessible
Displaying a data form by using VBA
Chapter 11: Introducing UserForms
How Excel Handles Custom Dialog Boxes
Inserting a New UserForm
Adding Controls to a UserForm
Trang 19Adjusting a Control's Properties
Using the Properties window
Common properties
Accommodating keyboard users
Displaying a UserForm
Adjusting the display position
Displaying a modeless UserForm
Displaying a UserForm based on a variable
Loading a UserForm
About event-handler procedures
Closing a UserForm
Creating a UserForm: An Example
Creating the UserForm
Writing code to display the dialog box
Testing the dialog box
Adding event-handler procedures
Validating the data
The finished dialog box
Understanding UserForm Events
Learning about events
UserForm events
SpinButton events
Pairing a SpinButton with a TextBox
Referencing UserForm Controls
Trang 20Customizing the Toolbox
Adding new pages to the Toolbox
Customizing or combining controls
Adding new ActiveX controls
Creating UserForm Templates
A UserForm Checklist
Chapter 12: UserForm Examples
Creating a UserForm “Menu”
Using CommandButtons in a UserForm
Using a ListBox in a UserForm
Selecting Ranges from a UserForm
Creating a Splash Screen
Disabling a UserForm's Close Button
Changing a UserForm's Size
Zooming and Scrolling a Sheet from a UserForm
ListBox Techniques
Adding items to a ListBox control
Determining the selected item in a ListBox
Determining multiple selections in a ListBox
Multiple lists in a single ListBox
ListBox item transfer
Moving items in a ListBox
Working with multicolumn ListBox controls
Trang 21Using a ListBox to select worksheet rows
Using a ListBox to activate a sheet
Using the MultiPage Control in a UserForm
Using an External Control
Animating a Label
Chapter 13: Advanced UserForm Techniques
A Modeless Dialog Box
Displaying a Progress Indicator
Creating a stand-alone progress indicator
Showing a progress indicator by using a MultiPage control
Showing a progress indicator without using a MultiPage control
Creating Wizards
Setting up the MultiPage control for the wizard
Adding the buttons to the wizard's UserForm
Programming the wizard's buttons
Programming dependencies in a wizard
Performing the task with the wizard
Emulating the MsgBox Function
MsgBox emulation: MyMsgBox code
How the MyMsgBox function works
Using the MyMsgBox function
A UserForm with Movable Controls
A UserForm with No Title Bar
Trang 22Simulating a Toolbar with a UserForm
Emulating a Task Pane with a UserForm
A Resizable UserForm
Handling Multiple UserForm Controls with One Event Handler
Selecting a Color in a UserForm
Displaying a Chart in a UserForm
Saving a chart as a GIF file
Changing the Image control's Picture property
Making a UserForm Semitransparent
An Enhanced Data Form
About the Enhanced Data Form
Installing the Enhanced Data Form add-in
A Puzzle on a UserForm
Video Poker on a UserForm
Part IV: Advanced Programming Techniques
Chapter 14: Developing Excel Utilities with VBA
About Excel Utilities
Using VBA to Develop Utilities
What Makes a Good Utility?
Text Tools: The Anatomy of a Utility
Background for Text Tools
Project goals for Text Tools
The Text Tools workbook
Trang 23How the Text Tools utility works
The UserForm for the Text Tools utility
The Module1 VBA module
The UserForm1 code module
Making the Text Tools utility efficient
Saving the Text Tools utility settings
Implementing Undo
Displaying the Help file
Adding the RibbonX code
Post-mortem of the project
Understand the Text Tools utility
More about Excel Utilities
Chapter 15: Working with Pivot Tables
An Introductory Pivot Table Example
Creating a pivot table
Examining the recorded code for the pivot table
Cleaning up the recorded pivot table code
Creating a More Complex Pivot Table
The code that created the pivot table
How the more complex pivot table works
Creating Multiple Pivot Tables
Creating a Reverse Pivot Table
Chapter 16: Working with Charts
Trang 24Getting the Inside Scoop on Charts
Chart locations
The macro recorder and charts
The Chart object model
Creating an Embedded Chart
Creating a Chart on a Chart Sheet
Modifying Charts
Using VBA to Activate a Chart
Moving a Chart
Using VBA to Deactivate a Chart
Determining Whether a Chart Is Activated
Deleting from the ChartObjects or Charts Collection
Looping through All Charts
Sizing and Aligning ChartObjects
Creating Lots of Charts
Exporting a Chart
Exporting all graphics
Changing the Data Used in a Chart
Changing chart data based on the active cell
Using VBA to determine the ranges used in a chart
Using VBA to Display Arbitrary Data Labels on a Chart
Displaying a Chart in a UserForm
Understanding Chart Events
An example of using Chart events
Trang 25Enabling events for an embedded chart
Example: Using Chart events with an embedded chart
Discovering VBA Charting Tricks
Printing embedded charts on a full page
Hiding series by hiding columns
Creating unlinked charts
Displaying text with the MouseOver event
Animating Charts
Scrolling a chart
Creating a hypocycloid chart
Creating a clock chart
Creating an Interactive Chart without VBA
Getting the data to create an interactive chart
Creating the Option Button controls for an interactive chart
Creating the city lists for the interactive chart
Creating the interactive chart data range
Creating the interactive chart
Working with Sparkline Charts
Chapter 17: Understanding Excel's Events
What You Should Know about Events
Understanding event sequences
Where to put event-handler procedures
Disabling events
Trang 26Entering event-handler code
Event-handler procedures that use arguments
Getting Acquainted with Workbook-Level Events
The Open event
The Activate event
The SheetActivate event
The NewSheet event
The BeforeSave event
The Deactivate event
The BeforePrint event
The BeforeClose event
Examining Worksheet Events
The Change event
Monitoring a specific range for changes
The SelectionChange event
The BeforeDoubleClick event
The BeforeRightClick event
Checking Out Chart Events
Monitoring with Application Events
Enabling Application-level events
Determining when a workbook is opened
Monitoring Application-level events
Using UserForm Events
Accessing Events Not Associated with an Object
Trang 27The OnTime event
The OnKey event
Chapter 18: Interacting with Other Applications
Starting an Application from Excel
Using the VBA Shell function
Displaying a folder window
Using the Windows ShellExecute API function
Activating an Application with Excel
Using AppActivate
Activating a Microsoft Office application
Running Control Panel Dialog Boxes
Using Automation in Excel
Working with foreign objects using automation
Early versus late binding
A simple example of late binding
Controlling Word from Excel
Controlling Excel from another application
Sending Personalized E-Mail via Outlook
Sending E-Mail Attachments from Excel
Chapter 19: Creating and Using Add-Ins
What Is an Add-In?
Comparing an add-in with a standard workbook
Why create add-ins?
Trang 28Understanding Excel's Add-In Manager
Comparing XLAM and XLSM Files
XLAM file VBA collection membership
Visibility of XLSM and XLAM files
Worksheets and chart sheets in XLSM and XLAM files
Accessing VBA procedures in an add-in
Manipulating Add-Ins with VBA
AddIn object properties
Accessing an add-in as a workbook
AddIn object events
Optimizing the Performance of Add-ins
Special Problems with Add-Ins
Ensuring that an add-in is installed
Referencing other files from an add-in
Detecting the proper Excel version for your add-in
Trang 29Part V: Developing Applications
Chapter 20: Working with the Ribbon
Ribbon Basics
Using VBA with the Ribbon
Accessing a Ribbon control
Working with the Ribbon
Activating a tab
Customizing the Ribbon
A simple RibbonX example
A simple Ribbon example, take 2
Another RibbonX example
Ribbon controls demo
A dynamicMenu Control Example
More on Ribbon customization
Creating an Old-Style Toolbar
Limitations of old-style toolbars in Excel 2007 and later
Code to create a toolbar
Chapter 21: Working with Shortcut Menus
CommandBar Overview
CommandBar types
Listing shortcut menus
Referring to CommandBars
Trang 30Referring to controls in a CommandBar
Properties of CommandBar controls
Displaying all shortcut menu items
Using VBA to Customize Shortcut Menus
What's different in Excel 2013
Resetting a shortcut menu
Disabling a shortcut menu
Disabling shortcut menu items
Adding a new item to the Cell shortcut menu
Adding a submenu to a shortcut menu
Limiting a shortcut menu to a single workbook
Shortcut Menus and Events
Adding and deleting menus automatically
Disabling or hiding shortcut menu items
Creating a context-sensitive shortcut menu
Chapter 22: Providing Help for Your Applications
Help for Your Excel Applications
Help Systems That Use Excel Components
Using cell comments for help
Using a text box for help
Using a worksheet to display help text
Displaying help in a UserForm
Displaying Help in a Web Browser
Trang 31Using HTML files
Using an MHTML file
Using the HTML Help System
Using the Help method to display HTML Help
Associating a help file with your application
Associating a help topic with a VBA function
Chapter 23: Developing User-Oriented Applications
What Is a User-Oriented Application?
The Loan Amortization Wizard
Using the Loan Amortization Wizard
The Loan Amortization Wizard workbook structure
How the Loan Amortization Wizard works
Potential enhancements for the Loan Amortization Wizard
Application Development Concepts
Part VI: Other Topics
Chapter 24: Compatibility Issues
What Is Compatibility?
Types of Compatibility Problems
Avoid Using New Features
But Will It Work on a Mac?
Dealing with 64-bit Excel
Creating an International Application
Trang 32Multilanguage applications
VBA language considerations
Using local properties
Identifying system settings
Date and time settings
Chapter 25: Manipulating Files with VBA
Performing Common File Operations
Using VBA file-related statements
Using the FileSystemObject object
Displaying Extended File Information
Working with Text Files
Opening a text file
Reading a text file
Writing a text file
Getting a file number
Determining or setting the file position
Statements for reading and writing
Text File Manipulation Examples
Importing data in a text file
Exporting a range to a text file
Importing a text file to a range
Logging Excel usage
Filtering a text file
Trang 33Exporting a range to HTML format
Exporting a range to an XML file
Zipping and Unzipping Files
Zipping files
Unzipping a file
Working with ADO
Chapter 26: Manipulating Visual Basic Components
Introducing IDE
The IDE Object Model
The VBProjects collection
Displaying All Components in a VBA Project
Listing All VBA Procedures in a Workbook
Replacing a Module with an Updated Version
Using VBA to Write VBA Code
Adding Controls to a UserForm at Design Time
Design-time versus runtime UserForm manipulations
Adding 100 CommandButtons at design time
Creating UserForms Programmatically
A simple runtime UserForm example
A useful (but not simple) dynamic UserForm example
Chapter 27: Understanding Class Modules
What Is a Class Module?
Example: Creating a NumLock Class
Trang 34Inserting a class module
Adding VBA code to the class module
Using the NumLockClass class
More about Class Modules
Programming properties of objects
Programming methods for objects
Class module events
Example: A CSV File Class
Class module–level variables for the CSVFileClass
Property procedures for the CSVFileClass
Method procedures for the CSVFileClass
Using the CSVFileClass object
Chapter 28: Working with Colors
Specifying Colors
The RGB color system
The HSL color system
Converting colors
Understanding Grayscale
Converting colors to gray
Experimenting with Colors
Understanding Document Themes
About document themes
Understanding document theme colors
Trang 35Displaying all theme colors
Working with Shape Objects
A shape's background color
Shapes and theme colors
Modifying Chart Colors
Chapter 29: Frequently Asked Questions about Excel Programming
Getting the Scoop on FAQs
General Excel Questions
Visual Basic Editor
Part VII: Appendixes
Appendix A: VBA Statements and Functions Reference
Appendix B: VBA Error Codes
Appendix C: This Book's Website
Trang 36Excel® 2013 Power Programming with VBA
Trang 37Published simultaneously in Canada
No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act, without either the
prior written permission of the Publisher, or authorization
through payment of the appropriate per-copy fee to the
Copyright Clearance Center, 222 Rosewood Drive, Danvers,
MA 01923, (978) 750-8400, fax (978) 646-8600 Requests
to the Publisher for permission should be addressed to the Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011, fax (201) 748-
6008, or online at
http://www.wiley.com/go/permissions
Trang 38Trademarks: Wiley and the Wiley logo are trademarks or
registered trademarks of John Wiley & Sons, Inc and/or its affiliates in the United States and other countries, and may not be used without written permission Excel is a registered trademark of Microsoft Corporation in the United States
and/or other countries All other trademarks are the property
of their respective owners John Wiley & Sons, Inc., is not associated with any product or vendor mentioned in this
purpose No warranty may be created or extended by sales
or promotional materials The advice and strategies
contained herein may not be suitable for every situation.
This work is sold with the understanding that the publisher
is not engaged in rendering legal, accounting, or other
professional services If professional assistance is required, the services of a competent professional person should be sought Neither the publisher nor the author shall be liable for damages arising herefrom The fact that an organization
or Website is referred to in this work as a citation and/or a potential source of further information does not mean that the author or the publisher endorses the information the
organization or Website may provide or recommendations it may make Further, readers should be aware that Internet
Trang 39Websites listed in this work may have changed or
disappeared between when this work was written and when
it is read FULFILLMENT OF EACH COUPON OFFER IS THE SOLE RESPONSIBILITY OF THE OFFEROR.
For general information on our other products and services, please contact our Customer Care Department within the U.S.
at 877-762-2974, outside the U.S at 317-572-3993, or fax 317-572-4002.
For technical support, please visit
www.wiley.com/techsupport
Wiley also publishes its books in a variety of electronic
formats Some content that appears in print may not be
available in electronic books.
Library of Congress Control Number: 2013932111
ISBN 978-1-118-49039-6 (pbk); ISBN 978-1-118-49040-2 (ebk); ISBN 978-1-118-49180-5 (ebk); ISBN 978-1-118- 49182-9 (ebk)
Manufactured in the United States of America
10 9 8 7 6 5 4 3 2 1
About the Author
John Walkenbach is the author of more than 50 spreadsheet books
Trang 40and lives in southern Arizona Visit his website:
http://spreadsheetpage.com
Publisher's Acknowledgments
We're proud of this book; please send us your comments at
http://dummies.custhelp.com For other comments, please contact ourCustomer Care Department within the U.S at 877-762-2974, outsidethe U.S at 317-572-3993, or fax 317-572-4002
Some of the people who helped bring this book to market include thefollowing:
Acquisitions and Editorial
Project Editor: Susan Pink
Acquisitions Editor: Katie Mohr
Technical Editor: Niek Otten
Editorial Manager: Jodi Jensen
Editorial Assistant: Annie Sullivan
Sr Editorial Assistant: Cherie Case
Composition Services
Project Coordinator: Kristie Rees
Layout and Graphics: Jennifer Henry, Andrea Hornberger,