PowerPoint Presentation - Computer Science and Engineering

advertisement
Excel VBA and Macros
• Excel uses a language to implement all of the
functional capability of the application.
• VBA (Visual Basic for Applications) is that
language.
• Use VBA to tell Excel what to do:
– Create your own new functions
– Automate things you do every day
1
Macros
• A macro is a set of instructions you give Excel in the VBA
language i.e. when you create a macro, VBA program code
is automatically generated
• Analogy  Javascript is to HTML as a Macro is to Excel
– Javascript manipulates an HTML webpage
– A Macro manipulates the functionality of Excel
• Stored in the Visual Basic module (example later).
• Automates keystrokes and actions in Excel
• Examples:
–
–
–
–
–
Apply style and formatting
Manipulate data and text
Communicate with data sources (database, text files, etc.)
Create entirely new documents
Any combination, in any order, of any of the above
2
Recording vs. Writing macros
• Recording Macros can be used for simple
repeated tasks
– Simple
– Sometimes unreliable
– Very limited
• Writing Macros can be used for very complicated
tasks
– More complicated to use
– Very Reliable
– Virtually unlimited
3
Recording a Macro
• The easiest way to create a macro is to record a macro
– Excel stores information about each step you take as you perform a series of
commands. You then run the macro to repeat, or "play back," the commands.
• To create a macro, go to View > Macros > Record Macro.
• Specify the following and click OK:
–
–
–
–
Macro name (no spaces)
Shortcut, if desired
Location to store the macro and
Description - a good reminder of what the macro does (not how, just what)
4
Recording a Macro
• Once this is done, all of your actions are recorded – every cell
change, scroll action, window resize, you name it.
• There are a couple of places which indicate Excel is record mode.
– One is by viewing the Macro menu and noting that Stop Recording has
replaced the option for Record Macro.
– The other is in the bottom right corner. The ‘stop’ icon indicates it is in
macro mode and pressing here will stop the recording (likewise, when
not in record mode, this icon will be the Record Macro button, which
you can use instead of going to the Macros menu).
• Once you complete all the actions you want to take, stop recording.
5
GPACalc Recording Macro Overview
•
•
These are the worksheet starting points prior to starting the recording for this
macro
As an overview (do not start yet; wait until next slide), what you want to do is:
–
–
–
–
Copy the SampleTerm! worksheet data setup to a new worksheet
The name of this new worksheet is in cell InputData!B2  SP15
Copy the data from the InputData!A4:C13 to SP15!A7:C16
Determine the formulas needed for SP15!D7:D16 as well as SP15!B1:B4
SampleTerm! starting point for SP15!
InputData!
CoursePoints!
6
GPACalc data and formulas
SampleTerm! starting point for SP15!
InputData!
CoursePoints!
Put formula in D7 (as shown) and copy down to D16
7
GPACalc
Recording the Macro
• Start the recording
– Add Macro Name,
ShortcutKey, Store macro
location, and Description
– Click OK
•
•
•
•
•
•
•
•
Copy InputData!B2
Open new worksheet
Rename it SP15 (i.e. paste)
Copy all of SampleTerm
worksheet to SP15
Copy InputData!A4:C13 to
SP15!A7:C16
Put formula in SP15!D7 and
copy down to D16
Put formulas in SP15!B1:B4
Stop recording
8
GPACalc
Macro
result
New SP15 worksheet
9
Use your first Macro, but wait…
• The problem with running the macro as the file is now is that you already
have all the results in the file that you want i.e. the new worksheet, the
input data copied over, the formulas, etc.
• So, you have to delete the information the macro just added!
– Delete the SP15 worksheet
– Make sure your cursor is where it was originally when you copied SP15 and
any other issues that might have already been done (was the SampleTerm
worksheet already highlighted when you saved it? etc)  if you are not sure,
check the original GPACalc file you downloaded
• Remember, the macro is only going to do what you told it to do
• Save the workbook once it is again in its original starting position
• Close the file – you must exit so that it resets the new worksheet you want
to create as Sheet1 because this is what your VBA code should specify.
10
OK, really, use your first Macro
•
•
To put the macro to use, open the
macro-enabled Excel file which was
created. When you do this, assuming
you have standard security settings
enabled, you will see a warning across
the top of the workbook which says that
macros are disabled.
Go to the Macros icon (under the View
tab) and select View Macros.
– Macros can be malicious.
– Only run macros from trusted sources.
•
In the resulting dialog box, choose the
recorded macro and click Run.
11
Run it one more time
• Exit the file without saving
– You want to get it back to the “template” format i.e.
the environment that was the starting point for the
macro before you started to record it
• Open the file again
• Run the macro using the shortcut:
CTRL-Shift-G
• Exit the file without saving as it is ready to submit
when you are ready to do so.
NOTE: This is an exercise on recording macros.
12
QUESTION
How many times do
you need to actually
get a macro recorded
correctly?! LOL
13
Developer Tab on Ribbon
• To turn on the Developer tab, execute the following steps.
– Right click anywhere on the ribbon, and then click Customize the Ribbon… or
click on the File tab, then choose the Options link and click Customize the
Ribbon
– Under Customize the Ribbon, on the right side of the dialog box, select Main
tabs (if necessary).
– Check the Developer check box.
– Click OK.
14
Developer Tab on Ribbon
• Once you check the Developer box, you can find the Developer tab
next to the View tab on the ribbon.
• When you have the developer toolbar, you'll see the following tab
in the Ribbon
 Notice that the Macros icon on the Developer tab =
