Transcription

Excel VBAExcel VBANotes for Professionals Notes for Professionals100 pagesof professional hints and tricksGoalKicker.comFree Programming BooksDisclaimerThis is an uno cial free book created for educational purposes and isnot a liated with o cial Excel VBA group(s) or company(s).All trademarks and registered trademarks arethe property of their respective owners

ContentsAbout . 1Chapter 1: Getting started with Excel VBA . 2Section 1.1: Opening the Visual Basic Editor (VBE) . 3Section 1.2: Declaring Variables . 5Section 1.3: Adding a new Object Library Reference . 6Section 1.4: Hello World . 10Section 1.5: Getting Started with the Excel Object Model . 12Chapter 2: Arrays . 16Section 2.1: Dynamic Arrays (Array Resizing and Dynamic Handling) . 16Section 2.2: Populating arrays (adding values) . 16Section 2.3: Jagged Arrays (Arrays of Arrays) . 17Section 2.4: Check if Array is Initialized (If it contains elements or not) . 17Section 2.5: Dynamic Arrays [Array Declaration, Resizing] . 17Chapter 3: Conditional statements . 19Section 3.1: The If statement . 19Chapter 4: Ranges and Cells . 21Section 4.1: Ways to refer to a single cell . 21Section 4.2: Creating a Range . 21Section 4.3: O set Property . 23Section 4.4: Saving a reference to a cell in a variable . 23Section 4.5: How to Transpose Ranges (Horizontal to Vertical & vice versa) . 23Chapter 5: Named Ranges . 25Section 5.1: Define A Named Range . 25Section 5.2: Using Named Ranges in VBA . 25Section 5.3: Manage Named Range(s) using Name Manager . 26Section 5.4: Named Range Arrays . 28Chapter 6: Merged Cells / Ranges . 29Section 6.1: Think twice before using Merged Cells/Ranges . 29Chapter 7: Locating duplicate values in a range . 30Section 7.1: Find duplicates in a range . 30Chapter 8: User Defined Functions (UDFs) . 32Section 8.1: Allow full column references without penalty . 32Section 8.2: Count Unique values in Range . 33Section 8.3: UDF - Hello World . 33Chapter 9: Conditional formatting using VBA . 36Section 9.1: FormatConditions.Add . 36Section 9.2: Remove conditional format . 37Section 9.3: FormatConditions.AddUniqueValues . 37Section 9.4: FormatConditions.AddTop10 . 38Section 9.5: FormatConditions.AddAboveAverage . 38Section 9.6: FormatConditions.AddIconSetCondition . 38Chapter 10: Workbooks . 41Section 10.1: When To Use ActiveWorkbook and ThisWorkbook . 41Section 10.2: Changing The Default Number of Worksheets In A New Workbook . 41Section 10.3: Application Workbooks . 41Section 10.4: Opening A (New) Workbook, Even If It's Already Open . 42

