Что такое vba excel 2003

totn Excel 2003 VBA Environment


This Excel tutorial explains the VBA environment in Excel 2003 (with screenshots and step-by-step instructions).

What is VBA?

The Microsoft Visual Basic window displays your VBA environment in Excel 2003:

Microsoft Excel

VBA standards for Visual Basic for Applications and is the language embedded within your spreadsheet in Excel 2003.

You use VBA in Excel whenever you do one of the following:

  1. Record a macro.
  2. Run a macro.
  3. Create a new function.
  4. Create a new subroutine.
  5. Define a variable.
  6. Place code on the click of a button.

These are just some of the examples of when you might be running VBA code in Excel 2003.

Excel VBA Online Tutorial — learn VBA Programming, enhance your Excel skills!

Learn Excel VBA programming with our easy to understand Excel VBA Online Tutorial — access examples & illustrations, live codes and downloadable files which will make learning VBA simple and quick for you. The VBA course starts with Excel VBA Basics, teaches how to create your own VBA Procedures & Macros, explains how to use Automation with VBA (Send Email from Excel, Automate PowerPoint, …) and then illustrates how to Connect with Databases (Access).

VBA for Excel

VBA is a programming language used to work with Microsoft Excel, and also with other Microsoft Office applications like Microsoft Word, Microsoft Access, PowerPoint, … and with many third-party applications. VBA stands for Visual Basic for Applications and reference to Excel VBA indicates that the Application is Excel. It is a language which Excel understands and is used to give instructions to Excel to program and automate tasks.

Benefits of VBA

VBA programming is used to get enhanced functionality which might be beyond an Excel spreadsheet;

VBA is used to automate repetitive tasks in Excel;

VBA is used to integrate Excel with other Office applications such as Microsoft Access.

Our Excel VBA Online Tutorial

Learn Excel VBA programming with our easy to understand Excel VBA Online Tutorial — access examples & illustrations, live codes and downloadable files which will make learning VBA simple and quick for you. If you are finding VBA difficult to learn, or if you find it too complicated, or if you feel it is beyond your capacity, then you have come to the RIGHT place. We keep it easy! Our tutorial is in plain language, in English, and will enable you to master Excel VBA effortlessly.

Brief Contents: Excel VBA Basics; VBA Objects; Working with Variables; Conditional Statements; VBA Loops; Application Object; Workbooks & Worksheets; Cells & Ranges in VBA; String & Date Functions; VBA Procedures & Functions; VBA Arrays; Error Handling; Events; Custom Classes & Objects; UserForms; Charts, Shapes, ActiveX & Form Controls; PivotTables with VBA; Automation with VBA (Send Email from Excel, Automate PowerPoint, …); Connect with Databases — ADO, ADOX &  DAO;

Methodology: You will create a Free Login Account on our site (‘VBA Tutorial Login’ on the Left Panel), and then Login with your username and password to access our Online Tutorial. You will get complete access to the Excel VBA course, structured in appropriate Sections & Chapters, with Live Codes & Downloadable Excel Files. You can learn VBA from the comfort of your house or office, 24 x 7, without any time limits, explained in a simple and easy manner.

The tutorials are based primarily on Microsoft Excel 2007.

Is the VBA Tutorial for YOU?

The tutorial presumes a basic knowledge of Microsoft Excel for the user, and familiarity with basic Excel concepts and using a Spreadsheet.

We expect the VBA Tutorial to be useful for users who are either beginners in VBA, as well as those already having a reasonable working knowledge of VBA.

Why Us?

Check out what some existing users have to say about our Excel VBA Tutorial (click for all Testimonials):

«Thanks very much. Excellent tutorial … Looked like a nightmare on other sites. This one broke it down and showed it best. Cheers!

«I find your site very informative and written in understandable language.»

«Thank you for sharing your excellent, clear VBA explanations. It saves my time.»

«I have been teaching myself VBA over the past 5 months by incorporating it into many useful projects. I have purchased several well-known books and searched the internet extensively as I’ve encountered problems. I don’t know what took me so long to come across your site, but it is without a doubt, the best site on the web for getting a good handle on VBA. The clear examples and descriptive notes are very informative. You provide much depth while keeping it simple.»

«Good Work! One of the best sites i have come across.!! I was stuck up in a problem fr 3 days….n i got it solved here..!! Many Many thanks :)»

«I was completely taken back by the amount of information and examples that were offered. I stopped writing my code, and I spent over two hours exploring the MANY facets of this site. The whole time, I was saying, » Wow!…. Wow!… Wow!» . Your explanations and examples have helped me a great deal! «

«I’ve been to all kinds of excel schools, addin, books, excel program like … Finding ways to make me understanding excel in shortcut mode. Wanted to know the code and just copy with simple reason about the code. Done. period. I’m thankful for your work … and give me more information if there’s more.»

Get the VBA Advantage Today — learn Excel VBA & Macros, take your Excel skills to the next level!

We want you to come join us, in the marvelous world of vba programming, to discover the magic of vba!

Detailed Contents of Excel VBA Online Tutorial

Sections           
Chapters Topics
     

Excel VBA Basics

Excel VBA — Introduction

Programming Languages & Visual Basic;

Visual Basic for Applications (VBA), VBA is GUI-based; Visual Basic is not truly an Object-Orientated Programming (OOP) Language;

VBA is an Event-driven programming language; Enable VBA / Macros in Excel 2007 & 2003;

VBE — the VBA Code Editor

Launch the Visual Basic Editor;

Visual Basic Editor components — Code Window, Project Explorer, Properties Window, The Programming Workspace;

Record & Run Macros

Record and Run Macros using the Excel Macro Recorder — the Record Macro dialog box, Naming a Macro, Assign a Keyboard Shortcut, Store a Macro, Add a Description, Recording a Macro, View, Edit & Run a Recorded Macro, Use Relative References, Limitations of Recording a Macro, Storing a  Macro in Personal Macro Workbook;

Starting with VBA, Writing Code

Basic concepts in brief:

Excel VBA Objects, Properties & Methods;

Event Procedures in VBA;

Visual Basic Editor (VBE);

Modules in Excel VBE;

VBA Procedures;

Creating a sub-procedure;

Run or Execute a Procedure;

Line Continuation within VBA code;

Auto Syntax Check;Comment Text within VBA code;

Indenting your VBA code;

Using Variables in VBA;

Keywords in VBA;

Arithmetic Operators;

String Operators;

Using Message Box in your code;

Examples of writing vba code;

Message Box & Input Box

Using Message Box in vba code — MsgBox Function;

Using Input Box in vba code — InputBox Function, Application.InputBox Method, Accepting formulas in InputBox, Accepting a cell reference as a Range object in InputBox;

Excel VBA Objects

Working with Objects

VBA Objects;

The Excel Object Model;

Access an Object / Access a Single Object from its Collection; Properties and Methods of Objects;

Working with Objects in Excel VBA — Excel VBA IntelliSense, Using With…End With Statement to refer to Objects, Using Variables in VBA, Keywords in VBA, Assign an Object to a Variable, using the Set Keyword;

Working with Variables

Declare Variables in VBA

Declaring Variables — variables are initialized to a default value, assign a value to a variable, assign an object reference, using Option Explicit;

Valid and Invalid Declaration of Variables; Dim statements declared at 3 basic levels — Procedure Level, Module Level, Project Level;

Initialize variables;

Static Statement;

ReDim Statement to Resize Dynamic Array;

Variable Names — Naming Conventions for Variables; Variable Data Types;

Conditional Statements

If…Then…Else Statements

If…Then…Else Statements — Multiple line statements, Nesting, using NOT Operator with IF statement, Single line If…Then…Else Statements, Select…Case, compared to If…Then…Else Statements;

Select…Case Statement

Select…Case Statement (VBA) — using the To keyword to specify the upper and lower range of values, using the Is keyword (with a comparison operator) to compare values, using a comma to separate multiple expressions or ranges in each Case clause, Option Compare Setting, Nesting, GoTo statement, compared to If…Then…Else Statements;

Excel VBA Loops

Excel VBA For & Do Loops

The For Loop — the For … Next Statements, the For Each … Next Statements, Nesting Loops, the Exit For Statement;

The Do While Loop — the Do While … Loop Statements, the Do … Loop While Statements, the Exit Do Statement;

The Do Until Loop — the Do Until … Loop Statements, the Do … Loop Until Statements, the Exit Do Statement;

Excel Application Object

Application Object, Properties & Methods

Excel VBA Application Object;

Instances where using the Application qualifier is required — Height, Width and WindowState Properties, DisplayFullScreen Property, DisplayFormulaBar Property, Calculation Property, EditDirectlyInCell Property, ScreenUpdating Property, DisplayAlerts Property, DefaultFilePath Property, Quit Method, Application.OnTime Method, ActivateMicrosoftApp Method, Application.GetOpenFilename Method;

When it is not required to specify the Application qualifier — ActiveCell Property, ActiveWindow Property, ActiveWorkbook Property, ThisWorkbook Property, ActiveSheet Property, ActiveChart Property, ActivePrinter Property, Selection Property, Sheets Property, Range Property, Calculate Method;

Application.OnTime VBA, Schedule Macros

Excel Application.OnTime Method — Scheduling OnTime Events;

Stop or Cancel a Running Procedure (using the OnTime method);

Excel VBA Workbooks

Workbook Object, Properties & Methods 

Reference a Workbook object — Workbooks.Item Property, ActiveWorkbook Property, ThisWorkbook Property;

Open, Add, Copy & Close Workbooks — Workbooks.Open Method, Workbooks.Add Method, Close Method, OpenDatabase Method, SaveCopyAs Method;

Saving Workbooks — Workbook.Save Method, Workbook.Saved Property;

Often used Methods & Properties of the Workbook Object — Workbook.Activate Method, PrintPreview Method, Workbook.SendMail Method, Workbook.ActiveSheet Property, ActiveChart Property, FileFormat Property, Name Property, Password Property, Path Property; 

Excel VBA Worksheets

Worksheet object, Properties & Methods 

The Worksheet Object, Sheets Object, Chart Object, 4 types of sheets — worksheet, chart sheet, macro sheet,dialog sheet;

Reference a Worksheet object — Item Property, The Active Object, Code Name and Sheet Name;

Activate or Select a Worksheet — ActiveSheet Property, Activate Method, Select Method;

Adding & Naming Worksheets — Add Method, Default worksheet names on creating a new workbook, Name property;

Copy a Worksheet, Move or Change Worksheet Sequence, Hide or Display Worksheets, Remove or Delete a Worksheet — Copy Method, Move Method, Visible Property, Delete Method; Worksheet Page Layout & Views — PageSetup Property, PrintPreview Method, DisplayPageBreaks Property, View Property;

Calculating Worksheets — Calculation Property, Calculate Method; Speed up your VBA Code by Turning off Screen Updates and Automatic

Calculations — Screen Updates and Automatic Calculations, CalculateBeforeSave Property, EnableCalculation Property

Run Macros on Protected Worksheet 

Run VBA Macros on Protected Worksheet;

Unprotect & Protect;

Error Handler;

UserInterfaceOnly argument in the Protect method;

Run macro on protected worksheet, code remaining visible & editable, but protection password hidden;

Using the UserInterfaceOnly argument to Enable Auto Filter;

Using UserInterfaceOnly argument to Allow Grouping; Worksheet.Protect Method; 

Excel VBA Cells & Ranges 

Referencing Cells & Ranges — 1 

Range Property, Cells / Item / Rows / Columns Properties, Offset & Relative Referencing, Cell Address — Range Object, Range property, Shortcut Range Reference, Cells Property, Item property, Columns Property, Rows Property, Accessing a worksheet range with vba code (Referencing a single cell, Referencing a range of cells, Referencing Rows or Columns, Relative Referencing), Range.Row Property, Range.Column Property, Range.Address Property;

Activate & Select Cells;

The ActiveCell & Selection — Select method, ActiveCell Property, Selection property, Activate Method;

Entire Row & Entire Column Properties, Inserting Cells/Rows/Columns using the Insert Method — EntireRow Property, EntireColumn Property, Insert Method

Referencing Cells & Ranges — 2 

Ranges, Union & Intersect — Union Method, Intersect Method, using Intersect method with worksheet change or selection change events;

Resize a Range — Offset & Resize properties of the Range object;

Contiguous Block of Cells, Collection of non-contiguous ranges, Cells Meeting a Specified Criteria, Used Range, Cell at the End of a Block / Region — Using the Areas Property, CurrentRegion Property, SpecialCells Method, UsedRange property, End Property, find Last Used Row in a worksheet

Find Method in Excel VBA 

Find Method in Excel VBA;

Find multiple occurrences of an item or value in a range;

Using Find Method to do VLookUp;

Using Find Method to Search for a Date;  

VBA — Last Used Row & Column 

Use End(xlUp) to determine Last Row with Data, in one column;

Use End(xlToLeft) to determine Last Column with Data, in one row;

UsedRange property to find the last used row number in a worksheet;

UsedRange property to find the last used column number in a worksheet;

UsedRange property to find number of used rows in a worksheet;

UsedRange property to find number of used columns in a worksheet;

UsedRange property to find the first used row number in a worksheet;

UsedRange property to find the first used column number in a worksheet;

Use End(xlDown) to determine Last Row with Data, at the End of a Block in a column;

Use End(xlToRight) to determine Last Column with Data, at the End of a Block in a row;

FIND method to determine Last Row with Data, in a worksheet;

FIND method to determine Last column with Data, in a worksheet;

SpecialCells method to find Last Used Row in worksheet;

SpecialCells method to find Last Used Column in worksheet; 

Text, String & Date Functions 

Excel Text & String Functions — 1 

Excel VBA String Functions for Finding and Replacing Text, with Examples: LEFT, RIGHT, MID, LEN, REPLACE;

InStr & InStrRev Functions (VBA);  

Excel Text & String Functions — 2 

Excel VBA String Functions: SPLIT, JOIN, CONCATENATE — Excel VBA Functions to Split a String into Substrings, and Join an Array of Substrings to form a String, with Examples

Functions — CODE & CHAR / Asc & Chr 

Excel Text and String Functions: Excel CODE & CHAR Functions, VBA Asc & Chr Functions, with examples — Changing case (uppercase / lowercase) of alphabets in a string, format or manipulate data with ANSI codes

ASCII & ANSI Code, Extended ASCII characters 

ASCII Code;

ASCII to Extended ASCII characters (8-bit system) and ANSI Code;

Extended ASCII characters (8-bit) and UNICODE;

The Windows SDK provides function prototypes in generic, Windows code page (ANSI) and Unicode versions;

Excel uses ANSI code system for Windows computers; ASCII Non-Printing Control Codes Chart;

ASCII Printing Characters Chart;

Extended ASCII Printing Characters Chart; 

Column No. to Letter, Column Letter to No. 

VBA Codes to Convert Excel Column Number to corresponding Column Letter;

VBA Codes to Convert Excel Column Letter to corresponding Column Number; 

VBA Convert to UpperCase / LowerCase 

Worksheet vba codes for: Convert Text and Cells with Formulas to UpperCase;

Convert Text and Cells with Formulas to UpperCase;

Convert Text and Cells with Formulas to UpperCase;

Convert Text to UpperCase; 

Excel VBA Dates & Time, Format Function 

Excel VBA Dates & Time — Excel Dates Equate to Serial Numbers, Date Data Type in VBA, System’s Locale settings vs. Code Locale, Format specified in your computer’s regional settings;

Format Function in VBA — Predefined Named Date/Time Formats, System-defined Format, Predefined Named Numeric Formats, User-Defined Number Formats, User-Defined Date & Time Formats, User-Defined String Formats, Multiple Sections for User-defined Formats

Excel VBA Date & Time Functions 

VBA DateSerial Function;

DateValue Function;

TimeSerial Function;

TimeValue Function;

IsDate Function;

CDate Function;

DateAdd Function;

DateDiff Function;

DatePart Function;

Date Function;

Now Function;

MonthName Function;