Macros icon then drop down View Macros on View tab
 Record Macro is its own icon on the Developer tab =
Macros icon then drop down Record Macros on View tab
15
VBE – Visual Basic Environment
• More to be added soon
16
Red Button Macro
• Step 1. Select any cell and start the
macro recorder
– Developer Ribbon
– Record Macro icon
• Step 2: Give a name to your Macro –
“MakeMeRed”
– No spaces or special characters except
underscore
– Click OK
• Step 3: Fill the current cell with red color
• Step 4: Stop Recording
• Step 5: Assign your Macro to a button
(go to next slide for these directions)
• Step 6: Play with your macro
• Save the file as Lab7RedButton
– Did you forget to save it as a macroenabled file? Be sure to save as macroenabled i.e. extension .xlms
17
Red Button Macro (continued)
Step 5. Assign your Macro to a button
• Choose Insert Icon
• Choose Form Control Button
• Draw a nice rectangle
• On the Assign Macro window
(which automatically pops up)
choose the “MakeMeRed” macro
name and click OK.
• Update the wording on the button
– “Select any cell to be red”
– Click on any worksheet cell
• Click on the button you just drew…
the cell you had clicked on prior to
doing this should turn red.
Highlight a range of cells. Click on
the button…
… go back to previous slide
18
Understanding the MakeMeRed code
• Right click on your current worksheet name - Click on View Code option
• This opens the VISUAL BASIC EDITOR
• Notice the yellow highlighted areas that contain the filename that you just
created and saved
• Select Modules from left side area of VBE
– Click on plus sign and choose Module1
• You can see the VBA Code behind MakeMeRed on the right side
19
MakeMeRed
Macro
Sub MakeMeRed()
'
' MakeMeRed Macro
'
'
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Sub MakeMeRed(): This line tells Excel that we are
writing a new set of instructions. The word SUB indicates
that the following lines of VBA are a sub-procedure (or
sub-routine). Which in computer lingo means, a group of
related instructions meant to be followed together to do
something meaningful. The Sub-procedure ends when
Excel sees the phrase “End Sub”
Lines starting with a single quote (‘): These lines are
comments. Excel will ignore anything you write after a
single quote. These are meant for your understanding.
With Selection.Interior: While filling a cell with Red color
may seem like one step for you and I, it is in fact a lot of
steps for your computer. And whenever you need to do a
lot of operations on the same thing (in this case, selected
cell), it is better to bunch all of them. This is where the
WITH statement comes into picture. When Excel
sees With Seletion.Interior, Excel is going to think, “ok, I
am going to do all the next operations on Selected Cell’s
Interior until I see End With line“
Lines starting with .: These are the lines that tell Excel to
format the cell’s interior. In this case, the most important
line is .Color = 255 which is telling Excel to fill Red color in
the selected cell…. Try 192 or 62.
End With: This marks the end of With block.
End Sub: This marks the end of our little macro named
MakeMeRed().
20
Variables, Conditions and Loops
21
Explaining StoreNuts
• Dim statements: These lines declare the variables we are going to use.
Notice the different data types (Integer, Range etc.) we have used for
various types of data we want to hold.
• For Each store In Range(“C7:C30″): This line is going to tell excel that for
each store (ie cell) in the range C7:C30, we need to repeat the instructions
all the way until Next Store. In our case, Excel is going to repeat for 24
times.
• store.Value = InputBox(“Sales for Store ” & storeNum): This line shows a
small box to you and asks for your input. You can enter a number and
press OK (or enter). Whatever value you enter will be placed in current
store’s cell.
• reason = InputBox(“Why are the sales deviated?”, “Reason for
Deviation”, “Reason for Deviation”): This line shows a box to user with a
title and default value (Reason for deviation).
• store.Offset(,1).value = reason: This statement places the reason for sales
deviation in to the cell right to the store sales. Offset(,1) does the trick
here
22
Create and Use variables in VBA
23
24
25
Referencing individual cells/ranges
26
Referencing individual cells/ranges
27
Changing Cell Properties
Worksheets(“Sheet Name”).Cells(Row, Column).Property
ALL PROPERTIES OF CELLS including
• Font Color, Font Type, Font Size
–
–
–
–
.Font.Color=vbRed
.Font.Color=RGB(10,255,200)
.Font.Name=“Arial”
.Font.Size=16
• Cell Border Type
– .Borders(xlBottom.LineStyle=xlDouble
• Border Color
– .Borders.Color=vbGreem
• Interior Cell Color
– .Interior.Color=vbBlue
– .Interior.Color=RGB(255,10,100)
• Values
– .Value=“ABCD”
– .Value=123
– .Value=sin(2*3.14159*Worksheets(“Sheet1”).Cells(1,2).Value))
• Formula
– .Value=“=sum(A1:A5)”
– .Formula=“=sum(A1:A5)
– .FormulaArray=_”=Sum(R4C5:R7C9)”
28
Subroutines & Sheet/Event-Driven Subroutines
• All code you write will be part of a macro (or a
subroutine)
• All subroutines are either GENERAL or SHEETrelated (or Workbook-related)
Subroutines
• Subroutines in Excel will belong to one of the
items
– The workbook (meaning all sheets in the file)
• Workbook-related subroutines are activated when an event
occurs in any different sheets or the workbook itself (for
example: when a sheet is double clicked, when the workbook
is opened, …)
• General workbook subroutines are activated manually and
have access to all sheets of the workbook
– One sheet in the workbook (for example, the sheets
here are “Sheet1”, “Data”, “Results”)
• The name of the sheets appear in parenthesis “(…)”
• Worksheet-related subroutines are activated when an event
occurs in that particular sheet
(for example: when that sheet is double clicked, when that
sheet is activated, …)
• General worksheet subroutines are activated manually and
have access to all sheets of the workbook
29
General Subroutines
•
If declared as PUBLIC (default if not provided):
– Appear as macros with the same names as the subroutine names,
– Can be accessed from Public or Private subroutines of the same sheet or other sheets
– Example: Assuming Sub belongs to “Sheet1”, macro will be “Sheet1.XYZ” :
•
If declared as PRIVATE:
– Do not appear as macros (used to implement small tasks that do not qualify as complete
processes),
– Can be accesses from Public or Private subroutines of the same sheet but not of other sheets
– Example (Assume Sub belongs to “Sheet2”):
•
30
Sheet Subroutines
• Are ALL private to a specific sheet:
• Cannot be activated manually, but must be activated by
one of the EVENTS:
– Activate: Sub executed when the sheet is activated (switch from
any sheet to the sheet containing the macro),
– Deactivate: Sub executed when the sheet is deactivated (switch
from sheet containing macro to another sheet),
– BeforeDoubleClick: Sub executed when sheet is double-clicked
(Arguments passed to Sub are Target.Row & Target.Column)
– BeforeRightClick: Sub executed when sheet is right-clicked
(Arguments passed to Sub are Target.Row & Target.Column)
– Calculate: Sub executed when any calculation is done in sheet
– Change: Sub executed when any modification is done to sheet
(Arguments passed are Target.Row & Target.Column)
– SelectionChange: Sub executed when the another cell is
selected in sheet (Arguments passed are Target.Row &
Target.Column)
31
Helpful Functions in VBA for Excel
•
•
•
•
•
•
•
•
To comment a statement, use ‘ (a single quotation mark) before the statement
To set or get a property of a cell or range of cells in the same sheet that the subroutine
belongs to
– Worksheets(“Sheet Name”).Cells(Row, Column).Property
– Worksheets(“Sheet Name”).Range(Cells(R1,C1),Cells(R2,C2)).Property
To set or get a property of a cell or range of cells in a sheet other than the one that
subroutine belongs to
– Worksheets(“Sheet Name”).Cells(Row, Column).Property
 Same as above