Section 10.5: Saving A Workbook Without Asking The User . 43Chapter 11: Working with Excel Tables in VBA . 44Section 11.1: Instantiating a ListObject . 44Section 11.2: Working with ListRows / ListColumns . 44Section 11.3: Converting an Excel Table to a normal range . 44Chapter 12: Loop through all Sheets in Active Workbook . 45Section 12.1: Retrieve all Worksheets Names in Active Workbook . 45Section 12.2: Loop Through all Sheets in all Files in a Folder . 45Chapter 13: Use Worksheet object and not Sheet object . 47Section 13.1: Print the name of the first object . 47Chapter 14: Methods for Finding the Last Used Row or Column in a Worksheet . 48Section 14.1: Find the Last Non-Empty Cell in a Column . 48Section 14.2: Find the Last Non-Empty Row in Worksheet . 48Section 14.3: Find the Last Non-Empty Column in Worksheet . 49Section 14.4: Find the Last Non-Empty Cell in a Row . 50Section 14.5: Get the row of the last cell in a range . 50Section 14.6: Find Last Row Using Named Range . 50Section 14.7: Last cell in Range.CurrentRegion . 51Section 14.8: Find the Last Non-Empty Cell in Worksheet - Performance (Array) . 51Chapter 15: Creating a drop-down menu in the Active Worksheet with a Combo Box . 54Section 15.1: Example 2: Options Not Included . 54Section 15.2: Jimi Hendrix Menu . 55Chapter 16: File System Object . 57Section 16.1: File, folder, drive exists . 57Section 16.2: Basic file operations . 57Section 16.3: Basic folder operations . 58Section 16.4: Other operations . 58Chapter 17: Pivot Tables . 60Section 17.1: Adding Fields to a Pivot Table . 60Section 17.2: Creating a Pivot Table . 60Section 17.3: Pivot Table Ranges . 63Section 17.4: Formatting the Pivot Table Data . 63Chapter 18: Binding . 64Section 18.1: Early Binding vs Late Binding . 64Chapter 19: autofilter ; Uses and best practices . 66Section 19.1: Smartfilter! . 66Chapter 20: Application object . 70Section 20.1: Simple Application Object example: Display Excel and VBE Version . 70Section 20.2: Simple Application Object example: Minimize the Excel window . 70Chapter 21: Charts and Charting . 71Section 21.1: Creating a Chart with Ranges and a Fixed Name . 71Section 21.2: Creating an empty Chart . 72Section 21.3: Create a Chart by Modifying the SERIES formula . 73Section 21.4: Arranging Charts into a Grid . 75Chapter 22: CustomDocumentProperties in practice . 79Section 22.1: Organizing new invoice numbers . 79Chapter 23: PowerPoint Integration Through VBA . 82Section 23.1: The Basics: Launching PowerPoint from VBA . 82

Chapter 24: How to record a Macro . 83Section 24.1: How to record a Macro . 83Chapter 25: SQL in Excel VBA - Best Practices . 85Section 25.1: How to use ADODB.Connection in VBA? . 85Chapter 26: Excel-VBA Optimization . 87Section 26.1: Optimizing Error Search by Extended Debugging . 87Section 26.2: Disabling Worksheet Updating . 88Section 26.3: Row Deletion - Performance . 88Section 26.4: Disabling All Excel Functionality Before executing large macros . 89Section 26.5: Checking time of execution . 90Section 26.6: Using With blocks . 91Chapter 27: VBA Security . 93Section 27.1: Password Protect your VBA . 93Chapter 28: Debugging and Troubleshooting . 94Section 28.1: Immediate Window . 94Section 28.2: Use Timer to Find Bottlenecks in Performance . 95Section 28.3: Debugger Locals Window . 95Section 28.4: Debug.Print . 96Section 28.5: Stop . 97Section 28.6: Adding a Breakpoint to your code . 97Chapter 29: VBA Best Practices . 98Section 29.1: ALWAYS Use "Option Explicit" . 98Section 29.2: Work with Arrays, Not With Ranges . 100Section 29.3: Switch o properties during macro execution . 101Section 29.4: Use VB constants when available . 102Section 29.5: Avoid using SELECT or ACTIVATE . 103Section 29.6: Always define and set references to all Workbooks and Sheets . 105Section 29.7: Use descriptive variable naming . 105Section 29.8: Document Your Work . 106Section 29.9: Error Handling . 107Section 29.10: Never Assume The Worksheet . 109Section 29.11: Avoid re-purposing the names of Properties or Methods as your variables . 109Section 29.12: Avoid using ActiveCell or ActiveSheet in Excel . 110Section 29.13: WorksheetFunction object executes faster than a UDF equivalent . 111Chapter 30: Excel VBA Tips and Tricks . 113Section 30.1: Using xlVeryHidden Sheets . 113Section 30.2: Using Strings with Delimiters in Place of Dynamic Arrays . 114Section 30.3: Worksheet .Name, .Index or .CodeName . 114Section 30.4: Double Click Event for Excel Shapes . 116Section 30.5: Open File Dialog - Multiple Files . 117Chapter 31: Common Mistakes . 118Section 31.1: Qualifying References . 118Section 31.2: Deleting rows or columns in a loop . 119Section 31.3: ActiveWorkbook vs. ThisWorkbook . 119Section 31.4: Single Document Interface Versus Multiple Document Interfaces . 120Credits . 122You may also like . 124