Day Function;

Month Function;

Year Function;

Hour Function;

Minute Function;

Second Function;

WeekDay Function;

WeekdayName Function;

Find Method to Search for a Date; 

Custom Number Formats, Date Formats 

Excel Home Tab, Format Cells dialog box;

VBA, NumberFormat property;

Number Codes; Specify Font Color;

Four Sections of Code;

Specify Conditions;

Custom Date & Time Formats;  

Excel VBA Procedures 

Subs & Functions, Placement in Modules 

Sub procedures (Event Procedures & User Created), Function Procedures (Built-in & User-defined) & Property Procedures;

Naming Rules & Conventions for Procedures;

VBA Procedures Scope — Public vs Private; Placement of Macros / Sub procedures in appropriate Modules — Standard Code Modules, Workbook module, Sheet Modules, UserForm Modules, Class Modules;

Calling Procedures — Calling Sub procedures in the Same Module, Calling Functions in the Same Module, Calling Procedures in Outside Modules;

Executing Procedures — Executing Function Procedures, Executing Event Procedures, Executing Sub Procedures

Pass Arguments to Procedures, ParamArray  

Argument Data Types;

Passing Arguments By Value;

Passing Arguments By Reference;

Optional Arguments;

Pass an Arbitrary or Indefinite Number of Arguments — Parameter Arrays (ParamArray);  

VBA — Empty, ZLS, Null, Nothing, Missing 

Empty, Blank, ZLS (zero-length string), Null String & vbNullString;

IsEmpty Function;

VarType Function;

Null;

IsNull Function;

Nothing;

Missing;

IsMissing function;  

Excel VBA Arrays 

Excel VBA Arrays 

VBA Arrays;

Declare Arrays, Sizing an Array, Determining the Upper and Lower Bounds;

One-Dimensional and Multi-Dimensional Arrays;

Fixed-size and Dynamic Arrays;

ReDim Statement to Resize Dynamic Array;

use the ‘Preserve’ Keyword with the ReDim statement;

Excel VBA Functions — SPLIT a String and return an Array of Substrings, JOIN an Array of Substrings to form a String;

Create a 200-Year Calendar in VBA, using Arrays with Loops;

ParamArray (Parameter Array); 

Error Handling & Debugging

Error Handling in VBA

VBA Erros & Error Handling, Error Handling Setting in VBE, Error Handler, On Error Statements, Using an Exit Statement, Error Handling in Nested Procedures & The Resume Statement, Get Information from the Error Object, Raise Method of the Err Object — Generate a Run-time error.

Debugging Tools in VBE

Debug Code by using a Message Box, Use Breakpoints to Debug Code, Using Break Mode to Debug Code, Stepping Through Code, Debugging Views — Immediate Window, Locals Window, Watch Window, Call Stack.

Excel VBA Events  

Excel VBA Built-in Events 

Excel VBA Events; Event Procedures;

Built-in Event procedures & Custom events;

Excel events broadly classified — Workbook events, Worksheet events, Chart events, UserForm events, Application events, Events not associated with objects

Worksheet Change Event 

Worksheet_Change Event;

Target parameter;

Preventing Event Loops with Application.EnableEvents = False;  

Worksheet Selection Change Event 

Worksheet_SelectionChange Event;

Preventing Event Loops with Application.EnableEvents = False; 

Custom Classes & Objects 

Custom Classes & Objects, Custom Events 

Excel VBA Custom Classes & Objects — Insert a Class Module, Name a Class Module, Instancing Property of a Class Module, Instantiate a Class Object, Create Class Properties, Using Property Procedures to Create Properties (Property Get, Property Let, Property Set);

Custom Class Events — Define a Custom Event, Raise an Event, External Code to Raise the Event, Create an Event Procedure

ActiveX & Form Controls, AutoShapes

ActiveX & Form Controls, AutoShapes

Built-in Excel Data Form;

Using ActiveX controls, Form controls & AutoShapes in Excel Worksheet;

Shape object & OLEObject object;

ActiveX Controls in VBA;

Add an ActiveX Control, a Form Control or an AutoShape, in Worksheet;

Illustrating Form Controls, ActiveX Controls & AutoShapes — Button (Form Control) & Command Button (ActiveX Control), Check Box (Form Control or ActiveX Control), List Box & Combo Box (Form Control / ActiveX Control), Option Button (Form Control or ActiveX Control), Toggle Button (ActiveX Control), ScrollBar & SpinButton Controls(Form Control or ActiveX Control), TextBox (ActiveX Control), Label (Form Control or ActiveX Control), Illustrating Auto Shapes & Add a connector;

UserForms in Excel VBA 

UserForm Basics, Add Controls 

UserForms in Excel VBA;

Create a UserForm; UserForm ToolBox Controls — A Snapshot;

UserForm Basics; Trapping UserForm Events;

Add Controls to a UserForm — using the Add Method; 

UserForm and Controls — Properties 

Design-Time, Run-time and Break-time;

Setting control properties with vba;

Basic Properties common to the UserForm and most Controls — Name Property, Caption Property, Height & Width Properties, Left & Top Properties, Value Property;

Other Properties common to the UserForm and most Controls — Accelerator Property, Alignment Property, AutoSize Property, BackColor Property, BackStyle Property, BorderColor Property, BorderStyle Property, ControlSource Property, ControlTipText Property, Enabled Property, Locked Property, Font Object, ForeColor Property, MouseIcon Property, MousePointer Property, Picture Property, PicturePosition Property, SpecialEffect Property, TabIndex Property, TabStop Property, Visible Property, WordWrap Property;

Specifying Color in Properties Window;

Applicability of Properties to UserForm and its Controls — A SnapShot; 

Label, TextBox & CommandButton 

Label Control; CommandButton — Click event;

TextBox — AutoTab Property, EnterKeyBehavior Property, MaxLength Property, MultiLine Property, PasswordChar Property, ScrollBars Property, Text Property

ComboBox & ListBox 

Difference between ListBox and ComboBox;

Key Properties of ComboBox and ListBox — AddItem Method, BoundColumn Property, Clear Method, Column Property, ColumnCount Property, ColumnHeads Property, List Property, ListCount Property, ListIndex Property, ListRows Property, MultiSelect Property, RemoveItem Method, RowSource Property, Selected Property, Style Property, TextColumn Property;

Add Items/Data to (Populate) a ListBox or ComboBox — Setting the RowSource property of a ListBox or ComboBox in a UserForm, Populate a ComboBox or ListBox from an Array, Populate a ComboBox or ListBox with AddItem method, Populate a multi-column ComboBox or ListBox using AddItem method and List & Column properties, Populate a multi-column ListBox from a worskheet range, using AddItem method and List property, Add a new item/row to the list if ComboBox is bound to data in a worksheet;

Extract ListBox & ComboBox Items, with VBA — Display selected ComboBox item in TextBox, Copy selected ComboBox item to a worksheet range, Copy ComboBox item determined by its position, to a worksheet range;

Delete ListBox rows using the RemoveItem Method; 

CheckBox, OptionButton, ToggleButton 

CheckBox — Value property, TripleState property;

OptionButton — GroupName property, using a Frame Control, Value property;

Difference between CheckBox and OptionButton;

ToggleButton;  

Frame, MultiPage & TabStrip 

Frame Control;

MultiPage Control — Dynamically Add/Remove a Page, Dynamically Access an individual Page, Create a wizard using a Single UserForm and MultiPage control;

TabStrip Control — Dynamically Add/Remove a Tab, Difference between a MultiPage control and TabStrip control, Selecting a Tab

ScrollBar & SpinButton 

ScrollBar Control — SmallChange & LargeChange Properties, Min and Max Properties, Orientation Property;

SpinButton Control — SmallChange & Min & Max & Orientation Properties, Difference between ScrollBar & SpinButton controls

Image & RefEdit 

Image Control — LoadPicture function, PictureSizeMode Property, PictureSizeMode Property, PictureAlignment Property, Use LoadPicture property with GetOpenFilename Method;

RefEdit control; 

Charts in Excel VBA

Add a Chart, Chart & ChartObject objects

Charts in Excel VBA;

Worksheet & Chart Sheet in Excel — Chart objects in VBA;

Add a Chart — Charts.Add Method, ChartObjects.Add Method;

ChartObject object — Commonly used Properties & Methods;

Chart object — Commonly used Properties & Methods;

Chart Elements: Chart Title, Chart & Plot Area, Axes

Chart Title — Commonly used Properties & Methods of the ChartTitle object, Child Objects for the ChartTitle Object;

Chart Area —  Commonly used Properties & Methods of the ChartArea object, Child Objects for the ChartArea Object;

Plot Area —  Commonly used Properties & Methods of the PlotArea object, Child Objects for the PlotArea Object, PlotArea Alignment , ChartTitle Alignment, AxisTitle Alignment, Legend Alignment;

Chart Axis — Axes object & Axis object, Tick Marks & Gridlines, Commonly used Properties & Methods of the Axis object, Properties & Methods of the AxisTitle object, Properties & Methods of the TickLabels object, Child Objects for the Axis Object;

Chart Elements: Chart Series, Data Labels, Legend

Chart Series — SeriesCollection object & Series object, Commonly used Properties & Methods of the Series object, Child Objects for the Series Object, ErrorBars & LeaderLines, Combination Chart;

DataLabels Object & DataLabel Object — Commonly used Properties & Methods of the DataLabels Object / DataLabel Object, Child Objects for DataLabels Object / DataLabel Object;

Chart Legend — LegendKey & LegendEntry, Commonly used Properties & Methods of the Legend object, Child Objects for the Legend Object.

Border / ChartFillFormat / Interior / Font Objects

Child Objects commonly used with Chart Elements — Border Object, ChartFillFormat Object, Interior Object & Font Object with Properties & Methods.

ChartFormat object, Formatting, 3D Charts

Line, fill & effect formatting for chart elements:

FillFormat object — Setting ForeColor & BackColor, Setting a Solid Fill, Setting Gradient Type, Gradient Stops, Setting Pattern, Setting Texture, Setting Picture for the Fill;

LineFormat object — Setting ForeColor & BackColor, Setting Style or Dash Style, Setting Pattern, Line Arrowheads, Transparency & Weight Properties;

ShadowFormat object;

GlowFormat object;

SoftEdgeFormat object;

ThreeDFormat object — Manipulating 3-D Charts;

Create Line, Column, Pie, Scatter, Bubble charts

Create an Embedded Chart — Line with Markers;

Creating a Clustered Stacked Column Chart;

Create a Clustered Stacked Bar Chart displaying Variance between Series;

Pie Chart;

XY Scatter Chart & Bubble Chart — Single series with X & Y values, Multiple series where all series share the same Y values with distinct X values, Manipulate both X & Y error bars;

Excel Pivot Tables with VBA 

Create Pivot Table using VBA 

Use VBA to Create and Customize PivotTable & PivotChart reports;

The PivotTableWizard method;  

Referencing Pivot Table Range 

TableRange1 Property and TableRange2 Property;

PivotField.LabelRange Property and PivotItem.

LabelRange Property;

RowRange Property and ColumnRange Property;

PivotTable.DataBodyRange Property;

DataLabelRange Property;

PageRange Property;

PivotField.DataRange Property and PivotItem.

DataRange Property;

PivotTable.PivotSelect Method;

Intersect Method;  

Reference Pivot Fields & Items 

Using the PivotTable.PivotFields Method to access a Pivot Field;

PivotTable.ColumnFields Property to access a column field;

PivotTable.RowFields Property to access a row field;

PivotTable.DataFields Property to access a data field;

PivotTable.PageFields Property to access a page field;

Reference PivotItem in a PivotField;

PivotTable.HiddenFields Property to return hidden fields;

PivotTable.PivotSelect Method to Select a part of the PivotTable;  

Pivot Table Move & Copy 

Address of Pivot Table;

Move PivotTable to a new location;

Copy a PivotTable and paste as data or values or paste as a PivotTable;  

Pivot Table Layout & Design 

Layout Forms for PivotTable report, column header and row header;

Hide or Display Subtotals;

Subtotal Location, Inserting blank lines, Show/hide GrandTotals & Grand Total Name, Set Number Format;

Pivot Table Styles — Style Gallery;

PivotTable Style Options — Row Headers, Column Headers, Banded Rows &

Banded Columns; 

Pivot Table Properties & Settings 

Get data from a PivotTable using VBA — PivotTable.GetPivotData Method;

Disable or Enable DrillDown of PivotTable Fields; Display the PivotTable FieldList;

Sort Fields in Ascending order in the PivotTable FieldList; Return the Parent object of a PivotTable object;

Allow PivotTable Update only Manually;

PivotTable.Name Property returns the name of a PivotTable object;

PivotTable Print Settings — PivotTable.PrintTitles Property, PivotTable.

RepeatItemsOnEachPrintedPage Property, Repeat specific rows at the top or columns on the left while printing a PivotTable report, PivotTable.PrintDrillIndicators Property;

Save the PivotCache data while saving the workbook;

Create a new PivotTable, each on a new worksheet, for each item of a Page field;

Return the data source of a PivotTable report;

Include hidden page field items in subtotals and totals;

Pivot Table versions & Excel version;  

Refresh Pivot Table & Cache 

PivotCache.Refresh Method to Refresh the Cache of the Pivot Table;

PivotTable.RefreshTable Method to update the PivotTable report;

Automatically refresh Pivot Tables in all worksheets on opening a workbook;

Return the Date when PivotTable was last refreshed, and Name of the user who refreshed; 

Group Items, Data & Date Values 

Group Date Values in a PivotTable report, using the Group method;

Group Date Values by Weeks;

Group Numeric Items; Group Specific Text Field Items;  

Sort Fields, Values & Dates, Custom Lists 

PivotField.AutoSort method — set sort order of a PivotTable field;

Range.Sort Method — to sort a range of values in a PivotTable report; Set the sort order manually;

Sort a PivotTable report using Custom Lists — Application.AddCustomList Method, Application.DeleteCustomList Method, Application.GetCustomListContents Method, Application.GetCustomListNum Method, SortUsingCustomLists Property;  

Filter Data, Items, Values & Dates 

PivotField.AutoShow method — to display the Top or Bottom items in a PivotTable Field;

PivotFilters.Add Method — to add new filters to a PivotTable report;

Manual Filter;

Clear Filters;

PivotTable.AllowMultipleFilters Property — apply multiple filters to a single PivotField

Summary Functions, Custom Calculations 

Pivot Table Summary Functions — xlAverage, xlCount, xlCountNums, xlMax, xlMin, xlProduct, xlStDev, xlStDevP, xlSum, xlVar and xlVarP;

Pivot Table Custom Calculations — xlNoAdditionalCalculation, xlDifferenceFrom, xlPercentOf, xlPercentDifferenceFrom, xlRunningTotal, xlPercentOfRow, xlPercentOfColumn, xlPercentOfTotal and xlIndex;  

Insert Calculated Fields, Create Formulas 

Pivot Table Calculated Fields — CalculatedFields.Add Method;

Pivot Table Calculated Items — CalculatedItems.Add Method, PivotTable.ListFormulas Method;  

Create Pivot Table Charts 

Create a PivotChart based on an existing PivotTable report;

Add embedded chart based on an Excel Database;

Create a Chart (add a new chart sheet) based on an Excel Database;

Create an embedded PivotChart based on an existing PivotTable report;  

Automation with VBA 

Automate Microsoft Word from Excel 

Automating an Office Application — Automation Process, Early Binding & Late Binding in Automation, Adding a reference to the Object Library, Built-in Constants and their Numerical Values, The Getobject function and CreateObject function;

Automating Word from Excel; 

Automate Microsoft Outlook from Excel 

Create a new instance of the Outlook application;

Using the Application.GetNamespace Method;

Reference Existing Outlook Folders and Create New Folders in Automation;

Create New Outlook Items and Reference Outlook Items;

NameSpace.GetDefaultFolder Method; Folders.Add Method;

Items.Add Method and the Application.CreateItem Method;