– Worksheets(“Sheet Name”).Range(Worksheets(“Sheet
Name”).Cells(R1,C1),Worksheets(“SheetName”). Cells(R2,C2)).Property
To clear contents of a cell or range of cells, simply change “.Property” above to
“.ClearContents”.
To switch from once sheet to another, sheet called SheetName, use
Worksheets(“SheetName”).Activate
To Copy part of “Sheet1” to “Sheet3”, use the two statements
Worksheets(“Sheet1”).Range(Worksheets(“Sheet1”).Cells(3,4)
Worksheets(“Sheet1”).Cells(8, 9)).CopyWorksheets(“Sheet3”).Paste
To set the interior color of a cell or range of cells, change “.Property” above to
“.Interior.Color = RGB(Red_Value, Green_Value, Blue_Value)”.
To set the font type of a cell or range of cells to “Arial” for example, change “.Property”
above to “ .Font.Name = “Arial” ”.
32
Helpful Functions in VBA for Excel
•
To set multiple properties of the same cell or range of cells use the “WITH” statements
With Sheet2.Range(Cells(3, 6), Cells(8, 12))
.Font.Name = "Arial“
.Font.Size = 14
.Font.Color = vbBlue
.Value = “HELLO”
‘ Set value
End With
•
‘ Set Font
‘ Set Font size
‘ Set Font color
To let Excel read a cell, use (a text-to-speech/speech-to-text engine comes built in with Windows XP, (and I
am sure with Windows Vista too). This engine is the one that actually reads the data).
Application.Speech.Speak Worksheets(“Sheet Name”).Cells(R,C).Value
•
To email the active workbook (the file currently open) to someone, use
ActiveWorkbook.SendMail recipients := "wajih@kfupm.edu.sa"
To be continued…
33
34
VBA test questions
• http://www.excelitems.com/2010/12/excel-vba-interviewquestions.html
• http://macromatician.blogspot.in/2013/10/excel-vbamacros-interviewquestions.html#_methods=onPlusOne%2C_ready%2C_clos
e%2C_open%2C_resizeMe%2C_renderstart%2Concircled%
2Cdrefresh%2Cerefresh%2Conload&id=I0_1389263939734
&parent=http%3A%2F%2Fmacromatician.blogspot.in&pfna
me=&rpctoken=74810093
• http://macromatician.blogspot.in/2014/01/excel-vbamacros-interview-questions_10.html
• http://www.globalguideline.com/interview_questions/Que
stions.php?sc=VBA
35
Command Button
•
•
•
•
Make sure your file is saved as a Macro Enabled file
On the Developer tab, click Insert
In the Form Controls group, click Command Button
Move your cursor to the Excel worksheet
–
–
–
–
Size the command button
An Assign Macro window is displayed
Notice the name of the macro
Click the “New” button to the right
• The Visual Basic editor appears
– Between the two lines in the right window type:
• Range(“A1”).Value = “O-H… I-O”
• Close the Visual Basic Editor.
• Click the command button on the sheet (make sure
Design Mode is deselected).
36
 The window on the left with the names Sheet1, Sheet2 and Sheet3 is called the Project
Explorer. If the Project Explorer is not visible, click View, Project Explorer.
 To add the Code window for the first sheet, click Sheet1 (Sheet1).
37
Assign a Macro to the Command Button
• Right click CommandButton1 (make sure Design Mode
is selected).
• Click View Code.
• Name the macro CB1.
38
Macro
A series of commands and functions that are stored in a
Microsoft Visual Basic module
• Automates your keystrokes and actions in Excel
• Use these when you complete the same tasks repetitively
• When you create a macro, VBA program code is automatically
generated
39
Record Macro
Click on Record Macro
Click on Developer
40
Macro Walk Through
Step 1: Delete the information in cells B1 and B2
Step 2: In Cell B1, Input the following Function
=CONCATENATE(LEFT(A1,3),”-”, MID(A1,4,3),”-”,MID(A1.7,4))
Step 3: In Cell B2, Input the following Function
=LEFT(A1,3)
Step 3: See next Slide
41
Macro Walk Through
Step 4: Display Message: File has been Updated!
Click on View
Double click on Module1
Click onProjectExplorer
42
Type this line at the
beginning of the VBA Code
Type these two lines at the
end of the VBA Code
Click on Stop Recording
43
Download