AboutPlease feel free to share this PDF with anyone for free,latest version of this book can be downloaded from:https://goalkicker.com/ExcelVBABookThis Excel VBA Notes for Professionals book is compiled from Stack OverflowDocumentation, the content is written by the beautiful people at Stack Overflow.Text content is released under Creative Commons BY-SA, see credits at the endof this book whom contributed to the various chapters. Images may be copyrightof their respective owners unless otherwise specifiedThis is an unofficial free book created for educational purposes and is notaffiliated with official Excel VBA group(s) or company(s) nor Stack Overflow. Alltrademarks and registered trademarks are the property of their respectivecompany ownersThe information presented in this book is not guaranteed to be correct noraccurate, use at your own riskPlease send feedback and corrections to [email protected] – Excel VBA Notes for Professionals1

Chapter 1: Getting started with Excel VBAMicrosoft Excel includes a comprehensive macro programming language called VBA. This programming languageprovides you with at least three additional resources:1. Automatically drive Excel from code using Macros. For the most part, anything that the user can do bymanipulating Excel from the user interface can be done by writing code in Excel VBA.2. Create new, custom worksheet functions.3. Interact Excel with other applications such as Microsoft Word, PowerPoint, Internet Explorer, Notepad, etc.VBA stands for Visual Basic for Applications. It is a custom version of the venerable Visual Basic programminglanguage that has powered Microsoft Excel's macros since the mid-1990s.IMPORTANTPlease ensure any examples or topics created within the excel-vba tag are specific and relevant to the use of VBAwith Microsoft Excel. Any suggested topics or examples provided that are generic to the VBA language should bedeclined in order to prevent duplication of efforts.on-topic examples: Creating and interacting with worksheet objects The WorksheetFunction class and respective methods Using the xlDirection enumeration to navigate a rangeoff-topic examples: How to create a 'for each' loop MsgBox class and how to display a message Using WinAPI in VBAVBVersion Release DateVB6 1998-10-01VB72001-06-06WIN32 1998-10-01WIN64 2001-06-06MAC1998-10-01ExcelVersion Release m – Excel VBA Notes for Professionals2

n 1.1: Opening the Visual Basic Editor (VBE)Step 1: Open a WorkbookStep 2 Option A: Press Alt F11This is the standard shortcut to open the VBE.Step 2 Option B: Developer Tab -- View CodeFirst, the Developer Tab must be added to the ribbon. Go to File - Options - Customize Ribbon, then check thebox for developer.GoalKicker.com – Excel VBA Notes for Professionals3

Then, go to the developer tab and click "View Code" or "Visual Basic"Step 2 Option C: View tab Macros Click Edit button to open an Existing MacroAll three of these options will open the Visual Basic Editor (VBE):GoalKicker.com – Excel VBA Notes for Professionals4

Section 1.2: Declaring VariablesTo explicitly declare variables in VBA, use the Dim statement, followed by the variable name and type. If a variable isused without being declared, or if no type is specified, it will be assigned the type Variant.Use the Option Explicit statement on first line of a module to force all variables to be declared before usage (seeALWAYS Use "Option Explicit" ).Always using Option Explicit is highly recommended because it helps prevent typo/spelling errors and ensuresvariables/objects will stay their intended type.Option ExplicitSub Example()Dim a As Integera 2Debug.Print a'Outputs: 2Dim b As Longb a 2Debug.Print b'Outputs: 4Dim c As Stringc "Hello, world!"Debug.Print c'Outputs: Hello, world!End SubMultiple variables can be declared on a single line using commas as delimiters, but each type must be declaredindividually, or they will default to the Variant type.Dim Str As String, IntOne, IntTwo As Integer, Lng As LongGoalKicker.com – Excel VBA Notes for Professionals5