Using the Find and FindNext methods to search a folder;

Using the Restrict Method; 

Export contacts from Outlook to Excel 

Export contacts from Outlook to Excel — automate in vba using Early Binding and Late Binding;

Export contacts from a specific Contact Items Folder or from the default Contact Items Folder to an Excel Worksheet;  

Import Contacts from Excel to Outlook 

Import Contacts from Excel to Outlook — automate in vba using Early Binding and Late Binding;

Import data from an Excel Worksheet to the specified Contacts folder or to the default Contacts folder; 

Automate Outlook, Send Email from Excel 

Sending Email from Excel using Outlook — automate in vba using Early Binding and Late Binding;

Send text, Send contents from the host workbook’s worksheet range as Mail Body, Send an attachment with the mail;

Send multiple mails to ids sourced from the Host Workbook’s sheet;

Copy the Host Workbook or Create a New Workbook, Add a New Sheet and Copy-Paste a Range to the Workbook, then send as an attachment with

the mail;

Find a mail item in the Inbox folder meeting a specified criteria, delete or add attachment, forward it to a specific email id, and move the mail item to a newly created mail folder; 

 

Automate PowerPoint from Excel 

Automate Microsoft PowerPoint from Excel using vba & Run a Slide Show;

Create a new PowerPoint ppt of 4 sli

des with sound clips and chart, run & view the slide show, automatically close & quit the PowerPoint application;  

Connect with Databases (ADO)

Microsoft Access: ADO Library

Connect with Databases using DAO, RDO and ADO Objects;

ADO Objects & Programming model; Connecting to a Data Source (viz. Microsoft Access) using the ADO Connection Open Method;

The Connection Object; Establish Connection to a Data Source; Access records from a database table;

The ADO Recordset Open Method, to open an ADO Recordset object;

Create a new record using the Recordset Object’s AddNew method;

Update Method (ADO Recordset);

Close & Delete Methods;

Moving between Records in a Recordset;

Count the number of Records in a Recordset;

Access fields in a Recordset;

Execute SQL statements — ADO

Microsoft Access — Use ADO to Execute SQL statements to Manage your Database;

SQL Commands explained;

Using the ADO connection Execute method to execute the specified query and SQL statements;

Use the OpenSchema Method to access information about database tables and columns;

Create a database table using ADO with SQL statements;

ADO Find Method to Find or Locate a specific Record; ADO Filter Property to FilterRecords;

Import / Export Data, Access to Excel

Using ADO to Import data from an Access Database Table to an Excel worksheet (your host application);

Using ADO to Export data from Excel worksheet (your host application) to Access Database Table;

Connect to Access from Excel — ADOX

Create an Access Database using ADOX;

ADOX Table Object & Tables Collection — Properties & Methods; ADOX Column Object & Columns Collection — Properties & Methods;

Reference & Delete Database Tables and Columns and Reference & Edit Field Properties using ADOX;

Create an Index using ADOX;

Create Relationship between Tables using ADOX;

ADO Command Object, ADOX View Object, Parameter Queries, Create & Execute Stored Queries / Action Queries with ADOX;

Connect with Databases (DAO)

Connect to Access from Excel — DAO

DAO Objects & Programming model;

The DBEngine object; Workspace Object & Workspaces Collection;

DAO Databases;

Tables of a DAO Database; Fields / Columns of a Table;

Recordset & Records of a DAO Database Table;

Create Index & Relationships, Exceute Query

Create an Index using DAO;

Create Relationship between Fields of Database Tables using DAO;

Create and Exceute a Query, including Action & Parameter Query, using DAO;

Import / Export Data from Access to Excel

Import data from an Access Database Table to an Excel worksheet (your host application);

Export data from Excel worksheet (your host application) to an Access Database Table;

Microsoft Excel is a deep program rich in features and functionality. One of the most powerful features of Excel is the ability to write programs in Visual Basic for Applications that run «behind» your worksheets to turn Excel into a calculation-oriented development platform for creating special purpose spreadsheets which can function as applications in their own right.

Service Pack[edit | edit source]

A service pack (in short SP) is a collection of updates, fixes or enhancements to a software program delivered in the form of a single installable package.

A service pack can be incremental, which means it only contains the updates that were not present in the previous service packs or, it can be cumulative, which means it includes the contents of all its predecessors. In the case of Microsoft’s products, an incremental update was called a service release. For example, Office 2000 must be upgraded to service release 1 (SR-1) before one can install SP2.

Macro Security[edit | edit source]

Macro security settings are located in the Trust Center. However, if you work in an organization, your system administrator might have changed the default settings to prevent anyone from changing any settings and execute macros.

Macro Recording[edit | edit source]

A great way of learning about Excel VBA is using its macro recording function. With the function, you tell Excel to start recording, then perform various steps as if you were working without a macro recorder, and finally, tell Excel to stop recording. VBA code corresponding to what you did using Excel GUI has been recorded by Excel. While the code often cannot be meaningfully used without a modification, by starting from it and modifying it you can save a lot of time that would otherwise be spent reading the VBA documentation.

Menu paths:

  • Excel 2000, 2003: Tools > Macro > Record New Macro.
  • Excel 2007: View (tab) > Macros (group) > down-pointing triangle below Macros button > Record Macro
  • Excel 2007: Developer (tab) > Code (group) > Record Macro

Links:

  • Use Microsoft Office Excel 2007 macros to speed up work at microsoft.com
  • Create a macro (Excel 2003) at microsoft.com
  • Record and use Excel macros (Excel 2000) at microsoft.com

Enabling Developer tab[edit | edit source]

Developer tab allows you to insert various user interface controls such as buttons. In order to use it, you first have to enable it.

Menu paths to enable the tab:

  • Excel 2007: round Office button > Excel Options (button at bottom) > Popular > Show Developer tab in the Ribbon (check box)
  • Excel 2010: File (tab) > Options (button) > Customize Ribbon (button) > Developer (check box)

Links:

  • How to: Show the Developer Tab on the Ribbon for Excel 2007 at microsoft.com
  • How to: Show the Developer Tab on the Ribbon for Excel 2010 at microsoft.com

Making an XLA[edit | edit source]

  • Works on: Excel 2002 SP-2, Excel 2000 SR-1

An XLA is one way to make a VBA code-library. It’s basically just a normal spreadsheet(.xls file) but has its worksheets hidden. Here’s how to create a new one:

  • New Workbook
  • Save-As …Name it whatever
  • Hit Alt-F11
  • In the Project-tree, select VBAProject(whatever.xls)/ThisWorkbook
  • Hit F4 to get Properties View
  • Find Property IsAddin and set to True
  • Hit Save
  • Close Excel
  • Rename whatever.xls to whatever.xla

Alternatively, you can use Save As / Excel AddIn.

Accessing the Registry[edit | edit source]

  • Works on: Microsoft Excel 2002 SP-2

This recipe is for reading/writing keys local to your application—this is to provide persistent settings for your VBA app. It does not cover arbitrary access to the Registry (i.e. looking at any key).

The VBA sub/functions are SaveSetting and GetSetting. You can type the following into the Immediate window to get a feel for how these work:

SaveSetting "MyApplicationName", "MyConfigSection", "MyKeyName", "Hello World"
MsgBox GetSetting("MyApplicationName", "MyConfigSection", "MyKeyName")

If you want to iterate over all keys in a given section you can do so as follows:

Sub ShowAllKeys()
   Dim mySettings As Variant
   mySettings = GetAllSettings("MyApplicationName", "MyConfigSection")
   If Not IsEmpty(MySettings) Then
      Dim counter As Integer
      For counter = LBound(mySettings) To UBound(mySettings)
          Dim keyname As String: keyname = mySettings(counter, 0)
          Dim keyval As String: keyval = mySettings(counter, 1)
          MsgBox keyname & "=" & keyval
      Next
   End If
End Sub

You can also delete a registry key as follows:

DeleteSetting "MyApplicationName", "MyConfigSection", "MyKeyName"

FYI: Excel/VBA sticks this in the following registry location:

MyComputerHKEY_CURRENT_USERSoftwareVB and VBA Program SettingsMyApplicationNameMyConfigSection

…where MyApplication and MyConfigSection are whatever you specified in your SaveSettings call.

They end up in HKEY_CURRENT_USERSoftwareVB and VBA Program SettingsMyApplicationNameMyConfigSection.

[edit | edit source]

  • Works on: Microsoft Excel 2002 SP-2

Make the following call from VBA:

Application.DisplayAlerts = False

Making Cells Read-Only[edit | edit source]

  • Works on: Microsoft Excel 2002 SP-2
Sub ProtectMe()
  Range("A1:IV65536").Locked = False
  Range("A1").Locked = True
  ActiveSheet.Protect Password:="Test"
End Sub

Finding Non-Empty Portion of Worksheet[edit | edit source]

A Worksheet has a maximum size of 65536 rows by 256 columns. However if you want to iterate over all cells you probably don’t want to visit all of the empty ones. For this purpose the Worksheet provides the UsedRange property. For example:

ActiveSheet.UsedRange.Rows.Count

tells you how many non-empty rows are in the given worksheet. Empty rows which are in between the first and last used row are counted as well. Example: If a given Worksheet has entries in cells A7 and B16, used range is considered to be A7:B16, which counts for a total of 10 rows.

Using Events[edit | edit source]

  • Works on: Microsoft Excel 2002 SP-2

Consider the following class definition—Assume its a class called CMyClass:

Option Explicit
Dim WithEvents mySheet As Worksheet

Public Sub Init(aWS as Worksheet)
   Set MySheet = aWS
End Sub

Private Sub mySheet_SelectionChange(ByVal Target As Range)
   Dim MyRange As Range
   For Each MyRange in Target
      Debug.Print CStr(MyRange)
   Next
End Sub

The main ideas here are:

  • By declaring mySheet WithEvents, you’re saying that CMyClass is listening to mySheet’s events.
  • By declaring the member sub mySheet_SelectionChange you’re indicating how an instance of CMyClass should react if mySheet experiences a selection change (i.e. the user selects a new cell or range of cells); The general pattern for events is sub memberVarName_EventName(params).
  • You can disconnect the eventing between the given worksheet and CMyClass by setting mySheet = nothing;
  • You can create classes that throw events of your design using:
    • You would declare at the top of the class: Public Event SomeNiceEventName(YourFavoriteParam1 as WhateverType, etc…),
    • You could then raise that event (i.e. firing it to whatever listeners your class has) using RaiseEvent SomeNiceEvent(«Some nice event happened.»);
  • VBA in Excel doesn’t like the letters r or c used as variables. Those letters mean ‘row’ and ‘column’ elsewhere.

A little more detail is given here: [1]

Caveat: Uncaught Exceptions[edit | edit source]

Caveat: Uncaught exceptions in event-handlers cause VBE to mysteriously reset. If you are causing an uncaught exception in an event-handler, you probably won’t get an error popup. Instead, VBE will just reset. For this reason you should make sure you’re catching exceptions in all of your event handlers.

Caveat: Online-Help Typos[edit | edit source]

Some versions of Excel can have typos in the F1-help. Here’s an example of a Click handler with the correct parameters:

 Private Sub clicksrc_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
    MsgBox "I got a click!"
 End Sub

Iterating Over MultiSelected Cells[edit | edit source]

  • Works on: Microsoft Excel 2002 SP-2

The following code-snippet writes «YAY!» in each cell selected by the user:

For Each Cell in Selection
   Cell.Value = "YAY!"
Next

Exporting VBA Code[edit | edit source]

  • Works on Microsoft Excel 2002 SP-2

The following code provides a very primitive routine to write serializes the VBA code in your modules to files:

Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Dim objModule As Object
  On Error Resume Next
  
  For Each objModule In ThisWorkbook.VBProject.VBComponents
    DoEvents
    If objModule.CodeModule.CountOfLines > 0 Then
      objModule.Export objModule.Name & ".bas"
    End If
  Next objModule

End Sub

Resize a Named Range[edit | edit source]

  • Excel 2003

Note that the Resize property of Range objects does not change the size of the range object. It returns a new anonymous Range object. Easiest way to do this is to set the .Name property of the Resized range:

Sub ResizeRange(ByVal RangeName As String, _
                Optional NewRowCount As Long = 0, _
                Optional NewColumnCount As Long = 0)
    
  Dim oRange As Range
  Set oRange = Range(RangeName)
  If NewRowCount = 0 Then
    NewRowCount = oRange.Rows.Count
  End If
  If NewColumnCount = 0 Then
    NewColumnCount = oRange.Columns.Count
  End If
  
  oRange.Resize(NewRowCount, NewColumnCount).Name = RangeName
  
End Sub

Creating a Named Range[edit | edit source]

  • Excel 2002

Named Ranges allow the user to refer to a cell or range of cells by name instead of by their cell address. This name can be used in other cell formulas as well as in VBA (e.g. using the [SomeName]). There are two sorts of named ranges: Workbook Names and Worksheet Names.

To create a Workbook Name you can select the cell you want to name, pull down Insert—>Name—>Define… This will bring up the «Define Name» dialog. Here you can enter the new name for your cell.

The create a Worksheet Name you follow the same procedure but precede the name with Sheetname!, e.g. Sheet1!InitialValue to create a named-range only visible from within worksheet Sheet1.

When there are two variables with the same name, one local (Worksheet Name) and one global (Workbook Name), the spreadsheet uses the local variable.

There is no way to visualize a named range. The closest thing is to pull down again Insert—>Name—>Define…, but this method does not show if a variable is a local Worksheet Name or a global Workbook Name.

The named range can be a single cell, part of a row, part of a column or a rectangular group of cells. Each one behaves differently:

  • A single cell can be referenced anywhere in the worksheet or, if it’s defined globally (workbook name), anywhere in any worksheet.
  • A group of cells composing part of a row can only be referenced in a parallel row. For example, if the named variable is mass and it spans the cells C5:L5, then a reference to mass’ at cell E8 (say, a formula like =mass * (3e8)^2) would take the value at C8, but a reference to mass at cell M9 would return an error
  • Similarly, a group of cells composing part of a column can only be referenced in a parallel column. Cells outside the range will return an error
  • A group of cells that define a rectangular array of sides greater than one is only useful to be referenced in other worksheets — so, there’s no point in defining them locally (worksheet name). For example, if covmatrix are the cells Sheet1!B2:D4, then if cell Sheet2!C3 has the formula =1/sqrt(covmatrix), then it will return 1/sqrt(Sheet1!C3).

Reading a File[edit | edit source]

Reading a file line by line AKA for each line of a file:

  MyFileName = "C:UsersJoeDesktopFile.txt"
  FileNo = FreeFile()
  Open MyFileName For Input As #FileNo
  While Not EOF(FileNo)
    Line Input #FileNo, MyLine
    MsgBox MyLine
  Wend
  Close #FileNo

Links:

  • Open at Visual Basic for Applications Reference, msdn.microsoft.com
  • Close at Visual Basic for Applications Reference, msdn.microsoft.com
  • Line Input at Visual Basic for Applications Reference, msdn.microsoft.com

Writing to a File[edit | edit source]

Writing to a file:

  MyFileName = "C:UsersJoeDesktopFile.txt"
  FileNo = FreeFile()
  Open MyFileName For Output As #FileNo
  For I = 1 To 10
    Print #FileNo, Str(I);
    ' The semicolon above prevents printing of a newline
  Next
  Close #FileNo

Writing the tab-separated content of the current worksheet to a text file, disregarding some of cell content formatting such as percentages:

  MyFileName = "C:UsersJoeDesktopFile.txt"
  FileNo = FreeFile()
  Open MyFileName For Output As #FileNo
  RowCount = ActiveSheet.UsedRange.Cells.Rows.Count
  ColumnCount = ActiveSheet.UsedRange.Cells.Columns.Count
  For RowNo = 1 To RowCount
    For ColNo = 1 To ColumnCount
      Print #FileNo, Cells(RowNo, ColNo); ' The semicolon bars newline printing
      If ColNo < ColumnCount Then
        Print #FileNo, vbTab;
      End If
    Next
    If RowNo < RowCount Then
      Print #FileNo, vbNewline;
    End If
  Next
  Close #FileNo

