Document

advertisement
Lab 2
Introduction to VBA (II)
► Lab 1 revisited
- Sub & Function procedures
- Data types and variable declaration
► Recording macros
► Working with Ranges
► Exercise
http://blackboard.umbc.edu
Lab 1 Revisited
• Don’t forget to go to Excel: Tools -> Macro -> Security
and change the Security level from High to Medium
• When you save the file in Excel or VBE, it saves both
the Excel file and the VBA code you write
• The string concatenation symbol – the ampersand (&) has to be surrounded by a space on BOTH sides
• An ampersand (&) is required when you break strings
across lines, e.g.
MsgBox "John Doe traveled 100 miles and paid a total of " & _
"6.40 dollars on gas.", vbInformation, "Travel Information"
http://blackboard.umbc.edu
VBA Procedure Declaration
• Sub procedure: a set of instructions that performs some action.
• Function procedures. a set of instructions that returns a single
value or an array
• Sub procedure Syntax
[Private | Public | Friend] [Static] Sub name ([arglist])
[statements]
[Exit Sub]
[statements]
End Sub
•
Private:
accessible only to other procedures in the same module
Public:
accessible to all procedures in ALL other modules in the
workbook. (By default, a procedure is Public)
procedure’s variables are preserved when procedure
ends
a list of variables that receive arguments passed to the
procedure
•
Static:
•
Arglist:
•
Exit Sub:
Immediate exit from a Sub procedure.
http://blackboard.umbc.edu
Function Procedure Declaration
• Function procedure Syntax
[Public | Private | Friend] [Static] Function name [(arglist)] [As
type]
[statements]
[name = expression]
[Exit Function]
[statements]
[name = expression]
End Function
•
Private:
accessible only to other procedures in the same module
Public:
accessible to all procedures in ALL other modules in the
workbook. (By default, a procedure is Public)
procedure’s variables are preserved when procedure
ends
a list of variables that receive arguments passed to the
procedure
•
Static:
•
Arglist:
•
Exit Function: Immediate exit from a Function procedure.
http://blackboard.umbc.edu
Variables
• A variable is a named storage location in a
computer’s memory
• It can accommodate a variety of data types
– Such as Boolean, Integer, Long, Single,
Double, Date, String, Variant
• Make your variable names descriptive, and
the first character must be alphabetic
• Good names usually have mixed case
(InterestRate) or underscore (Interest_Rate)
• No spaces and periods are allowed in variable
names
http://blackboard.umbc.edu
Variable Continued
• You don’t have to declare the data type of a variable
in VBA – VBA uses the default data type – Variant.
BUT: slower execution and less efficiently use of
memory.
• To declare a variable is to tell VBA its name and data
type. Two benefits of declaring variables:
– Your programs run faster and use memory more
efficiently
– You avoid problems involving misspelled variable
names.
• To FORCE yourself to declare all variables
in VBE, Go to Tools->Options->Editor, and check
the “Require Variable declaration” box – Good habit
http://blackboard.umbc.edu
Some VBA’s Built-in Data Types
• String – texts (a sequence of contiguous characters
including letters, numbers, spaces, and punctuation)
surrounded by double quotes
• Currency - for monetary values
• Boolean - for variables that can be True or False
• Integer - Range: -32,768 to 32,767
• Long - for large integers beyond the Integer range
• Date - Range: Jan. 1, 0100 to Dec. 31, 9999
• Single – for numbers with decimals
• Double – for numbers with decimals where you
require more accuracy than with singles
• Variant – a catchall, where you let VBA decide how
to deal with the variable
• etc…
http://blackboard.umbc.edu
Variable Declaration Tips
• To declare several variables:
– use a separate line for each variable, but can be a
very long list;
– use one single Dim, followed by a list of
declarations separated by commas
BUT: you must follow each variable with the
keyword As and then the variable type
e.g. Dim i As Integer, Name As String, j As Single
If: Dim I, J, K As Integer
′ only K is declared as Integer
′ I & J are declared As Variant instead of Integer
http://blackboard.umbc.edu
Object Variable
• Define variable R as a Range object:
Dim R as Range
Set R = ActiveWorkbook.Worksheets(“Sheet1”).Range(“A1:A10”)
Note: the ‘Set’ statement is only used for object variables
• Now, instead of writing
ActiveWorkbook.Worksheets(“Sheet1”).Range(“A1:A10”).Font.Size = 14
you can simply write:
R.Font.Size = 14
http://blackboard.umbc.edu
The With Construction
•
Very useful: saves a lot of typing and performs multiple operations on a
single object when working with objects and their properties and methods.
Now compare:
• Not using the “With…End With” construction
– Worksheets(“March”).Range(“A1”).Value = “Sales for March”
Worksheets(“March”).Range(“A1”).Font.Name = “Arial”
Worksheets(“March”).Range(“A1”).Font.Bold = True
Worksheets(“March”).Range(“A1”).Font.Size = 14
• Using the “With…End With” construction
– With Worksheets(“March”).Range(“A1”)
.Value = “Sales for March”
With .Font
.Name = “Arial”
.Bold = True
.Size = 14
End With
End With
http://blackboard.umbc.edu
Recording Macros (TRY THIS)
●
Learn VBA by using the Macro recorder
– Activate a worksheet in the workbook
– Select the Tools->Macro->Record New Macro command
Or: Click on Record Macro tool at the Visual Basic Toolbar
– Accept the defaults or change them. Then, click OK to begin
recording your actions
• Macro name: The name of the macro
• Shortcut key: You can specify a key combination that executes
the macro
• Store macro in: The location for the macro
• Description: A description of the macro. By default, Excel
inserts the date and your name. You can add additional
information if you like
– Make some changes in the workbook:
Click on File->Page Setup ->Orientation ->Landscape
– Click the Stop Recording button on the toolbar
– Open the module in VBE and see the code that has been
generated automatically
http://blackboard.umbc.edu
Recording Macros – An Example
Record a macro that changes the formatting for the current range
selection. The macro format the contents in the selected range into
Arial 16-point type, boldface, and red. The corresponding steps
include:
1. Enter some value or text into a cell – anything is okay.
2. Select the cell(s) that contains the value or text that you entered in the
preceding step
3. Select Tools->Macro->Record New Macro. Excel displays the Record
Macro dialog box
4. Enter a new Name for the macro, e.g., FormattingMacro
5. Assign this macro to the shortcut key Ctrl+Shift+F
6. Click OK. This closes the dialog box and displays a toolbar called
Stop Recording
7. Select Format->Cells and then click the Font tab. Choose Arial font,
Bold, 16-point type, and make the color red. Click OK
8. Click the Stop Recording button on the Stop Recording toolbar
9. Test the macro: enter some value in other cells, then select them and
press Ctrl+Shift+F
10. View the code in VBE module
TRY THIS
http://blackboard.umbc.edu
Recording Macros – Sort Method
Input some data into an Excel sheet
1. Activate Sheet1 of the workbook.
2. Turn on the recorder
3. Accept all the default values of the Record Macro
dialog box
4. Use the Sort method in Excel to sort the data and
display the data by cost ascending.
5. Click the Stop Recording button on the Stop
Recording toolbar
6. View the code in VBE module
7. Unsort the data and run the macro; note the results
TRY THIS
http://blackboard.umbc.edu
Sort Method
• Object.Sort(Key1, Order1, Key2, Order2, Key3,
Order3, Header, ..)
• Example:
• Range("A1:G13").Sort Key1:=Range("G3"), _
Order1:=xlAscending, Header:= xlYes
– Key1: The first sort field
– Order1: The sort order for the field or range specified in
Key1
– Header Optional xlYesNoGuess. Specifies whether or not
the first row contains headers
• To specify a range that is to be sorted, it suffices to
specify any cell within this range. To specify the
column to sort on (in the key1 argument), it suffices
to specify any cell within this column.
http://blackboard.umbc.edu
More on Recording Macros
• Personal.xls – a special workbook. Macros
recorded in this workbook are available all
the times as you work in Excel, but it is a
hidden file.
• Limitations
– It cannot record everything (e.g., loops and
control logic)
– The automatically generated code is often far
from elegant
http://blackboard.umbc.edu
Specify Range With VBA (1)
•
Use an address
e.g. Range(″A1:B10″).Value = 2
‘Value is the default property of Range object, can be omitted
Range(″A1″, ″B10″).ClearContents
•
Use a range name
e.g. To create a range name:
Range("A1:F1").Name = "NameList"
-> Range(″NameList″)
•
Use a variable for a range name
E.g., SalesName = Range(“Sales”).Name
Then, this range can be referred to as
Range(SalesName)
•
Use Range(ColumnIndex & RowIndex)
e.g. Range(“A” & 5)
http://blackboard.umbc.edu
Specify Range With VBA (2)
•
Use a Range object variable
E.g., Dim R As Range
Set R = Range(“Sales”)
R.Font =12
•
Use top left and bottom right arguments
E.g. Range(Range(“C1”), Range(“D10”))
‘C1:D10
•
•
•
Use the Cells property
Use the Offset property
Use the End property
•
Object Browser in VBE – a helpful tool to learn
object properties and methods (can be accessed by
pressing F2)
http://blackboard.umbc.edu
The Cells Property (1)
•
•
Used to refer to a particular cell of a Range object
Three syntaxes:
1. Object.Cells(rowIndex, columnIndex)
row: 1-65536, column: 1-256
2. Object.Cells(Index)
3. Object. Cells
•
Example – Syntax 1:
e.g. Worksheets("Sheet1").Cells(1,1) = 9
' - A1
ActiveSheet.Cells(3,4) = 7
' - D3
Example – Syntax 2:
e.g. ActiveSheet.Cells(513) = 2
' - A3
Example – Syntax 3: - returns all cells on the referenced
worksheet
e.g.ActiveSheet.Cells.ClearContents
•
•
http://blackboard.umbc.edu
The Cells Property (2)
• More examples:
–
–
–
–
–
–
Range(“B5:B14”).Cells(3), which cell?
Answer: B7
Range(“C5:E15”).Cells(4, 2), which cell?
Answer: D8
Range(“A1:D10”).Cells(5) = 2000, which cell?
Answer: A2
http://blackboard.umbc.edu
The Offset Property (1)
• Used to return a reference relative to a range, where
the range is usually a single cell.
• Syntax:
Object.Offset(rowOffset, columnOffset)
• Two arguments correspond to the relative position
from the upper-left cell of the specified Range:
– Positive: down or right
– Negative: up or left
– Zero: same row/column
• Examples:
– ActiveCell.Offset(1,0).Value = 2
' right below
– ActiveCell.Offset(-1,0).Value = 15 ' Right above
http://blackboard.umbc.edu
The Offset Property (2)
•
•
•
•
•
•
•
•
Range(“A5”).Offset(2, 3), which cell?
Answer: D7
Range(“A5”).Offset(0,3), which cell?
Answer: D5
Range("A5").Offset(-3, 0).Font.ColorIndex = 4
Answer: A2 turns green
Font.ColorIndex:
1: Black, 3: Red, 4: Green, 5:Blue, 6: Yellow
http://blackboard.umbc.edu
The End Property
• To select large Ranges – same as using Shift
+ the End-Arrow key combination in Excel
• You don’t need to know the size of the range
• The End property takes one argument –
determines the direction in which the
selection is extended
– xlUp, xlDown, xlToRight, xlToLeft
• Make sure you don’t have empty rows and
columns in your data; otherwise, the End,
Offset, and Cells properties won’t work.
• Anchor cell cannot be merged with any other
cells.
http://blackboard.umbc.edu
The End Property Examples
With Sheet1.Range("A1")
′ A1 treated as an anchor
Range(.Cells(1, 1),
_ .End(xlDown).End(xlToRight)).Select
End With
With ActiveSheet.Range("A1")
Range(.Offset(0, 1), .End(xlToRight)).Name = _
"ScoreNames"
Range(.Offset(1, 0), .End(xlDown)).Name = _
"EmployeeNumbers"
Range(.Offset(1, 1),
_ .End(xlDown).End(xlToRight)).Name = "ScoreData"
End With
http://blackboard.umbc.edu
Exercise
Download Lab2_Student.xls from Blackboard.
1) Use the Offset and End properties of Range object
to name range from A2 to the end of the column
as “NEmployees”, range B1 to the end of the row
as “NScores”, and the rest of the range - B2 to
F19 as “ScoreData”.
2) Do some formatting using the range names and
the With-End With construction: make the font of
the NEmployees Range in bold and blue color;
change the font of the NScores Range to italic, in
red and centralize the text (using the
HorizontalAlignment property).
http://blackboard.umbc.edu
Download