g)'Output:'Output:'Output:'Output:StringVariant --- !!!IntegerLongVariables can also be declared using Data Type Character suffixes ( % & ! # @), however using these areincreasingly discouraged.DimDimDimDimDimDimthis le'Double'CurrencyOther ways of declaring variables are:Static like: Static CounterVariable as IntegerWhen you use the Static statement instead of a Dim statement, the declared variable will retain its valuebetween calls.Public like: Public CounterVariable as IntegerPublic variables can be used in any procedures in the project. If a public variable is declared in a standardmodule or a class module, it can also be used in any projects that reference the project where the publicvariable is declared.Private like: Private CounterVariable as IntegerPrivate variables can be used only by procedures in the same module.Source and more info:MSDN-Declaring VariablesType Characters (Visual Basic)Section 1.3: Adding a new Object Library ReferenceThe procedure describes how to add an Object library reference, and afterwards how to declare new variables withreference to the new library class objects.The example below shows how to add the PowerPoint library to the existing VB Project. As can be seen, currentlythe PowerPoint Object library is not available.GoalKicker.com – Excel VBA Notes for Professionals6

Step 1: Select Menu Tools -- References Step 2: Select the Reference you want to add. This example we scroll down to find “Microsoft PowerPoint 14.0Object Library”, and then press “OK”.GoalKicker.com – Excel VBA Notes for Professionals7

Note: PowerPoint 14.0 means that Office 2010 version is installed on the PC.Step 3: in the VB Editor, once you press Ctrl Space together, you get the autocomplete option of PowerPoint.After selecting PowerPoint and pressing ., another menu appears with all objects options related to the PowerPointObject Library. This example shows how to select the PowerPoint's object Application.GoalKicker.com – Excel VBA Notes for Professionals8

Step 4: Now the user can declare more variables using the PowerPoint object library.Declare a variable that is referencing the Presentation object of the PowerPoint object library.Declare another variable that is referencing the Slide object of the PowerPoint object library.GoalKicker.com – Excel VBA Notes for Professionals9

Now the variables declaration section looks like in the screen-shot below, and the user can start using thesevariables in his code.Code version of this tutorial:Option ExplicitSub Export toPPT()Dim ppApp As PowerPoint.ApplicationDim ppPres As PowerPoint.PresentationDim ppSlide As PowerPoint.Slide' here write down everything you want to do with the PowerPoint Class and objectsEnd SubSection 1.4: Hello World1. Open the Visual Basic Editor ( see Opening the Visual Basic Editor )2. Click Insert -- Module to add a new Module :GoalKicker.com – Excel VBA Notes for Professionals10

3. Copy and Paste the following code in the new module :Sub hello()MsgBox "Hello World !"End SubTo obtain :4. Click on the green “play” arrow (or press F5) in the Visual Basic toolbar to run the program:5. Select the new created sub "hello" and click Run :GoalKicker.com – Excel VBA Notes for Professionals11

6. Done, your should see the following window:Section 1.5: Getting Started with the Excel Object ModelThis example intend to be a gentle introduction to the Excel Object Model for beginners.1. Open the Visual Basic Editor (VBE)2. Click View -- Immediate Window to open the Immediate Window (or ctrl G ):3. You should see the following Immediate Window at the bottom on VBE:GoalKicker.com – Excel VBA Notes for Professionals12

This window allow you to directly test some VBA code. So let's start, type in this console :?Worksheets.VBE has intellisense and then it should open a tooltip as in the following figure :Select .Count in the list or directly type .Cout to obtain :?Worksheets.Count4. Then press Enter. The expression is evaluated and it sh

Chapter 21: Charts and Charting . manipulating Excel from the user interface can be done by writing code in Excel VBA. 2. Create new, custom worksheet functions. . 14 2010-01-01 12 2007-01-01 11 2003-01-01 10 2001-01-01 9 1999-01-01. GoalKicker.com - Excel VBA Notes for Professionals 3 8 1997-01-01 7 1995-01-01