Links:

  • Open at Visual Basic for Applications Reference, msdn.microsoft.com
  • Close at Visual Basic for Applications Reference, msdn.microsoft.com
  • Print # at Visual Basic for Applications Reference, msdn.microsoft.com

File Existence[edit | edit source]

Testing whether a file exists:

  If Dir(MyFileName) <> "" Then
    MsgBox "The file exists."
  End If

Directories[edit | edit source]

Making a directory:

  MkDir "C:UsersJoeDesktopTestFolder"

Removing a directory:

  RmDir "C:UsersJoeDesktopTestFolder"

Changing to a directory:

Changing the current drive:

Listing the content of a directory, using a custom filter encompassing two file extensions:

Directory = "C:UsersJoe Hoe"
Set Files = New Collection
Set FileFullPaths = New Collection
MyFile = Dir(Directory)
While MyFile <> ""
  Extension = LCase(Right(MyFile, 4))
  If Extension = ".txt" Or Extension = ".bat" Then
    Files.Add MyFile
    FileFullPaths.Add Directory & MyFile
  End If
  MyFile = Dir() 'Next file or folder
Wend

Links:

  • ChDir at Visual Basic for Applications Reference, msdn.microsoft.com
  • ChDrive at Visual Basic for Applications Reference, msdn.microsoft.com
  • Dir at Visual Basic for Applications Reference, msdn.microsoft.com
  • MkDir at Visual Basic for Applications Reference, msdn.microsoft.com
  • RmDir at Visual Basic for Applications Reference, msdn.microsoft.com

Grep[edit | edit source]

Searching for a regular expression in the lines of the files of a directory aka grepping:

Directory = "C:UsersJoe Hoe"
PatternString = "target.*path"
  
MyFile = Dir(Directory)
Set Lines = New Collection
Set RegExp = CreateObject("VBScript.RegExp")
RegExp.Pattern = PatternString
RegExp.IgnoreCase = True
While MyFile <> ""
  Extension = LCase(Right(MyFile, 4))
  If Extension = ".txt" Or Extension = ".bat" Then
    MyFullFileName = Directory & MyFile
    FileNo = FreeFile()
    Open MyFullFileName For Input As #FileNo
    While Not EOF(FileNo)
      Line Input #FileNo, MyLine
      If RegExp.Test(MyLine) Then
        Lines.Add MyLine
      End If
    Wend
    Close #FileNo
  End If
  MyFile = Dir() 'Next file or folder
Wend
'Lines is a collection of the matching lines

Clipboard[edit | edit source]

Prerequisites: Accessing the clipboard from an Excel sheet requires that a reference to MSForms (Microsoft Forms Object Library) is set in the sheet. You can set the reference by adding and subsequent removing of a user form, via Insert > UserForm in a pop-up menu. To check the presence of a reference, see Tools > References menu.

Placing text on the clipboard:

Set MyClipboard = New MSForms.DataObject
MyClipboard.SetText "My string"
MyClipboard.PutInClipboard

Getting text from the clipboard:

Set MyClipboard = New MSForms.DataObject
MyClipboard.GetFromClipboard
TextContent = MyClipboard.GetText

Links:

  • DataObject Class at msdn.microsoft.com; contains a section on Visual Basic, whose applicability to Excel VBA is unclear

Range[edit | edit source]

A range is a set of cells. The cells in a range do not need to be adjacent. However, the cells in a single range do need to belong to a single worksheet.

Defining a new range:

Set MyRange = Selection 'The current selection, possibly of multiple cells
Set MyRange = ActiveCell 'The single active cell
Set MyRange = Cells(1, 2) 'Row=1, Column=2 AKA B
Set MyRange = Cells(1, 1).Offset(0, 1) '=Cells(1, 2)
Set MyRange = Cells(1, 2).Offset(0, -1) '=Cells(1, 1)
Set MyRange = Cells(1, 1).Offset(0, -1) 'An error
Set MyRange = Range("A1:C2") 'Letters indicate columns; numbers indicate rows
Set MyRange = Range("A1:A3,C1:C3") 'A discontinuous range
Set MyRange = Range("B2:C2").Cells(1, 1) '=Cells(2, 2) =Range("B2")
Set MyRange = Rows(1) 'An entire row
Set MyRange = Columns(1) 'An entire column
Set MyRange = Cells(2,2).EntireRow
Set MyRange = Cells(2,2).EntireColumn
Set MyRange = Range("B1:C1").EntireColumn 'Two entire columns
Set MyRange = Range("B2:D4").End(xlUp) '=Cells(1, 2) =Range("B1")
Set MyRange = Range("B2:D4").End(xlToLeft) '=Cells(2, 1) = Range("A2")
Set MyRange = Range("B2:D4").End(xlDown) '=Cells(<last row number>, 2)
Set MyRange = Range("B2:D4").End(xlToRight) '=Cells(2, <last column number>)

Iterating a range AKA for each cell in a range:

Set MyRange = Selection
For Each Cell in MyRange
  MsgBox Cell
Next

Iterating rows and iterating columns AKA for each row of a range and for each column of a range, even if discontiguous:

Set Rng = Range("A1:B1,D3:E3") 'Discontiguous range
For Each Row In Rng.Rows
  RowNo = Row.Row
Next
For Each Column In Rng.Columns
  ColNo = Column.Column
Next

Making an union (a range subsuming both) or intersection (a range covering only cells in common) of two ranges:

Set MyRange = Range("A1:C2")
Set MyRange = Union(MyRange, Range("A5:C5"))
MyRange.Interior.Color = RGB(230, 230, 0)
Set MyRange = Intersect(MyRange, Columns(2))
MyRange.Interior.Color = RGB(230, 100, 0)

Selecting a range:

Set MyRange = Sheets(1).Range("A1:B1,D1:E1")
MyRange.Select 'Even a discontinuous range can be selected

Activating a cell:

Range("A1:B2").Select 'Affects Selection, generally of multiple cells
Range("A2").Activate 'Affects ActiveCell, the single one

Finding out about a range AKA learning about a range, including the number of cells AKA cell count, the first row, the last row, the first column, the last column, row count, and column count:

Set Rng = Range("B2:D4") 'Contiguous range
NumberOfCells = Rng.Cells.Count
FirstRowNo = Rng.Row
LastRowNo = Rng.Row + Rng.Rows.Count - 1 'Only for contiguous ranges
FirstColNo = Rng.Column
LastColNo = Rng.Column + Rng.Columns.Count - 1 'Only for contiguous ranges

Set Rng = Range("A1:B1,D1:E1") 'Discontiguous range
BrokenLastColNo = Rng.Column + Rng.Columns.Count - 1 'Only for contiguous ranges
'Do it the correct way for discontiguous range
LastColNo = 0
For Each Cell in Rng
  If Cell.Column > LastColNo then
    LastColNo = Cell.Column
  End If
Next

Set RangeWorksheet = Rng.Worksheet

Links:

  • Range Collection at Excel 2003 VBA Language Reference at msdn
  • Referring to Multiple Ranges at Excel 2003 VBA Language Reference at msdn
  • End Property at Excel 2003 VBA Language Reference at msdn
  • Intersect Method at Excel 2003 VBA Language Reference at msdn
  • Union Method at Excel 2003 VBA Language Reference at msdn

Worksheet[edit | edit source]

To create, access, or delete worksheets, you can use the methods of Worksheet objects. Examples follow.

Set MyNewWorksheet = Sheets.Add 'Create
Set MyNewWorksheet2 = Sheets.Add(After:=Sheets(Sheets.Count)) 'Create and place as the last sheet
MyNewWorksheet.Name = "My Sheet"
Set IndexedWorksheet = Sheets(1) 'Access by index
Set NamedWorksheet = Sheets("Name") 'Access by name
Set NamedWorksheet2 = Worksheets("Name") 'Does the same thing as the line above
MyNewWorksheet.Delete
Sheets("Name").Cells(1,1) = "New Value" 'Access the cells of the worksheet
Sheets("Name").Cells.Clear 'Clear an entire worksheet, including formatting and cell values
Sheets("Name").Columns(1).Sort key1:=Sheets("Name").Range("A1") 'Sort the first column
Sheets("Name").Columns(1).Sort key1:=Sheets("Name").Range("A1"), _
  order1:=xlDescending, header:=xlYes 'Use descending instead of ascending; do not sort
                                      ' the first cell, considering it a header
MyNewWorksheet2.Visible = xlSheetHidden
MyNewWorksheet2.Visible = xlSheetVisible

Obtaining an existing sheet by name or creating it if it does not exist:

NewSheetName = "My Sheet"
Set MySheet = Nothing
On Error Resume Next
Set MySheet = Sheets(NewSheetName)
On Error GoTo 0
If MySheet Is Nothing Then
  Set MySheet = Sheets.Add(After:=Sheets(Sheets.Count))
  MySheet.Name = NewSheetName
End If

Links:

  • Worksheet Object at Excel 2003 VBA Language Reference at mdsn
  • Sheets Collection Object at Excel 2003 VBA Language Reference at mdsn

Searching[edit | edit source]

You can search for values in a sheet as follows:

Dim SoughtString As String
SoughtString = "London"
Set ForeignKeySheet = Sheets("CitySize")
Set FoundCell = ForeignKeySheet.Columns(1).Find(SoughtString, LookAt:=xlWhole)
If Not FoundCell Is Nothing Then
  'The value associated with the key is in column 2
  CitySize = FoundCell.Offset(0, 1)
End If

If you want to have a substring match, drop «LookAt:=xlWhole» or use «LookAt:=xlPart».

Links:

  • Find Method (Excel 2003 VBA Language Reference) at msdn

Cell Formatting[edit | edit source]

You can format cells including text color, background color, font properties and border, but also formatting as a number, percent or text from VBA as follows:

  Selection.Characters.Font.Color = RGB(0, 0, 255) 'Foreground color AKA text color
  Selection.Interior.Color = RGB(230, 230, 230) 'Background color
  Selection.Characters.Font.ColorIndex = xlAutomatic 'Reset foreground color
  Selection.Interior.Color = xlAutomatic 'Reset background color
  Selection.Font.Name = "Verdana" 'Font face
  Selection.Font.Size = 8 'Font size
  Selection.Font.Bold = True
  Selection.Font.Italic = True
  Selection.Font.Underline = True
  'Selection.Font.Strikethrough = True
  Selection.Font.Name = Application.StandardFont 'See also ClearFormats below
  Selection.Font.Size = Application.StandardFontSize 'See also ClearFormats below
  'Selection.Borders.LineStyle = xlLineStyleNone or xlDouble or xlDashDotDot or other
  Selection.Borders.Weight = xlMedium ' xlHairline, xlThin, xlMedium, or xlThick
  'Selection.Borders(xlEdgeBottom).Weight = xlThick
  ' LineStyle and Weight interact in strange ways.
  Selection.Borders.Color = RGB(127, 127, 0) 'Will be overridden below; applies to all borders
  Selection.Borders(xlEdgeBottom).Color = RGB(255, 0, 0)
  Selection.Borders(xlEdgeTop).Color = RGB(0, 255, 0)
  Selection.Borders(xlEdgeLeft).Color = RGB(0, 0, 255)
  Selection.Borders(xlEdgeRight).Color = RGB(0, 127, 127)
  Selection.Borders(xlInsideHorizontal).Color = &H7FFF00 'A tricky hex matching RGB(0, 255, 127)
  Selection.Borders(xlInsideVertical).Color = RGB(255, 127, 0)

  Selection.NumberFormat = "General"
  Selection.NumberFormat = "00" 'As a number with zero decimal places, showing at least two digits
  Selection.NumberFormat = "0.000" 'As a number, showing three decimal places and no more
  Selection.NumberFormat = "0.0%" 'As a percent with one decimal place
  Selection.NumberFormat = "@" 'As text
  Selection.NumberFormat = "0.00E+00" 'As a number in scientific notation,
                                      'the string before E formatting the significand
  Selection.NumberFormat = "m/d/yyyy" 'As a date; whether "/" is shown depends on locale
  Selection.NumberFormat = "d. mmmm yyyy hh:mm:ss" 'As date, showing the month using a word,
                                      'also showing time
                                        
  Selection.ClearFormats 'Remove formatting, keeping cell content.
                         'Removes also the formatting set using NumberFormat.

Links:

  • Font Object (Excel 2003 VBA Language Reference) at msdn
  • Borders Collection (Excel 2003 VBA Language Reference) at msdn
  • LineStyle Property (Excel 2003 VBA Language Reference) at msdn
  • Weight Property (Excel 2003 VBA Language Reference) at msdn
  • NumberFormat Property (Excel 2003 VBA Language Reference) at msdn

Color[edit | edit source]

In Excel VBA, RGB colors are plain numbers rather than objects. Some color examples are listed in #Cell Formatting.

Some examples:

Selection.Characters.Font.Color = RGB(0, 0, 255) 'Foreground color AKA text color
Selection.Interior.Color = RGB(230, 230, 230) 'Background color
Selection.Characters.Font.ColorIndex = xlAutomatic 'Reset foreground color
Selection.Comment.Shape.Fill.ForeColor.RGB = RGB(220, 255, 160)
'The above is the fill color, that is, the background color
Selection.Comment.Shape.TextFrame.Characters.Font.ColorIndex = 3 'Red per default
'Selection.Comment.Shape.TextFrame.Characters.Font.Color = RGB(255, 0, 0) 'Does not work in Excel 2007
If False Then
  ActiveWorkbook.Colors(3) = RGB(200, 0, 0) 'Make the red in the index 5 a bit darker
End If

Setting the background color of the cells of the 1st column to the row number color index:

For ColorIndex = 1 to 56
  Cells(ColorIndex,1).Interior.ColorIndex = ColorIndex 
Next

Color index in the default palette:

  • 0 — Automatic
  • 1 — Black
  • 2 — White
  • 3 — Red
  • 4 — Green
  • 5 — Blue
  • 6 — Yellow
  • 7 — Magenta
  • 8 — Cyan
  • 9 — Dark red
  • 10 — Dark green
  • 11 — Dark blue
  • … etc., through 56

Finding all cells whose text color approaches green:

  TargetColor = RGB(0, 255, 0)
  Tolerance = 200
  'Extract the color components. The extraction is unneeded, but if the target
  'color came from the color of a selected cell, it would be needed.
  TmpColor = TargetColor
  TargetColorRed = TmpColor Mod 256
  TmpColor = TmpColor  256
  TargetColorGreen = TmpColor Mod 256
  TmpColor = TmpColor  256
  TargetColorBlue = TmpColor Mod 256

  For Each Cell In ActiveSheet.UsedRange.Cells
    MyColor = Cell.Characters.Font.Color 'Color is a number
    'Extract the RGB components of the color
    Red = MyColor Mod 256
    MyColor = MyColor  256
    Green = MyColor Mod 256
    MyColor = MyColor  256
    Blue = MyColor Mod 256
    'Find the distance from the target color
    Distance = ((Red - TargetColorRed) ^ 2 + _
                (Green - TargetColorGreen) ^ 2 + _
                (Blue - TargetColorBlue) ^ 2) ^ 0.5
    If Distance < Tolerance Then
      Cell.Interior.Color = RGB(230, 230, 230) 'Mark the cell using its background color
    End If
  Next

Links:

  • Color Property at Excel 2003 VBA Language Reference at msdn
  • ColorIndex Property at Excel 2003 VBA Language Reference at msdn
  • Colors Property at Excel 2003 VBA Language Reference at msdn
  • ColorType Property at Excel 2003 VBA Language Reference at msdn
  • PatternColor Property at Excel 2003 VBA Language Reference at msdn
  • PatternColorIndex Property at Excel 2003 VBA Language Reference at msdn

Visibility[edit | edit source]

Hiding a row (hide a row, hide row):

Rows(2).Hidden = True
'Rows(2).Hidden = False 'Show it again

Hiding several rows at once:

Range("A1:A3").EntireRow.Hidden = True 'Hide rows 1, 2, and 3

Hiding the rows of the currently selected cells:

Selection.EntireRow.Hidden = True

Looping over rows that are visible AKA shown AKA not hidden:

For RowNo = 1 To 10
  If Not Rows(RowNo).Hidden Then
    'Do something on the row
  End If
Next

Toggling the visibility of rows:

For RowNo = 1 To 10
  If Not Rows(RowNo).Hidden Then
    Rows(RowNo).Hidden = True
  Else
    Rows(RowNo).Hidden = False
  End If
Next

Hiding a column (hide a column, hide column):

Columns(2).Hidden = True
'Columns(2).Hidden = False 'Show it again

Hiding several columns at once:

Range("A1:C1").EntireColumn.Hidden = True 'Hide columns 1, 2, and 3

Hiding the columns of the currently selected cells:

Selection.EntireColumn.Hidden = True

Other tricks pertaining to visibility of columns work in a direct analogy to the examples for rows above.

Hyperlink[edit | edit source]

Opening or following a hyperlink (open a hyperlink, follow a hyperlink, open hyperlink, follow hyperlink):

ActiveWorkbook.FollowHyperlink "http://www.microsoft.com"

Opening the Wikipedia article for the article title found in the single active cell by opening a put-together URL:

ActiveWorkbook.FollowHyperlink "http://en.wikipedia.org/wiki/" & ActiveCell

Opening a Wikipedia article per article title in any of the currently selected cells:

For Each Cell In Selection
  ActiveWorkbook.FollowHyperlink "http://en.wikipedia.org/wiki/" & Cell
Next

Opening a local hyperlink, with a possible pop-up asking for confirmation for security reasons:

ActiveWorkbook.FollowHyperlink "file://C:UsersJoe HoeDesktopTest.txt"

Links:

  • FollowHyperlink Method (Excel 2003 VBA Language Reference) at msdn

Temporary file[edit | edit source]

Getting a temporary file, with unclear robustness of the following method, which uses random numbers and tests for file existence:

Function GetTempFile(Prefix As String, Suffix As String) As String
  TempFolder = Environ$("tmp")
  Randomize
  While True
    TempFileName = TempFolder & "" & Prefix & CStr(Int(10000000 * Rnd)) & Suffix
    If Dir(TempFileName) = "" Then 'Then the file does not exist
      GetTempFile = TempFileName
      Exit Function
    End If
  Wend
End Function

Links:

  • How To Use GetTempFileName API to Create a Unique Temporary File at Microsoft.com

Command Output[edit | edit source]

If you do not mind a popping up console window, here is a way of obtaining output of a command from Excel VBA:

Set MyShell = CreateObject("WScript.Shell")
Set ExecObject = MyShell.Exec("tasklist /v")
' AllText = ExecObject.StdOut.ReadAll
Do While Not ExecObject.StdOut.AtEndOfStream
  Line = ExecObject.StdOut.ReadLine()
  If InStr(Line, "AcroRd32.exe") > 0 Then
    'Do something
  End If
Loop

If having a console window popping up is not acceptable and you are okay with creating a temporary file, here is another way of obtaining output of a command from Excel VBA:

'Summary: Run "attrib" on the file in column A (1) of the row
'of the currently selected cell, writing the result into
'column B (2) of the row.

'Get temp file name
TempFolder = Environ$("tmp")
Randomize
TempFileName = ""
While TempFileName = ""
  TempFileNameCand = TempFolder & "" & "mytmp" & CStr(Int(10000000 * Rnd)) & ".tmp"
  If Dir(TempFileNameCand) = "" Then 'Then the file does not exist
    TempFileName = TempFileNameCand
  End If
Wend
 
'Run the command
Set MyShell = CreateObject("WScript.Shell")
MyCommand = "cmd /c attrib """ & Cells(Selection.Row, 1) & """ >" & TempFileName
MyShell.Run MyCommand, 0, True '0 = show no window
'Although attrib has an exe file, we need to use "cmd" for the
'redirection to work.

FileNo = FreeFile()
Open TempFileName For Input As #FileNo
While Not EOF(FileNo)
  Line Input #FileNo, MyLine
  Cells(Selection.Row, 2) = MyLine
Wend
Close #FileNo
Kill TempFileName 'Delete the file to clean up, although not strictly necessary

Using cmd /c, you can run chains of commands connected using & or | as well:

Set MyShell = CreateObject("WScript.Shell")
Set ExecObject = MyShell.Exec("cmd /c cd /d C:UsersJoe Hoe & findstr /s knowledge *.txt")
' AllText = ExecObject.StdOut.ReadAll
Do While Not ExecObject.StdOut.AtEndOfStream
  Line = ExecObject.StdOut.ReadLine()
  'Do something
Loop

Links:

  • Capture output value from a shell command in VBA? at stackoverflow

Dimensions[edit | edit source]

Row height and column width:

Selection.RowHeight = 15
Cells(1,1).RowHeight = 15 'Can be applied to cells, not only to rows
Rows(4).AutoFit 'Automatically adjust row height
'Cells(4, 1).AutoFit 'Error
Cells(4, 1).EntireRow.AutoFit
Selection.EntireRow.AutoFit 'Auto fit the row height of the current selection
ActiveSheet.UsedRange.Rows.AutoFit 'Auto fit the row height of the entire sheet
Selection.RowHeight = ActiveSheet.StandardHeight

Columns(1).ColumnWidth = 70
Cells(1,1).ColumnWidth = 70 'Can be applied to cells, not only to columns
Columns(2).AutoFit 'Automatically adjust column width
Selection.EntireRow.AutoFit 'Auto fit the column width of the current selection
ActiveSheet.UsedRange.Columns.AutoFit 'Auto fit the column width of the entire sheet
Selection.ColumnWidth = ActiveSheet.StandardWidth

Links:

  • RowHeight Property at Excel 2003 VBA Language Reference at msdn
  • ColumnWidth Property at Excel 2003 VBA Language Reference at msdn
  • StandardHeight Property at Excel 2003 VBA Language Reference at msdn
  • StandardWidth Property at Excel 2003 VBA Language Reference at msdn

[edit | edit source]

Working with comment aka note:

If Cells(1,1).Comment Is Nothing Then
  Cells(1,1).AddComment Text:="Hey"
  'AddComment throws an error if the cell already has a comment
  'Range("A2:A3").AddComment Text:="Hey" 'Error
  'AddComment throws an error if applies to more than one cell at once.
End If
Cells(1,1).Comment.Text Text:=Selection.Comment.Text & " there"
Cells(1,1).Comment.Visible = True 'Prevent the comment from autohiding
Cells(1,1).Comment.Visible = False 'The default setting
Cells(1,1).Comment.Shape.Fill.ForeColor.RGB = RGB(220, 255, 160)
'The above is the fill color, that is, the background color
Cells(1,1).Comment.Shape.Height = 60
Cells(1,1).Comment.Shape.Width = 80
Cells(1,1).Comment.Shape.TextFrame.Characters.Font.Name = "Verdana"
Cells(1,1).Comment.Shape.TextFrame.Characters.Font.Size = 9
Cells(1,1).Comment.Shape.TextFrame.Characters(1, 3).Font.Bold = True
If False Then
  'Selection.Comment.Delete
  Cells(1,1).ClearComments
  Range("A1:A2").ClearComments 'Can apply to several cells at once
  Cells(1,1).PasteSpecial Paste:=xlPasteComments
End If

Collecting all comments of the sheet into a string:

CommentString = ""
For Each Comment in ActiveSheet.Comments
  CommentString = CommentString & " " & Comment.Text
Next

Links:

  • Comment Object at Excel 2003 VBA Language Reference at msdn
  • Shape Object at Excel 2003 VBA Language Reference at msdn

IsEmpty[edit | edit source]

Approximately speaking, tells whether a variable has been initialized and not yet written to.

Can be used to tell whether a cell is empty; the presence of a comment attached to the cell or formatting of the cell does not make a cell non-empty.

Examples:

Set MyCell = Cells(1, 1)
If IsEmpty(MyCell) Then
  MyCell.Value = "New value"
End If
'
MyCell.Value = ""
Result1 = IsEmpty(MyCell) 'True
'
Dim MyVar
Result2 = IsEmpty(MyVar) 'True
MyVar = ""
Result3 = IsEmpty(MyVar) 'False
MyVar = Empty
Result4 = IsEmpty(MyVar) 'True

Links:

  • IsEmpty at Excel 2010 VBA Language Reference at msdn

IsNull[edit | edit source]

Tells whether an expression is Null, which is distinct from Empty.

Null can be assigned to variant variables; it cannot be assigned to variables dimensioned as strings or integers. Null cannot be assigned to objects, unlike Nothing.

Examples:

Result1 = IsNull(Null)   'True
Result2 = IsNull(Empty)  'False
'
Dim MyVar As Variant
MyVar = Null             'All right
Result3 = IsNull(MyVar)  'True
Dim MyColl As Collection
Set MyColl = Nothing     'All right
Set MyColl = Null        'Error
Dim MyStr As String
MyStr = Null             'Error
Dim MyInt As Integer
MyInt = Null             'Error

Links:

  • IsNull at Excel 2013 VBA Language Reference at msdn

Add-Ins at Startup[edit | edit source]

Controlling what add-ins Excel opens at startup:

Microsoft Excel 2003: Configure loaded add-ins via Tools -> Add-ins. Their list is mirrored in the following Registry key, but there’s no advantage in editing the Registry:

HKCUSoftwareMicrosoftOffice11.0ExcelInit Commands

Microsoft Excel 2002 SP-2:When you start Excel, it may automatically load addins (i.e. those you added from Tools -> Add-Ins). The list of add-ins that get loaded come from the following registry key:

HKCUSoftwareMicrosoftOffice10.0ExcelOptions

Under this key you may find a list of string-variables:

  • OPEN
  • OPEN1
  • OPEN2
  • etc…

The values of these variables is the name of the add-in. Excel, on start-up, will attempt to load the add-in in string-variable OPEN first, then OPEN1 (if present), onward until it runs out of such string-variables. It seems like Excel will automatically renumber the keys if they are not consecutive (i.e. OPEN1, OPEN3, OPEN4 will become OPEN1, OPEN2, OPEN3).

Note also the list of add-ins presented when you do Tools -> Add-Ons is, in part, populated by the contents of the following key:

HKCUSoftwareMicrosoftOffice10.0ExcelAddin Manager

See also the following MS KB article: How to Remove Entries from Add-Ins Dialog Box.

Chart direct from VBA array data[edit | edit source]

Charts need not be based on the values in cells of a spreadsheet, but can also be made directly in VBA from an array. The following code makes a chart of the relative frequency of characters in a string, in percent of the total, or normalized to a maximum of unity. There is also an option to sort the display and the content can be changed by modifying the content or sequence of the vRef array. Procedures to remove charts and test the functions are included.

Sub TestChartOfStrFreq()
    'run this to make a chart
    
    Dim str As String, n As Long, c As Long
    
    'place user string here
    str = ""
    
    'if no user string use these random charas
    If str = "" Then
        Do
           DoEvents
           Randomize
           n = Int((127 - 0 + 1) * Rnd + 0)
            Select Case n
            'numbers, and upper and lower letters
            Case 48 To 57, 65 To 90, 97 To 122
               str = str & Chr(n)
               c = c + 1
            End Select
        Loop Until c = 1000
    End If
        
    If ChartOfStrFreq(str, 1, 1) Then MsgBox "Chart done..."

End Sub

Sub DeleteAllWorkbookCharts5()
'run this to delete all charts
    Dim oC
    Application.DisplayAlerts = False
        For Each oC In ThisWorkbook.Charts
           oC.Delete
        Next oC
    Application.DisplayAlerts = True

End Sub

Function ChartOfStrFreq(sIn As String, Optional bSort As Boolean = False, Optional bNormalize As Boolean = False) As Boolean
'makes Excel bar-graph chart for percentage incidence of vRef charas in string (or normalized to max value= 1)
'bSort = True for descending percent otherwise vRef sequence

'PREP
    Dim vRef As Variant, LBC As Long, UBC As Long, LBR As Long, UBR As Long
    Dim vW() As Variant, x() As Variant, y() As Variant
    Dim sUC As String, nC As Long, n As Long, sS As String, nS As Long
    Dim vR As Variant, bCond As Boolean, SortIndex As Long, temp As Variant
    Dim t As Variant, i As Long, j As Long, q As Long, max As Variant
    Dim bXValueLabels As Boolean, sT As String, sX As String, sY As String
    
    If sIn = "" Then
       MsgBox "Empty input string - closing"
       Exit Function
    End If
    
    'load the intended x-axis display set here...add to it and delete as required
    vRef = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", _
                 "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", _
                 "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
    
    'set axis labels etc...
    sT = "Selective Distribution from a " & Len(sIn) & "-Character String"
    sX = "Character Set of Interest"
    If bNormalize Then
       sY = "Count Divided by Maximum Value"
    Else
       sY = "Percentage of Original String"
    End If
    bXValueLabels = True
    
    
    LBC = LBound(vRef): UBC = UBound(vRef)
    ReDim vW(0 To 2, LBC To UBC)
    LBR = LBound(vW, 1): UBR = UBound(vW, 1)
    ReDim x(LBC To UBC)
    ReDim y(LBC To UBC)

'COUNT
    sUC = UCase(sIn)
    nC = Len(sIn)
    For n = LBC To UBC
       vW(0, n) = vRef(n) 'all charas to first row
       sS = vW(0, n)
       'count hits in string for each chara in ref set
       vW(1, n) = UBound(Split(sUC, sS)) - LBound(Split(sUC, sS)) 'count hits
       'calculate hits as percentages of total chara count
       vW(2, n) = Round(((vW(1, n)) * 100 / nC), 2)
    Next n

'NORMALIZE
    If bNormalize Then
        max = vW(1, FindMax(vW, 1))
        For n = LBC To UBC
           temp = vW(1, n)
           vW(2, n) = Round((temp / max), 2)
        Next n
    End If

'SORT
    If bSort Then
        SortIndex = 2
        'descending sort, on rows
        For i = LBC To UBC - 1
            For j = LBC To UBC - 1
                bCond = vW(SortIndex, j) < vW(SortIndex, j + 1)
                If bCond Then
                    For q = LBR To UBR
                        t = vW(q, j)
                        vW(q, j) = vW(q, j + 1)
                        vW(q, j + 1) = t
                    Next q
                End If
            Next
        Next
    End If

'CHART
    'transfer data to chart arrays
    For n = LBC To UBC
        x(n) = vW(0, n) 'x axis data
        y(n) = vW(2, n) 'y axis data
    Next n

    'make chart
    Charts.Add
    ActiveChart.ChartType = xlColumnClustered 'column chart
       
    'assign the data and labels to a series
    With ActiveChart.SeriesCollection
       If .count = 0 Then .NewSeries
          If bXValueLabels Then
             .Item(1).ApplyDataLabels Type:=xlDataLabelsShowValue
             .Item(1).DataLabels.Orientation = 60
          End If
       If Val(Application.Version) >= 12 Then
          .Item(1).Values = y
          .Item(1).XValues = x
       Else
          .Item(1).Select
          Names.Add "_", x
          ExecuteExcel4Macro "series.x(!_)"
          Names.Add "_", y
          ExecuteExcel4Macro "series.y(,!_)"
          Names("_").Delete
       End If
    End With
    
    'apply title string, x and y axis strings, and delete legend
    With ActiveChart
       .HasTitle = True
       .ChartTitle.Text = sT
       .SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis) 'X
       .Axes(xlCategory).AxisTitle.Text = sX
       .SetElement (msoElementPrimaryValueAxisTitleRotated) 'Y
       .Axes(xlValue).AxisTitle.Text = sY
       .Legend.Delete
    End With
         
    ActiveChart.ChartArea.Select

ChartOfStrFreq = True
    
End Function

Public Function FindMax(arr() As Variant, row As Long) As Long
  Dim myMax As Long
  Dim i As Long
  
  For i = LBound(arr, 2) To UBound(arr, 2)
    If arr(row, i) > myMax Then
      myMax = arr(row, i)
      FindMax = i
    End If
  Next i
End Function

Nuking Retained State[edit | edit source]

  • Works on: Microsoft Excel 2002 SP-2
  • OS: Windows XP

Nuking Excel’s Retained State: Excel remembers all sorts of things between runs: What addins to load, what buttons and menus to display, etc. Sometime you’ll want to clean all of this stuff up and bring Excel back to its factory state.

Nuking Excel Checklist:

  1. Make sure the following directories are empty:
    1. C:Program FilesMicrosoft OfficeOffice10xlstart
    2. C:appsxpapplication dataMicrosoftxlstart
  2. Nuke the auto-open keys from the registry(as shown below);
  3. Nuke all .xlbs – For example check here:
    1. C:appsxpapplication dataMicrosoftExcel

[edit | edit source]

  • Visual Basic

External links[edit | edit source]

  • The Mr. Excel Forum: This is a great super-active forum where Excel power-users can often be found.
  • Woody’s Lounge
  • J Rubin’s ExcelTip.com
  • OzGrid
  • Express
  • Chip Pearson
  • Ron de Bruin
  • BygSoftware.com: This site has loads of practical examples showing Excel’s potential
  • Aspose.Cells for .NET/Java : A component available for .NET and Java that can be used by developers to create and manipulate Excel files without the need for MS Office to be installed on the system.

Введение

Без преувеличения
можно сказать, Microsoft
Office
любых версий является самым полезным
и самым используемым продуктом Microsoft.
И современный руководитель, и менеджер,
и преподаватель, и студент, и школьник
– все, кто имеет в своем распоряжении
компьютер, в той или иной степени
используют эту систему.

Одним из наиболее
важных и полезных аспектов подготовки
Microsoft
Office
к выполнению определенных задач является
автоматизация процессов взаимодействия
пользователя с приложениями Microsoft
Office.
Эти приложения не являются законченными
продуктами, настроенными на выполнение
всех возможных задач, а представляют
собой системы, которые нуждаются в
определенной настройке, что обеспечивается
разнообразными средствами, как
интерактивными, так и программными. Все
приложения Microsoft
Office
поддерживают язык программирования
Visual
Basic
for
Applications
(VBA).
VBA
позволяет работать с Microsoft
Office,
как с некоторым конструктором: в
распоряжении разработчика VBA-приложения
не только большое количество объектов
и коллекций, но и возможности настроек,
позволяющие до такой степени программно
настроить любое приложение, что
пользователь такого приложения может
и не понять, с каким приложением происходит
«общение».

Важнейшим
достоинством VBA
является возможность объединять любые
приложения Microsoft
Office
для решения, практически, любых задач
по обработке информации. В этом смысле
Microsoft
Office
можно считать системой программирования,
подобной C++,
Delphi
и т.д., но с более мощными и разнообразными
функциями, поскольку здесь имеется
неизмеримо большее количество управляемых
системой объектов и готовых решений
для конечных пользователей.

Привлекательная
особенность VBA
в том, что он очень удобен для первого
знакомства с программированием в среде
Windows.
Этому способствует широкое распространение
приложений Microsoft
Office,
бесконечное разнообразие возможных
практических задач, интуитивно понятная
интегрированная среда редактора Visual
Basic,
возможность обучения программированию
посредством анализа кода, записанного
при помощи макрорекордера, наличие
огромного количества объектов, которыми
можно управлять из VB-кода. Более глубокие
знания VBA-программирования позволят
решать, практически, любые задачи: от
автоматизации создания простых документов
до обработки баз данных с использованием
как настольных, так и сетевых СУБД.

В данном пособии
предлагается набор заданий, объединенных
в лабораторные работы по изучаемым
вопросам. Каждая лабораторная работа
предполагает выполнение заданий по
прописанным действиям, осмысление
проделанного и выполнение упражнений
на закрепление полученных навыков.

На базе предложенного
материала можно организовать вариативность
в преподавании VBA
в зависимости от подготовки студентов.
Лабораторные работы охватывают основы
языка Visual
Basic,
а также операции по созданию макросов,
процедур и функций, приложений обработки
электронных таблиц с

3

использованием
диалоговых окон. Предполагается освоить
язык программирования Visual
Basic.

Рекомендуется
начать изучение VBA
с лекционного курса по данной теме. Он
создаст теоретическую основу для
практической деятельности.

По структуре каждая
работа имеет следующие составные части:

ь
цель
занятия;

ь
необходимые
материалы к заданиям;

ь
справочный
материал;

ь
комментированные
практические задания;

ь
упражнения
для самостоятельной работы;

ь
контрольные
вопросы.

Благодаря такой
структуре обучаемый имеет все условия
для качественного освоения материала
лабораторных работ. Упражнения
предполагают выполнение операций,
аналогичных комментированным практическим
заданиям, но самостоятельно. Это приводит
к осмыслению и закреплению полученных
навыков.

Пособие может быть
использовано аспирантами и студентами
любых специальностей, изучающими
дисциплины «Информатика, численные
методы и компьютерная графика», «Основы
информационных технологий».

4

Независимо от
используемых вами операционной системы
и программных приложений вы часто
выполняете одни и те же последовательности
команд для многих рутинных задач. Вместо
повторения последовательности команд
каждый раз, когда вам необходимо выполнить
какую-либо задачу, вы можете создать
макрос
(macro),
который вместо вас будет выполнять эту
последовательность. Макросы позволяют
вводить одиночную команду, выполняющую
ту же задачу, для реализации которой
вам было бы необходимо вводить несколько
команд вручную.

Макросы, кроме
удобства, имеют и другие преимущества.
Поскольку компьютеры больше приспособлены
для выполнения повторяющихся задач,
чем люди, запись макрорекордером
неоднократно
выполняемых команд повышает точность
и скорость работы. Другим преимуществом
использования макросов является то,
что при их выполнении обычно нет
необходимости в присутствии
человека-оператора.

Макрорекордер
(или просто «рекордер») записывает все
действия пользователя, включая ошибки
и неправильные запуски. Когда программа
воспроизводит макрос, она выполняет
каждую записанную рекордером команду
точно в такой последовательности, в
которой вы их выполняли во время записи.

Записанные
макрорекордером макросы лишены гибкости,
поэтому они не могут реагировать на
изменившиеся или меняющиеся условия.
Законченный макрос сохраняется как
процедура VBA.
На языке VBA
вы можете написать макрос, который
проверяет соответствие различным
предопределенным условиям и выбирает
соответствующую последовательность
действий на основе этих условий. Что
касается повторяющихся действий в самом
макросе, записанные рекордером макросы
имеют значительные ограничения. Если
вам необходимо, чтобы записанный макрос
повторял какое-либо действие несколько
раз, вы должны вручную повторять это
действие нужное количество раз, когда
записываете макрос. Такой макрос всегда
повторяет это действие одинаковое
количество раз, всякий раз, когда вы его
запускаете, до тех пор, пока вы не
отредактируете или не перезапишете
его.

Кроме улучшения
определенных макросов, записанных
макрорекордером, вы можете использовать
VBA
для соединения, организации и управления
несколькими записанными макросами, с
помощью которых вы выполняете сложную
общую задачу, состоящую из нескольких
меньших задач.

С помощью макросов
можно создавать пользовательские меню,
диалоговые окна и панели инструментов,
которые могут до неузнаваемости изменить
интерфейс всем известных продуктов
Word,
Excel,
Access,
PowerPoint.
Уместно здесь отметить также и возможность
создания разнообразной системы проверки
данных, вводимых пользователем в
диалоговых окнах. Когда вы научитесь
писать программы на языке VBA,
вы, скорее всего, уже никогда не станете
начинать создание макроса с использования
рекордера.

5

Лабораторная
работа № 1.
Запись
новых макросов в Excel.
Выполнение

макросов

Цель занятия:
Уметь задавать
стартовые условия для макроса, запускать
макроредактор и присваивать имя макросу,
выполнять действия,
которые необходимо записать для
использования позже,
останавливать макроредактор, запускать
на выполнения макросы.

Материалы к
занятию:
MS
Excel
2003.

Задание 1. Создайте
макрос в Excel,
который форматирует текст в текущей
ячейке шрифтом Arial,
полужирным, 12 размером.

1. Задайте
стартовые условия.

Для этого:

^Запустите Excel
2003 (Пуск/Все программы ► /
Microsoft
Office
► /
Microsoft
Office
Excel
2003),
если он
еще не запущен;

  • откройте какую-либо
    рабочую книгу;

  • выберите какой-либо
    рабочий лист;

  • выделите любую
    ячейку в рабочем листе.

2. Выберете
место и имя хранения макроса.

Для этого:

выберете
в меню Сервис/Макрос/Начать
запись…
(Tools/Macro/Record
New
Macro…);

* в
раскрывшимся диалоговом окне Запись
макроса (
Record
Macro)
(рис. 1), в
текстовом окне Имя
макроса (
Macro
Name)
введите
FormatArialBold12
в качестве
имени макроса;

Рис. 1

ь
оставьте
без изменений текст, который Excel
вставила в поле Описание
(Description),
но добавьте следующее: Форматирует
текст диапазона:
Arial,
Bold,
12
; этот
дополнительный комментарий поможет
вам (и другим) определить назначение
данного макроса;

ь
в списке
Сохранить в
(Store
macro
in)
для выбора места, в котором будет сохранен
записанный макрос выберите Личная
книга макросов
;

ь
если вы
уверены в том, что будете часто использовать
макрос, который

6

собираетесь
записывать, можете назначить для его
запуска горячую клавишу; если — да,
введите горячую клавишу в текстовое
окно Сочетание
клавиш (
Shortcut
Key)
окна Запись
макроса;

* щелкните
на кнопке ОК
для начала
записи макроса; как только вы щелкните
на кнопке ОК
в диалоговом
окне Запись
макроса,
Excel
запустит

макрорекордер,
отобразит панель ^
Остановить
запись (
Stop
Recorder)
и начнет
запись ваших действий. Макрорекордер
сохранит каждое ваше действие в новом
макросе.

Замечание 1.
Доступными
вариантами при сохранении макросов
являются Личная
книга макросов (
Personal
Macro
Workbook),
Новая книга (
New
Workbook)
и Эта
книга (
This
Workbook).
Когда вы
выбираете в качестве места для хранения
макроса Личная
книга макросов,
Excel
сохраняет макрос в файле специальной
книги с именем Personal.xls
в папке, в которую установлена Excel.
Excel
автоматически открывает эту книгу
каждый раз в начале работы. Поскольку
вам всегда доступны макросы из всех
открытых книг, макрос, сохраненный в
книге Personal.xls,
также будет доступен вам всегда. Если
книга Personal.xls
не существует, Excel
создаст ее. Выбор Эта
книга
приведет
к тому, что Excel
сохранит новый макрос в текущей активной
рабочей книге. Выбор Новая
книга
приведет
к созданию в Excel
новой рабочей книги, в которой будет
сохранен этот макрос, — рабочая книга,
которая была активной при запуске вами
макрорекордера, остается активной
рабочей книгой; любые действия, которые
вы записываете, выполняются в этой
книге, а не в новой рабочей книге,
созданной для сохранения макроса.

Замечание 2. Не
всегда при запуске макрорекордера вы
можете увидеть на экране панель Остановить
запись.
Поскольку
это — обычная панель, ее можно отображать
или не отображать. Этим, как и другими
панелями, управляет команда Панели
инструментов (
Toolbars)
меню Вид
(
View).
В любом
случае (при наличии на экране панели
Остановить
запись
или
ее отсутствии) вы можете остановить
макрорекордер, выбрав Сервис/Макрос/Остановить
запись.

3. Запишите действия
и остановите макрорекордер.

Для этого:

  • выберите команду
    Формат/Ячейки…
    (
    Format/Cells…)
    для отображения
    диалогового окна Формат
    ячеек (
    Format
    Cells);

  • щелкните на ярлычке
    Шрифт (Font)
    для отображения
    опций шрифта (рис. 2);

  • выберите Arial
    в списке
    Шрифт (Font);
    выполните
    этот шаг, даже если шрифт Arial
    уже выбран;

  • выберите Полужирный
    (
    Bold)
    в списке
    Начертание
    (
    Font
    Style);

  • щелкните на кнопке
    ОК, чтобы
    закрыть диалоговое окно Формат
    ячеек и
    изменить выделенную ячейку в рабочем
    листе;

  • щелкните на кнопке
    Остановить
    запись (
    Stop
    Macro)
    на панели
    Остановить
    запись (
    Stop
    Recorder)
    или выберите
    команду Сервис/Макрос/Остановить
    запись (
    Tools/Macro/Stop
    Recording).

7

Рис. 2

Замечание 3. По
умолчанию панель l?f
Остановить
запись
в
Excel
содержит две командные кнопки. Левая
кнопка — это кнопка Остановить
запись (
Stop);
щелкните на
этой кнопке для остановки макрорекордера.
Правая кнопка -это кнопка Относительная
ссылка (
Relative
Reference).
По умолчанию
Excel
записывает абсолютные ссылки на ячейки
в ваши макросы. Кнопка Относительная
ссылка
является
кнопкой-переключателем (toggle).
Когда запись с относительными ссылками
отключена, кнопка Относительная
ссылка
выглядит
плоской; при помещении курсора мыши на
кнопку вид кнопки изменяется и она
выглядит отжатой. Когда запись с
относительной ссылкой включена, кнопка
Относительная
ссылка
на
панели Остановить
запись
нажата
(находится в «утопленном» положении).
Щелкая на кнопке Относительная
ссылка,
можно
включать и выключать запись с относительными
ссылками во время записи по вашему
желанию.

Задание 2. Выполните
макрос FormatArialBoIdl2.

Для этого:

^выберите ячейку
в рабочем листе (предпочтительнее
ячейку, содержащую некоторый текст,
чтобы вы могли видеть изменения);

^выберите команду
Сервис/Макрос/Макросы…
для отображения
диалогового окна Макрос;

• выберите макрос
PERSONAL.XLS!FormatAriaIBoIdl2
в списке Имя
макроса
и
щелкните на кнопке Выполнить
для запуска
макроса FormatArialBoldl2.
Текст в любой ячейке, которая была
выделена до запуска вами этого макроса,
будет теперь иметь формат полужирного
шрифта Arial
12-го размера.

Упражнение

  1. Создайте макрос
    в Excel,
    который вычисляет сумму ячеек A1,
    A2
    и выводит результат в ячейку A3 шрифтом
    Times
    New
    Roman,
    курсивом, 12 размером.

  2. Создайте макрос
    в Excel,
    который выводит на желтом фоне синими
    буквами в текущую ячейку имя, а справа
    от нее фамилию шрифтом Arial,
    полужирным, 12 размером.

  3. Создайте макрос
    в Excel,
    который выводит красными буквами в
    ячейку A3 слово Частное:”,
    справа от
    нее выводит частное ячеек A1 и A2 шрифтом

8

Times
New
Roman,
курсивом, 12 размера.

Макросы Visual
Basic
for
Applications
сохраняются как часть файлов, в которых
Excel
(а также Word
и Access)
обычно содержит свои данные, – макросы
сохраняются в файлах рабочих книг в
Excel.
Макросы сохраняются в специальной части
файла данных, называемой Modules
(модули).
Модуль VBA
содержит исходный
код
(source
code)
макроса – текстовое представление
инструкций. Каждый файл рабочей книги
Excel
может не содержать модулей или содержать
один или несколько модулей. Модули,
сохраняемые в одной рабочей книге Excel,
имеют общее название Project
(проект).

При записи макроса
в Excel
вы можете определять только рабочую
книгу, в которой Excel
сохраняет записанный макрос, – текущую
рабочую книгу, новую рабочую книгу или
рабочую книгу Personal.xls.
Excel
выбирает модуль, в котором сохраняется
записанный макрос, и при необходимости
создает этот модуль. Когда Excel
создает модуль, в котором сохраняется
записанный макрос, модулю присваивается
имя ModuleN,
где N
– это
количество модулей, созданных для
определенной рабочей книги во время
текущего сеанса работы. Например, в
первый раз, когда вы сохраняете записанный
макрос в Personal.xls
(личной книге макросов), Excel
создает модуль с именем Module1.
Если вы продолжаете записывать макросы
в том же сеансе работы и сохранять их в
Personal.xls,
Excel
продолжает сохранять записанные макросы
в том же модуле Module1
до тех пор,
пока вы не выберете другую рабочую
книгу. Если позже в том же сеансе работы
вы опять захотите сохранить записанные
макросы в Personal.xls,
Excel
добавляет другой модуль с именем Module2
в эту книгу.

Если какая-либо
рабочая книга уже содержит модуль с тем
же именем, что выбран в Excel
для нового модуля, Excel
увеличивает число в имени модуля до тех
пор, пока имя нового модуля не будет
отличаться от имен существующих модулей.

Для просмотра
модулей, сохраненных в определенной
рабочей книге (и исходного кода макроса,
который они содержат), вам необходимо
использовать компонент Visual
Basic
Editor
(Редактор Visual
Basic).
Этот компонент предоставляет
инструментальные средства, которые
используются для создания новых модулей,
просмотра содержимого существующих
модулей, создания и редактирования
исходного кода макроса, создания
пользовательских диалоговых окон и
выполнения других задач, относящихся
к написанию и обслуживанию программ на
VBA.
Редактор Visual
Basic
(Редактор VB)
содержит одни и те же возможности в
Excel,
Word
и Access.

Задание 3. Запустите
Редактор VB.

Для этого:

ь
выберите
Сервис/Макрос/Редактор
Visual
Basic
(Tools/Macro/Visual
Basic
Editor)
или нажмите сочетание клавиш Alt+F11;

ь
выберите
в меню View/Code
или нажмите
клавишу F7.

Excel
запустит Редактор VB
(рис. 3).

9

Project
Explorer

Code
Window

Properties
Window

Рис. 3

Окна Редактора
VB

В окне Редактора
VB
имеются три дочерних окна, каждое из
которых отображает важную информацию
о VBA-проекте.
Project
(Проект) —
это
группа модулей и других объектов,
сохраняемых в определенной рабочей
книге или шаблоне рабочей книги. Каждое
из окон Редактора VB
отображается по умолчанию в прикрепленных
(docked)
положениях (рис. 3).

Если необходимо,
вы можете переместить любое из дочерних
окон Редактора VB
в любое место на экране, перетаскивая
строку
заголовка (
title
bar)
этого окна
таким же образом, каким бы вы перемещали
любое окно на рабочем столе Windows.
Перетаскивание одного из дочерних окон
из его прикрепленного положения приводит
к тому, что оно становится плавающим
окном. Плавающие
(
floating)
окна всегда
остаются видимыми поверх других окон.
Вы можете также изменять размер любого
из дочерних окон Редактора VB,
расширяя или уменьшая рамку окна для
увеличения или уменьшения его размера,
что подобно изменению размера любого
окна на рабочем столе Windows.

Project
Explorer
(Окно проекта)
содержит дерево-диаграмму открытых в
данный момент файлов (рабочих книг) и
объектов, содержащихся в этих файлах
(объекты host-приложения,
модули, ссылки, формы и так далее). Project
Explorer
можно использовать для перехода к
различным модулям и другим объектам в
проекте VB
при помощи кнопок (панели инструментов
этого окна) =
View
Code
(Программа),
^ View
Object
(Объект) и
Ш. Toggle
Folders
(Папки).

Properties
Window
(Окно свойств)
содержит все свойства объекта текущего
выбора. Вкладка Alphabetic
(по алфавиту)
этого окна предоставляет список

10

свойств выделенного
объекта, составленный из имен свойств
в алфавитном порядке. Вкладка Categorized
(по категориям)
отображает свойства объекта, отсортированные
по категориям.

Code
Window
— это окно,
в котором вы можете просматривать,
редактировать или создавать исходный
код VBA.
В режиме F
Full
Module
View
весь исходный
код макроса в модуле отображается сразу
в прокручивающемся текстовом окне, а
макрос отделяется от другого макроса
серой линией. Редактор VB
позволяет также просматривать содержимое
модуля в режиме 1=
Procedure
View
(представление
процедуры). Чтобы выбрать режим просмотра,
щелкайте кнопки в нижнем левом углу
Code
Window
(рис. 3).

Когда Code
Window
находится в режиме Procedure
View,
видимым является исходный код только
одного макроса. Используйте раскрывающийся
список Procedure
(процедура)
для просмотра другого макроса. В режиме
Full
Module
View
вы можете также использовать раскрывающийся
список Procedure
для быстрого перехода к отдельному
макросу.

Используйте список
Object
List
(объект) для
выбора объекта, процедуры которого
хотите просмотреть или редактировать.
В случае стандартных модулей, таких как
модули, в которых сохраняются записанные
вами макросы, единственным выбором в
списке Object
List
является General
(общая
область).

Меню Редактора
VB

В Редакторе VB
меню File
(Файл)
предоставляет команды, необходимые для
сохранения изменений в проекте VBA
и вывода на экран исходного кода вашего
макроса VBA.
В табл. 1 приведены команды меню File,
их горячие клавиши и назначение каждой
команды.

Таблица 1
Команды меню File

Команда

Горячая клавиша

Действие

Save
<project>

(сохранить

<проект>)

Ctrl+S

Сохраняет текущий
проект (презентацию, рисунок и т.д. в
зависимости от приложения, в котором
открыт Редактор VB)
VBA
на диске, включая все модули и формы.

Import
File… (импорт
файла)

Ctrl+M

Добавляет
существующий модуль, форму или класс
в текущий проект (презентацию). Вы
можете импортировать только модули,
формы или классы, сохраненные ранее
командой Export
File
из другого проекта (презентации).

Export
File… (экспорт
файла)

Ctrl+E

Сохраняет текущий
модуль, форму или класс в формате
текстового файла для импортирования
в другой проект или в целях архивирования.

Remove
<item>… (удалить
<…>)

Перманентно
удаляет модуль или форму текущего
выбора из проекта (презентации) VBA.
Эта команда не доступна, если в Project
Explorer
не выбран никакой элемент.

11

Команда

Горячая клавиша

Действие

Print…
(печать)

Ctrl+P

Печатает модуль
или форму для документирования или с
целью архивирования.

Close
and Return to
Microsoft Excel (закрыть
и
вернуться
в
Excel)

Alt+Q

Закрывает Редактор
VB
и возвращает вас в рабочую книгу, из
которой был открыт Редактор VB.

Меню Edit
(Правка)
содержит команды, относящиеся к управлению
исходным кодом макроса в Code
Window
и объектами в формах. В табл. 2 приведены
имеющиеся команды меню Edit,
их горячие клавиши и описывается
действие, выполняемое каждой командой.

Таблица 2
Команды меню Edit

Команда

Горячая клавиша

Действие

Undo
(отменить)

Ctrl+Z

Отменяет самую
последнюю команду. Не все команды
могут быть отменены. Меню доступно
только в случае, если есть, что отменять.

Redo
(вернуть)

Возвращает самую
последнюю команду, которую вы отменили.

Cut
(вырезать)

Ctrl+X

Вырезает выделенный
текст или объект и помещает его в
Windows
Clipboard.
Выделенный текст или объект удаляется
из модуля или формы.

Сору
(копировать)

Ctrl+C

Копирует выделенный
текст или объект и помещает его в
Windows
Clipboard.
Выделенный текст или объект остается
неизменным.

Paste
(вставить)

Ctrl+V

Вставляет текст
или объект из Windows
Clipboard
в текущий модуль или форму.

Clear
(очистить)

Del

Удаляет выделенный
текст или объект из модуля или формы.

Select
All
(выделить
все)

Ctrl+A

Выделяет весь
текст в модуле или все объекты в форме.

Find…
(найти)

Ctrl+F

Подобно команде
Find
в Word
или Excel,
позволяет находить указанный текст
в модуле.

Find
Next
(найти
далее)

F3

Повторяет
последнюю операцию Find.

Replace…
(заменить)

Ctrl+H

Подобно команде
Replace
в Word
или Excel,
позволяет находить указанный текст
в модуле и заменять его другим текстом.

Indent

(увеличить

отступ)

Tab

Смещает весь
выделенный текст вправо на интервал
табуляции.

12

Команда

Горячая клавиша

Действие

Outdent

(уменьшить

отступ)

Shift+Tab
Смещает весь выделенный текст влево
на интервал табуляции.

List
Properties/ Methods
(список
свойств/методов)

Ctrl+J

Открывает список
в List
Properties/Methods,
отображая свойства и методы объекта,
имя которого вы только что ввели. Когда
курсор вставки находится на пустом
месте в List
Properties/Methods
эта команда открывает список глобально
доступных свойств и методов.

List
Constants (список
констант)

Ctrl+
Shift+J

Открывает список
в Code
Window,
отображающий допустимые константы
для свойства, которое вы только что
ввели с предшествующим знаком “=”.

Quick
Info (сведения)

Ctrl+I

Открывает
всплывающее окно подсказки, отображающее
правильный синтаксис для процедуры,
функции или метода, который вы только
что ввели в Code
Window.

Parameter
Info (параметры)

Ctrl+
Shift+I

Открывает
всплывающее окно подсказки, отображающее
параметры (называемые также аргументами)
процедуры, функции или оператора,
который вы только что ввели в Code
Window.

Complete
Word
(завершить
слово)

Ctrl+Space
Редактор VB
заканчивает слово, которое вы
вводите, как только вы введете
достаточно символов для того,
чтобы VBA
распознал ключевое слово.

Bookmarks
(закладки)

Открывает подменю
с пунктами для помещения, удаления
или перехода к закладкам, которые вы
ранее поместили в ваш модуль. В отличие
от закладок в Word,
закладки Редактора VB
не имеют имен.

Меню View
(Вид) содержит
команды, позволяющие выбирать элементы
Редактора VB
для просмотра и способ просмотра. В
табл. 3 приведены команды меню View,
их горячие клавиши и действие, производимое
каждой командой.

Таблица 3
Команды меню View

Команда

Горячая клавиша

Действие

Code
(программа)

F7

Активизирует
Code
Window
для отображения исходного кода VBA,
ассоциированного с выбранным модулем
или формой.

Object
(объект)

Shift+F7

Отображает объект
текущего выбора в Project
Explorer.

13

Команда

Горячая клавиша

Действие

Definition
(описание)

Shift+F2
Отображает исходный код VBA
для процедуры или функции, на
которую указывает курсор; отображает
Object
Browser
для объектов в справке VBA.

Last
Position
(вернуться
к последней позиции)

Ctrl+
Переходит в последнюю позицию в
модуле после Shift+F2
использования команды меню Definition
или после
редактирования кода.

Object
Browser

(просмотр

объектов)

F2

Открывает Object
Browser,
позволяющий определять, какие макросы
доступны в данный момент.

Immediate
Window
(окно
отладки)

Ctrl+G

Отображает окно
отладчика Immediate
Window
VBA.

Locals
Window
(окно
локальных переменных)

Отображает
окно отладчика Locals
Window.

Watch
Window
(окно

контрольного
значения)

Отображает окно
отладчика Watch
Window
(контрольные значения).

Call
Stack
(стек
вызова)

Ctrl+L

Отображает список
последовательности вызовов для текущей
функции или процедуры VBA.

Project
Explorer (окно
проекта)

Ctrl+R

Отображает
Project
Explorer.

Properties
Window
(окно
свойств)

F4

Отображает
Properties
Window.

Toolbox
(панель
элементов)

Отображает
Toolbox.
Toolbox
используется для добавления элементов
управления в пользовательские
диалоговые окна.

Tab
Order
(последовательно
сть
перехода)

Отображает
диалоговое окно Tab
Order,
которое используется при создании
пользовательских диалоговых окон.

Toolbars
(панели
инструментов)

Отображает
подменю, позволяющее показывать или
скрывать различные панели инструментов
Редактора VB
или открывать диалоговое окно для
настройки одной из панелей инструментов
Редактора VB.

Microsoft Excel

Alt+Fll

Возвращает вас
в Microsoft
Excel,
из которого был запущен Редактор VB,
но оставляет Редактор VB
открытым.

Команды меню Insert
(Вставка)
позволяют добавлять различные объекты,

14

такие
как модули и формы, в ваш проект. В меню
Insert
никакие команды не имеют «горячих
клавиш». В табл. 4 приведены действия,
выполняемые каждой командой этого меню.

Таблица 4
Команды меню Insert

Команда Действие

Procedure…
(процедура)
UseForm

Вставляет новую
процедуру (Sub,
Function
или Property)
в текущий
модуль. Процедура – это еще одно название
макроса.
Добавляет
новую форму (используется для
создания

пользовательских
диалоговых окон) в проект.
Module
(модуль) Добавляет новый модуль в
проект. Редактор VB
дает этому модулю
имя в соответствии с правилами, описанными
ранее.

Class

Module

(модуль
класса)
File…
(файл)

Добавляет в проект
class
module
(модуль
класса
).
Модули класса используются для создания
пользовательских объектов в
вашем проекте.

Позволяет вставлять
текстовый файл, содержащий исходный
код VBA,
в модуль.

Команды меню Format
(Формат)
используются при создании пользовательских
диалоговых окон и других форм. Команды
меню Format
позволяют выравнивать объекты в форме
по отношению друг к другу, настраивать
размер элемента управления в соответствии
с его содержимым и выполнять многие
другие полезные задачи. Команды меню
Format
представлены здесь для полноты изложения
материала, хотя вы не будете их применять
до тех пор, пока не начнете создавать
собственные пользовательские диалоговые
окна. В табл. 5 приведены команды меню
Format
и их действия. Заметьте, что эти команды
не имеют «горячих клавиш».

Таблица 5
Команды меню Format

Команда Действие

Align
(выровнять)

Открывает подменю
команд, которые позволяют выравнивать

выбранные объекты
в форме по отношению друг к другу.

Здесь можно
выравнивать объекты по верхней/нижней,

правой/левой
границам, по центру или середине
создаваемого

объекта.

Make
Same
Size

(выровнять

размер)

Size to
Fit

(подогнать

размер)

Size to
Grid

(выровнять

размер по сетке)

Открывает подменю
команд, позволяющих изменять размер

выделенных объектов
до размера указанного объекта.

Одновременно
изменяет ширину и высоту объекта
до соответствия размеру его содержимого.

Одновременно
изменяет ширину и высоту объекта до
ближайших меток сетки. Йри разработке
форм Редактор VB
отображает в форме сетку, чтобы было
легче располагать и изменять
размеры объектов в форме.

15

Команда Действие

Horizontal
Spacing
(интервал
по горизонтали)

Открывает подменю
команд, позволяющих устанавливать
горизонтальный интервал для выбранных
объектов. Здесь можно устанавливать
равномерный горизонтальный интервал,
уменьшать или увеличивать его или
удалять всякий горизонтальный интервал
между объектами.

Vertical
Spacing
(интервал
по вертикали)

Открывает подменю
команд, позволяющих устанавливать
вертикальный интервал для выбранных
объектов. Здесь можно устанавливать
равномерный вертикальный интервал,
уменьшать или увеличивать его или
удалять всякий вертикальный интервал
между объектами.

Center
in
Form
(разместить по центру
в форме)

Открывает подменю
команд, позволяющих изменять положение
выбранных объектов, чтобы они были
центрированы в форме горизонтально
или вертикально.

Arrange
Buttons

(разместить

кнопки)

Открывает подменю
команд, позволяющих автоматически
располагать командные кнопки в форме
в ряд с равным интервалом по нижнему
или правому краю формы.

Group
(группировать)

Связывает
несколько выбранных объектов вместе
в одну группу, чтобы вы могли перемещать,
изменять размер, вырезать или копировать
объекты, обращаясь с ними, как с одним
целым.

Ungroup
(разделить)

Отменяет
группировку объектов, которые перед
этим были связаны вместе с помощью
команды Group.

Order
(порядок)

Открывает подменю
команд, позволяющих изменять упорядочение
сверху вниз (называемое z-order)
перекрывающихся объектов в форме.
Используйте команду Order,
чтобы обеспечить, например, появление
текстового окна всегда поверх
графического объекта в форме.

Команды меню Debug
(Отладка)
используются при выполнении тестирования
или отладки макросов. Debugging
– так
называется процесс нахождения и
исправления ошибок в программе. В табл.
6 приведены команды меню Debug,
их «горячие клавиши» и выполняемые
действия.

Таблица 6
Команды меню Debug

Команда

Горячая клавиша

Действие

Compile
<project>

(компилировать

<проект>)

Компилирует
проект, выбранный в данный момент в
Project
Explorer.

Step
Into

(шаг
с заходом)

F8

Выполняет исходный
код вашего макроса по одному оператору
каждый раз.

Step
Over
(шаг с обходом)

Shift+F8

Подобно команде
Step
Into
команда Step
Over
позволяет
выполнять все инструкции в макросе
без паузы
на каждой отдельной инструкции.

16

Команда

Горячая клавиша

Действие

Step
Out

(шаг
с выходом)

Ctrl+
Выполняет все остающиеся операторы
в макросе Shift+F8
без паузы на каждом отдельном
операторе.

Run
to
Cursor
(выполнить до текущей позиции)

Ctrl+F8

Выполняет
операторы исходного кода макроса от
оператора, выполняющегося в данный
момент, до текущей позиции курсора.

Add
Watch…
(добавить контрольное значение)

Позволяет
указывать переменные или выражения,
значения которых можно наблюдать во
время выполнения исходного кода VBA.

Edit
Watch…
(изменить контрольное значение)

Ctrl+W

Позволяет
редактировать спецификации для
наблюдаемых переменных и выражений,
которые были созданы ранее с помощью
команды Add
Watch.

Quick
Watch…

(контрольное

значение)

Shift+F9
Отображает текущее значение
выбранного выражения.

Toggle
Breakpoint (точка
останова)

F9

Отмечает место
(или отменяет отметку) в исходном коде
VBA,
где вы хотите остановить выполнение
макроса.

Clear
All

Breakpoints
(снять все
точки останова)

Ctrl+
Shift+F9

Удаляет все точки
останова в модуле.

Set
Next
Statement
(задать следующую инструкцию)

Ctrl+F9

Позволяет менять
обычное выполнение кода путем указания
вручную следующей строки исходного
кода, которая должна выполняться.

Show
Next

Statement

(показать

следующую

инструкцию)

Приводит к
подсветке Редактором VB
следующей строки кода, которая будет
выполняться.

Команды меню Debug
позволяют непосредственно контролировать
выполнение макроса, останавливать и
запускать макрос в заданных точках и
отслеживать выполнение макроса по
шагам.

Команды меню Run
(Запуск)
позволяют начать выполнение макроса,
прерывать или возобновлять его выполнение
или возвращать прерванный макрос в
состояние до выполнения (табл. 7).

17

Таблица 7
Команды меню Run

Команда

Горячая клавиша

Действие

Run
Sub/User Form (запуск
подпрограммы/
User Form)

F5

Приводит к тому,
что VBA
запускает макрос, который редактируется
в данный момент, то есть VBA
запускает макрос, на тексте которого
находится курсор вставки. Если
какая-либо форма активна, VBA
запускает
эту форму.

Break
(прервать)

Ctrl+Break

Прерывает
выполнение вашего кода VBA
и приводит к тому, что Редактор VB
переходит в режим прерывания (Break
mode).
Break
mode используется
при отладке кода VBA.

Resert
<project> (сброс)

Устанавливает
все переменные модульного уровня и
Call
Stack
(список последовательности вызовов)
в исходное состояние.

Design
Mode (конструктор)

Включает и
выключает Design
mode
(режим проектирования или разработки)
для проекта. В этом режиме никакой код
в вашем проекте не выполняется, и
события от элементов управления не
обрабатываются.

Команды меню Tools
(Сервис) не
только позволяют выбрать макрос для
выполнения, но и получить доступ к
внешним библиотекам макросов и
дополнительным элементам управления
форм (кроме встроенных в VBA).
Команды меню Tools
обеспечивают также доступ к диалоговому
окну Options
(параметры) Редактора VB
и свойствам проекта VBA
текущего выбора в Project
Explorer.
В табл. 8 приведены команды меню Tools
и их действия. Команды меню Tools
не имеют
«горячих клавиш».

Таблица 8
Команды меню Tools

Команда
Действие

References…
(ссылки)

Отображает
диалоговое окно References,
позволяющее устанавливать ссылки на
библиотеки объектов, библиотеки типов
или другой проект VBA.
После установления ссылки объекты,
методы, свойства, процедуры и функции
в этой ссылке появляются в диалоговом
окне Object
Browser.

Additional
Controls… (дополнительные
элементы)

Отображает
диалоговое окно Additional
Controls,
позволяющее настраивать Toolbox
(панель элементов) так, чтобы вы могли
добавлять элементы управления в формы
помимо встроенных в VBA.
Диалоговое окно Additional
Controls
предназначено для добавления к панели
элементов кнопок, которые позволяют
добавлять к форме объекты, такие как
рабочий лист Excel
или документ Word.

Macros…
(макросы)

Отображает
диалоговое окно Macros,
позволяющее создавать, редактировать,
выполнять или удалять макросы.

18

Команда
Действие

Options…
(параметры)

Отображает
диалоговое окно Options,
позволяющее выбирать различные опции
для Редактора VB,
такие как число пробелов в интервале
табуляции (tab
stop),
когда VBA
проверяет синтаксис ваших операторов,
и так далее.

<project>
Properties…
(свойства
проекта)

Отображает
диалоговое окно Project
Properties,
позволяющее устанавливать различные
свойства вашего проекта VBA,
такие как имя проекта, описание и файл
контекстной справки. Это диалоговое
окно позволяет также защищать проект,
чтобы никто не мог его редактировать
без указания пароля.

Digital
Signature… (цифровая
подпись)

Отображает
диалоговое окно Digital
Signature,
в котором можно задать для проекта
сертификат цифровой подписи.

В меню Addlns
находится
всего одна команда, AddIn
Manager,
которая приводит к отображению диалогового
окна AddIn
Manager.
Это окно позволяет регистрировать,
загружать или выгружать и определять
поведение дополнений.

В Редакторе VB
имеются два дополнительных меню: Window
(окно) и Help
(помощь). Оба
этих меню содержат команды, идентичные
меню Window
и Help,
имеющимся в других приложениях Microsoft
Windows.
Команды в меню Window
позволяют выбирать активное окно,
разбивать текущее окно, размещать
дочерние окна вертикально и горизонтально,
организовывать дочерние окна VB
в виде каскада или выравнивать значки
минимизированных дочерних окон. Команды
меню Help
также идентичны командам меню Help
в Word,
Excel
и других приложениях Microsoft
Windows.
Меню Help
Редактора VB
позволяет получать контекстно-зависимую
подсказку посредством справочной
системы Microsoft
Office
и просматривать файлы справочной системы
VBA
для host-приложения, из которого вы
запустили Редактор VB.
Если у вас имеется модем или доступ к
Internet,
вы можете использовать Help/MSDN
on
the
Web
для соединения
с разнообразными страницами Web,
содержащими информацию о продуктах
Microsoft
и VBA.
Последняя команда в меню Help
– это команда About
Microsoft
Visual
Basic.
Она отображает диалоговое окно, содержащее
сведения об авторских правах на Microsoft
Visual
Basic.
Диалоговое окно About
Microsoft
Visual
Basic
содержит также командную кнопку System
Info,
которая отображает информацию о вашей
вычислительной системе: какие драйверы
видеосистемы, звуковой системы и принтера
установлены, какие программы загружены
в память в данное время, какие программы
зарегистрированы в системном реестре
(Windows
System
Registry)
и другую техническую информацию.

Панелями
инструментов Редактора
VB

По умолчанию
Редактор VB
отображает только панель инструментов
Standard
(рис. 4). В
конце панели, справа, находится кнопка
(со стрелкой) More
Buttons.
Если вы хотите удалить с панели или
добавить некоторые кнопки на панель
Standard,
нажмите на эту кнопку, а затем укажите
соответствующую кнопку в появляющемся
меню.

19

Запуск программы
Помощник по Office

Окно проекта
Сброс

Вырезать Отменить
Вставить

Панель

Прервать

Окно

Вставка объекта

аца,1

Сохранить

1-1

h

Найти

Дополнительные
кнопки элементов

LnS,ColZ

свойств

Копировать

Приложение Excel

Повторить

Конструктор

Просмотр объектов

Позиция курсора

Рис. 4

Кроме панели
Standard
Редактор VB
предлагает еще три панели: Edit
(правка),
Debug
(отладка) и
UseForm.

Вы можете управлять
тем, какие панели инструментов отображает
Редактор VB
с помощью команды View/Toolbars
(Вид/Панели
инструментов
).

Контрольные
вопросы

  1. Что такое макрос?

  2. Что такое
    макрорекордер? Каковы его возможности?

  3. Как задаются
    стартовые условия для макроса?

  4. Как записать
    макрос?

  5. Как выполнить
    макрос?

  6. Назовите основные
    компоненты интегрированной среды VBA.

Соседние файлы в папке Visual Basic

  • #

    02.05.2014311.81 Кб44Расчётно-графическая работа [5].xls

  • #

    02.05.20143.44 Mб22Расчётно-графическая работа [6].xls

  • #

    02.05.20142.88 Mб26Расчётно-графическая работа [7].xls

  • #

    02.05.2014202.75 Кб25Расчётно-графическая работа [8].xls

  • #

    02.05.20143.44 Mб30Расчётно-графическая работа [9].xls

  • #

Введение

Всем нам приходится — кому реже, кому чаще — повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую «рутинную составляющую» — одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.

Макрос — это запрограммированная последовательность действий (программа, процедура), записанная на языке программирования Visual Basic for Applications (VBA). Мы можем запускать макрос сколько угодно раз, заставляя Excel выполнять последовательность любых  нужных нам действий, которые нам не хочется выполнять вручную.

В принципе, существует великое множество языков программирования (Pascal, Fortran, C++, C#, Java, ASP, PHP…), но для всех программ пакета Microsoft Office стандартом является именно встроенный язык VBA. Команды этого языка понимает любое офисное приложение, будь то Excel, Word, Outlook или Access.

Способ 1. Создание макросов в редакторе Visual Basic

Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно — редактор программ на VBA, встроенный в Microsoft Excel.

  • В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис — Макрос — Редактор Visual Basic (Toos — Macro — Visual Basic Editor).
  • В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer). Выбираем Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer). Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic (Visual Basic Editor)



    macro1.png:

К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией  Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:

macro2.png

Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:

  • Обычные модули — используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert — Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:

    macro3.png

  • Модуль Эта книга — также виден в левом верхнем углу редактора Visual Basic в окне, которое называется Project Explorer. В этот модуль обычно записываются макросы, которые должны выполнятся при наступлении каких-либо событий в книге (открытие или сохранение книги, печать файла и т.п.):

    macro4.png

  • Модуль листа — доступен через Project Explorer и через контекстное меню листа, т.е. правой кнопкой мыши по ярлычку листа — команда Исходный текст (View Source). Сюда записывают макросы, которые должны выполняться при наступлении определенных событий на листе (изменение данных в ячейках, пересчет листа, копирование или удаление листа и т.д.)

    macro5.png

 Обычный макрос, введенный в стандартный модуль выглядит примерно так:

macro6.png

Давайте разберем приведенный выше в качестве примера макрос Zamena:

  • Любой макрос должен начинаться с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки надо оставить пустыми.
  • Любой макрос должен заканчиваться оператором End Sub.
  • Все, что находится между Sub и End Sub — тело макроса, т.е. команды, которые будут выполняться при запуске макроса. В данном случае макрос выделяет ячейку заливает выделенных диапазон (Selection) желтым цветом (код = 6) и затем проходит в цикле по всем ячейкам, заменяя формулы на значения. В конце выводится окно сообщения (MsgBox).

С ходу ясно, что вот так сразу, без предварительной подготовки и опыта в программировании вообще и на VBA в частности, сложновато будет сообразить какие именно команды и как надо вводить, чтобы макрос автоматически выполнял все действия, которые, например, Вы делаете для создания еженедельного отчета для руководства компании. Поэтому мы переходим ко второму способу создания макросов, а именно…

Способ 2. Запись макросов макрорекордером

Макрорекордер — это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем создавать свой еженедельный отчет, то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим макрос создающий отчет как если бы он был написан программистом. Такой способ создания макросов не требует знаний пользователя о программировании и VBA и позволяет пользоваться макросами как неким аналогом видеозаписи: включил запись, выполнил операци, перемотал пленку и запустил выполнение тех же действий еще раз. Естественно у такого способа есть свои плюсы и минусы:

  • Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу — запись останавливается.
  • Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
  • Если во время записи макроса макрорекордером вы ошиблись — ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) — во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.

Чтобы включить запись необходимо:

  • в Excel 2003 и старше — выбрать в меню Сервис — Макрос — Начать запись (Tools — Macro — Record New Macro)
  • в Excel 2007 и новее — нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)

Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:

macro7.png

  • Имя макроса — подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
  • Сочетание клавиш — будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис — Макрос — Макросы — Выполнить (Tools — Macro — Macros — Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
  • Сохранить в… — здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
    • Эта книга — макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
    • Новая книга — макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
    • Личная книга макросов — это специальная книга Excel  с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.

После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording).

Запуск и редактирование макросов

Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или — в старых версиях Excel — через меню Сервис — Макрос — Макросы (Tools — Macro — Macros):

macro8.png

  • Любой выделенный в списке макрос можно запустить кнопкой Выполнить (Run).
  • Кнопка Параметры (Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
  • Кнопка Изменить (Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.

Создание кнопки для запуска макросов

Чтобы не запоминать сочетание клавиш для запуска макроса, лучше создать кнопку и назначить ей нужный макрос. Кнопка может быть нескольких типов:

Кнопка на панели инструментов в Excel 2003 и старше

Откройте меню Сервис — Настройка (Tools — Customize) и перейдите на вкладку Команды (Commands). В категории Макросы легко найти веселый желтый «колобок» — Настраиваемую кнопку (Custom button):

macro9.gif

Перетащите ее к себе на панель инструментов и затем щелкните по ней правой кнопкой мыши. В контекстом меню можно назначить кнопке макрос, выбрать другой значок и имя:

macro10.gif

Кнопка на панели быстрого доступа в Excel 2007 и новее

Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar):

macro11.png

Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:

macro12.png

Кнопка на листе

Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:

  • В Excel 2003 и старше — откройте панель инструментов Формы через меню Вид — Панели инструментов — Формы (View — Toolbars — Forms)
  • В Excel 2007 и новее — откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer) 

Выберите объект Кнопка (Button):

macro13.png

Затем нарисуйте кнопку на листе, удерживая левую кнопку мыши. Автоматически появится окно, где нужно выбрать макрос, который должен запускаться при щелчке по нарисованной кнопке.

Создание пользовательских функций на VBA

Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция — только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).

Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert — Module и введем туда текст нашей функции:

macro14.png

Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка — Функция) в категории Определенные пользователем (User Defined):

macro15.png

После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:

macro16.png

Понравилась статья? Поделить с друзьями:
  • Что такое vat в excel
  • Что такое variables в word
  • Что такое var в excel
  • Что такое userform excel
  • Что такое underline the correct word