visual basic rosalind archer spring 2002. 1.1 1 2 3 % + k running visual basic visual basic is...
Post on 20-Dec-2015
218 views
TRANSCRIPT
1.2
1
2
3
%
+
k
Running Visual Basic
• Visual Basic is included with Microsoft Excel. My examples use Excel ‘97.
• When you open a file containing Visual Basic code make sure you choose “Enable Macros”.
1.4
1
2
3
%
+
k
To access the Visual Basic code used in any spreadsheet choose Tools->Macro->Visual Basic Editor (or hit Alt+F11)
1.6
1
2
3
%
+
k
Modules
• Visual Basic code can be divided into a series of “modules”. To start new program you need to insert a new module:
1.7
1
2
3
%
+
k
VB as an Extension of Excel
• Excel has many built in functions sin(), cos(), sum(), sqrt() etc.– what if you wanted to add your own
functions?– Visual Basic allows you to do that.
Let’s add a function which computes relative permeability.
1.9
1
2
3
%
+
k
Using the Function in Excel
Now that the function is defined we can use it like any other Excel function.
1.10
1
2
3
%
+
k
The Visual Basic Language
• Comments … statements that allow the programmer to describe what a piece of code does.
• Begin with an ‘
• Shown in green automatically
1.11
1
2
3
%
+
k
Comments• Comments are important!
• They provide English language statements to describe what the computer code is doing.
• Make liberal use of comments - it will help you and others understand your program.
1.12
1
2
3
%
+
k
Variables
• Variables are labels assigned to numeric values (we’ll ignore text for now). You can manipulate them in algebraic expressions.
• It’s a good idea tell the program what variables you’re going to use ahead of time. This can be enforced using:
1.13
1
2
3
%
+
k
Variable Types
• Variables all have a type associated with them. The types will be using are integers and doubles.– Integers ..,-1,0,1,2,3 …– doubles -1.89475, 2.0, 3.498 etc
• Variables are declared using the statement Dim.
1.14
1
2
3
%
+
k
Declaring Lots of Variables
Dim a,b,c,d As Integer• This might look like a good idea to save
some typing (and in some languages stuff like this works.)
• In Visual Basic only d would be declared correctly. a,b and c would exist but may not have the correct type.
1.15
1
2
3
%
+
k
Combing Integers and Doubles
• Be careful with the difference between integers and doublesDim n As Integer
n = 4/3
The value that n will actually take is 1 because that is the nearest integer to 4/3 = 1.3333
1.16
1
2
3
%
+
k
• Visual Basic adds a # sign to doubles that have fractional part e.g.:
Dim dx As Double• If you type dx = 1.0
Visual Basic will change this to
dx = 1#
1.17
1
2
3
%
+
k
Converting Variable Types
• Sometimes we want to convert an integer (such as a counter in a For loop) to a double.
• The CDbl function does this.
Dim x As Double
Dim I As Integer
x = CDbl(I)
1.18
1
2
3
%
+
k
Constants
• If we want to define a constant we can use the keyword Const
Const g As Double = 9.81
1.19
1
2
3
%
+
k
Arrays
• We can store matrices and vectors in array variables. Declaring them is a two step process.‘This code solves Ax=bDim A() As Double, x() As Double, b() As DoubleReDim A(10,10), x(10), b(10)
• Do NOT assume that the elements in matrix are set to zero after it is declared. This can get you into trouble!
1.20
1
2
3
%
+
k
Array Elements
• The elements in the array can be accessed using ( , ) e.g.:A(2,3) = 4.4
• Note that the indices start from 1 i.e. A(1,1) is the first element in the matrix (some other languages have indices which start from 0)
1.21
1
2
3
%
+
k
Intrinsic Functions• Visual Basic has many common functions built in e.g.:
Dim f As Double, x As Double
f = Log(x)
Note that in Log(x) is the natural log
not log base 10.
1.22
1
2
3
%
+
k
Input and Output to/from Excel
• We’ll use a worksheet to supply the input to the program and to display the output.
• Note the a single workbook (.xls file) can have several worksheets inside it e.g.:
1.23
1
2
3
%
+
k
• Before we do any input/output we have to choose which worksheet to work with, e.g. to choose the “Results” sheet:With Worksheets(“Results”)
…
End With
• Within the With statement we can read or write values from/to the worksheet.
1.24
1
2
3
%
+
k
• We can read or write text and numbers in the same way:
.Cells(1, 1) = "Time” ‘ Writes to A1
.Cells(1,2) = delx ‘ Writes to cell B1
x = .Cells(1,3) ‘ Reads from cell C1
• If you a certain sheet to come to the frontof the workbook you can activate it.This is just like clicking on its tab. The statement involved is:
.Activate
1.25
1
2
3
%
+
k
• Another useful function is clearing all the cells in a worksheet:.Cells.ClearContents
• All statements beginning with . must be inside With/End With
1.26
1
2
3
%
+
k
Conditional Statements
• If, then, else allows us to test a condition and do something as a result:
If x<10 Then
y = 10.3
Else
y = 0.5
End If
1.27
1
2
3
%
+
k
Looping
• Loops are used to execute a piece of code repetitively. There are two main kinds For and While.– For executes a set number of times– While executes until a condition
remains true.
• Both kinds of loops are very useful.
1.28
1
2
3
%
+
k
Example - For Loop
Dim i As Integer
For i=1 to nx
x = x + dx
...
Next i
• Loops can be nested
inside each other e.g.:
For i=1 to N
For j=1 to N
A(i,j) = 0
Next j
Next i
1.30
1
2
3
%
+
k
User-defined Functions
• Visual Basic has plenty of common functions but often it’s a good idea to define your own if there is somethng you need to compute often (such as relative permeability):
Function krw(Sw As Double) As Double
krw = Sw^2.0
End Function
(A function could have several arguments)
1.31
1
2
3
%
+
k
Function Arguments
• The parameters passed to a function are known as arguments.
• You don’t have pass arguments with the same names as the ones in the function declaration e.g.
‘This function uses interpolation to evaluate y(xTarget)‘ given known x and y vectors
Function Interpolate(x() As Double, y() As Double, _xTarget As Double) As Double
1.32
1
2
3
%
+
k
Function ArgumentsDim y1 As Double
Dim x1 As Double
Dim x2 As Integer
Dim x() As Double
Dim y() As Double
y1 = Interpolate(x,y,x1) ‘ OK
y2 = Interpolate(x,y,x2) ‘ Not OK
This doesn’t work because x2 is a different type to xTarget.
1.33
1
2
3
%
+
k
Subroutines
• Subroutines are a way to divide a program into pieces where each piece performs a well defined task.
• Using subroutines makes your program much easier to understand!
• Your whole program can be written as a subroutine called when you push a button on a worksheet.
1.34
1
2
3
%
+
k
Example - Subroutines
• In a reservoir simulator we need to form a matrix (A) which depends on dx and dt (among other things).
Sub BuildA(A() as Double, dx as double, dt As Double)
A(1,1) = 1.0/dt
…
End Sub
1.35
1
2
3
%
+
k
Example - Subroutines
• When we are ready to use a subroutine use the statement “Call”
Call BuildA(A,dx,dt)
1.36
1
2
3
%
+
k
The Visual Basic Editor
• If you type something VB doesn’t like it will tell you!
• Visual Basic Editor automatically colors text according to the following scheme:Green = comments
Blue = VB keyword (For, While etc)
Black = everything else
Red = errors
1.37
1
2
3
%
+
k
Indenting
• It’s a good habit to indent code so you can see the connection between For-Next, If-End If etc.
For i = 1 to 10
For j = 1 to 10
A(i,j) = 0.0
Next j
Next i
1.38
1
2
3
%
+
k
• Here’s an example of a statement Visual Basic didn’t like.
– What’s wrong with it?
1.39
1
2
3
%
+
k
Long lines of code
• Lines of code can be as long as you like. But to make code easier to read it is wise to break long lines up using a continuation character ( _ ).
Product = a*b*c*d*e*f*g*h*i*l*j*k*l*m
orProduct = a*b*c*d*e*f*g*h _
*i*j*k*l*m
1.40
1
2
3
%
+
k
Running the Program
• If everything goes to plan running the program is as simple as clicking the button for it on the worksheet!
• There is no need to “compile” or “link” the program after you edit it.
• If something goes wrong when you run your program you’ll get a message.
1.41
1
2
3
%
+
k
Example
error message ->
The problem
will be highlighted
in yellow. You can edit the code and
rerun your program. But first you must
“reset” it using Tools->Reset in VB.
1.43
1
2
3
%
+
k
Debugging
• When a program
crashes VB
will show you the
value of a
variable if you hold your cursor over it.
Here I was dividing by zero - always a bad thing to do!
1.44
1
2
3
%
+
k
Breakpoints
• By right clicking in
the grey bar by the
code you can set a
breakpoint.
• When the code gets
to this point it will
stop and let step through examining
variable values.
1.45
1
2
3
%
+
k
Watches
• The red dot and highlight show this is a breakpoint.
• Debug->Add Watch adds variable to the bottom window to watch. If you click on the + sign by “b” you can see the values of all the elements in the vector.
1.46
1
2
3
%
+
k
Stepping
• To step through code line by line from a breakpoint (watching variables) use:– Debug->Step IntoDebugs into functions and subroutines as
they are called.
– Debug->Step OverDoes not debug into functions and subroutines as
they are called.
– Debug->Step OutQuits debugging a subroutine or function.
1.47
1
2
3
%
+
k
Adding buttons to worksheets
• If you want to add a new button to a worksheet, choose View->Toolbar->Forms.
1.48
1
2
3
%
+
k
• Choose the button icon
from the toolbar and
drag an area in the
worksheet to create the
button.