Microsoft ® Excel VBA Programming for the Absolute Beginner Second Edition DUANE BIRNBAUM © 2005 by Thomson Course Technology PTR. All rights reserved. No Publisher and General Manager part of this book may be reproduced or transmitted in any form or by of Course Technology PTR: any means, electronic or mechanical, including photocopying, record- Stacy L. Hiquet ing, or by any information storage or retrieval system without written Associate Director of Marketing: permission from Thomson Course Technology PTR, except for the Sarah O’Donnell inclusion of brief quotations in a review. Marketing Manager: The Premier Press and Thomson Course Technology PTR logo and Heather Hurley related trade dress are trademarks of Thomson Course Technology PTR and may not be used without written permission. Manager of Editorial Services: Heather Talbot Microsoft is a registered trademark of Microsoft Corporation in the United States and/or other countries. Acquisitions Editor: Mitzi Koontz All other trademarks are the property of their respective owners. Senior Editor: Important:Thomson Course Technology PTR cannot provide software Mark Garvey support. Please contact the appropriate software manufacturer’s tech- nical support line or Web site for assistance. Marketing Coordinator: Jordan Casey Thomson Course Technology PTR and the author have attempted throughout this book to distinguish proprietary trademarks from Project Editor: descriptive terms by following the capitalization style used by the Scott Harris/Argosy Publishing manufacturer. Technical Reviewer: Information contained in this book has been obtained by Thomson Arlie Hartman Course Technology PTR from sources believed to be reliable. However, because of the possibility of human or mechanical error by our sources, PTR Editorial Services Thomson Course Technology PTR, or others, the Publisher does not Coordinator: guarantee the accuracy, adequacy, or completeness of any information Elizabeth Furbish and is not responsible for any errors or omissions or the results Copy Editor: obtained from use of such information. Readers should be particularly D. A. de la Mora aware of the fact that the Internet is an ever-changing entity. Some facts may have changed since this book went to press. Interior Layout Tech: Shawn Morningstar Educational facilities, companies, and organizations interested in multiplecopies or licensing of this book should contact the publisher Cover Designer: for quantity discount information. Training manuals, CD-ROMs, and Mike Tanamachi portions of this book are also available individually or can be tailored CD-ROM Producer: for specific needs. Keith Davenport ISBN: 1-59200-729-5 Indexer: Library of Congress Catalog Card Number: 2004114911 Nancy Fulton Printed in the United States of America Proofreader: 05 06 07 08 09 BH 10 9 8 7 6 5 4 3 2 1 Jan Cocker Thomson Course Technology PTR, a division of Thomson Course Technology 25 Thomson Place Boston, MA 02210 http://www.courseptr.com Acknowledgments First, a special thank you goes out to my family: • My wife Jill, for putting up with the late nights and weekends I spent writing • My 8-year old son Aaron, who thinks it’s cool that his Dad writes such long books with so many words, but wishes it included chapters on dragons or wizards • My 5-year old son Joshua, who wished his Dad would have played more games with him instead of working on this book. Don’t worry, Josh; because of the guilt trip you sent me on, I’ll more than make it up to you. I would also like to thank Scott Harris at Argosy Publishing, Mitzi Koontz, and all of the other contributors associated with Course Technology for their invaluable help in putting this book together. About the Author D uane Birnbaumbegan programming in graduate school, where he wrote custom software for interfacing the electronic equipment required for his experiments and analyzing the data obtained from them. Since completing his Ph.D. in physical chemistry in 1991, he has worked as a post-doctoral and research scientist in academia and industry while continuing to teach on a part-time basis. He has been teaching courses in introductory programming, database design, and data analysis in the Computer Science department at Indiana University/Purdue University at Indianapolis for the past 8 years. Contents Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x Visual Basic for Applications with Excel . . . . . . . .1 Chapter 1 Project: Colorful Stats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Installing and Enabling VBA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 The VBA Integrated Development Environment (IDE). . . . . . . . . . . . . . . . . . . . . . . 5 Getting to the IDE from Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Components of the IDE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Programming Components within Excel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Macro Selection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 The Visual Basic Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Getting Help with VBA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 VBA Help. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Constructing the Colorful Stats Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Requirements of the Colorful Stats Program . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Chapter Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Beginning Programs with VBA . . . . . . . . . . . . . . . . .25 Chapter 2 Project: Biorhythms and the Time of Your Life . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Variables, Data Types, and Constants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Declaring Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Simple Input and Output with VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Collecting User Input with InputBox(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Output with MsgBox() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Manipulating Strings with VBA Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Fun with Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Constructing the Biorhythms and the Time of Your Life Program . . . . . . . . . . 47 Requirements for Biorhythms and the Time of Your Life. . . . . . . . . . . . . . . 48 Designing Biorhythms and the Time of Your Life. . . . . . . . . . . . . . . . . . . . . . 48 Coding Biorhythms and the Time of Your Life. . . . . . . . . . . . . . . . . . . . . . . . . 49 Chapter Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 vi Microsoft Excel VBA Programming for the Absolute Beginner, Second Edition Procedures and Conditions . . . . . . . . . . . . . . . . . . .55 Chapter 3 Project: Poker Dice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 VBA Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Event Procedures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Private, Public, and Procedure Scope. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Sub Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Function Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Logical Operators with VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Conditionals and Branching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Constructing the Poker Dice Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Requirements for Poker Dice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Designing Poker Dice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Coding Poker Dice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Chapter Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Loops and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99 Chapter 4 Project: Math Game. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Looping with VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Do Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 For Loops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Input Validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Validation with the InputBox() Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Validation with a Spreadsheet Cell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 One-Dimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Multi-Dimensional Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Dynamic Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Programming Formulas into Worksheet Cells. . . . . . . . . . . . . . . . . . . . . . . . . . . 120 A1 Style References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 R1C1-Style References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Constructing the Math Game. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Requirements for the Math Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Designing the Math Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Coding the Math Game Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Chapter Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Contents vii Basic Excel Objects . . . . . . . . . . . . . . . . . . . . . . . . . .149 Chapter 5 Project: Battlecell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 VBA and Object-Oriented Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Objects Defined. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 VBA Collection Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 The Object Browser. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Top-Level Excel Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 The Application Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 The Workbook and Window Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 The Worksheet Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 The Range Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Working with Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Constructing Battlecell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Requirements for Battlecell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Designing Battlecell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Coding Battlecell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Chapter Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 VBA UserForms and Additional Controls . . . .207 Chapter 6 Project: Blackjack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Designing Forms with VBA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Adding a Form to a Project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Components of the UserForm Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Adding ActiveX Controls to a Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Showing and Hiding Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Modal Forms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Designing Custom Dialog Boxes Using Forms . . . . . . . . . . . . . . . . . . . . . . . . 215 Derived Data Types in VBA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Defining Custom Data Types in VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Defining Enumerated Types in VBA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Chapter Project: Blackjack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Requirements for Blackjack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Designing Blackjack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Writing the Code for Blackjack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Chapter Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 viii Microsoft Excel VBA Programming for the Absolute Beginner, Second Edition Error Handling, Debugging, Chapter 7 and Basic File I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . .269 Project: Word Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Error Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Using the On Error Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Debugging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Break Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 The Immediate Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 The Watch Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 The Locals Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 File Input and Output (I/O). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 File I/O Using Workbook and Worksheet Objects . . . . . . . . . . . . . . . . . . . . . 281 Using VBA File I/O Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 Chapter Project: Word Find. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 Requirements for Word Find. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 Designing Word Find. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Writing the Code for Word Find. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Chapter Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 Using XML with Excel-VBA Projects . . . . . . . . . .329 Chapter 8 Project: Revisiting the Math Game. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Introduction to XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 What Is XML?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 XML Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 XML Schemas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 XML Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 XML and Excel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 XML and VBA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 The XmlMap Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Chapter Project: The Math Game. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Requirements for the Math Game Program. . . . . . . . . . . . . . . . . . . . . . . . . . 350 Designing the Math Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 Coding the Math Game Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 Chapter Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 Contents ix Excel Charts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .377 Chapter 9 Project: The Alienated Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 The Chart Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 Accessing Existing Charts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 Manipulating Charts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 Creating Charts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 Chart Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Chapter Project: The Alienated Game. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 Requirements for the Alienated Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 Designing the Alienated Game. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 Coding the Alienated Game. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 VBA Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .427 Chapter 10 Project: Excetris. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 The Shapes Collection and Shape Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 Manipulating a Shape Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 The ShapeRange Collection Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 Activating Shape Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 The OLEObjects Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 Chapter Project: Excetris. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 Requirements for Excetris. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 Designing Excetris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 Coding Excetris. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 Chapter Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 A Final Word. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .473