c# pdf library github : Add metadata to pdf SDK control service wpf web page winforms dnn Wiley%20Advanced%20Modelling%20in%20Finance%20using%20Excel%20and%20VBA5-part600

Introduction to VBA
43
Or if the actions are to take place on the currently active sheet,ActiveSheet. can be used
instead ofSheets(“Inputs”).
The forgoing examples illustrate the type of code which Excel’s recorder wouldgenerate
in response to actual keystrokes. Contrast it with the code for the subroutine Factorial
below. This subroutine computes a factorial (denoted fac) for the number in cell B5
(referred to as num) and enters the result in cell C5. It has two new features. Firstly, the
code uses variables, i, fac and num, which subsequently are assigned values. Secondly,
the factorial is computed by repeated multiplication in a For...Next loop with index i.
(The counter i starts at value 1 and increases by 1 each time it passes through the loop
until its value goes above the upper limit, num.)
Sub Factorial()
’calculates the factorial ofa number inB5
num = Range(“B5”).Value
fac = 1
For i = 1To num
fac = i * fac
Next i
Range(“C5”).Value= fac
End Sub
Other than using and returning values to the spreadsheet, this code is straightforward
Basic and has little to do with Excel per se. This type of code must be entered manually.
3.3.2 MsgBox for Interaction
In general, a subroutine gets its input either from spreadsheet cells or from the user (via
the screen) and its outputs are either pasted into the workbook or displayed to the user.
Two useful display screens are generated by the VBA built-in functions, MsgBox() and
InputBox(). The simpler of these, MsgBox(), displays a message on screen then pauses
for user response, as is illustrated below:
Sub MsgBoxDemo1()
MsgBox “Click OK to continue”
End Sub
The message (or ‘prompt’) is within the quotation marks and must be present. Brackets
around the prompt are optional in this simple instance of MsgBox. However, when an
answer is required from MsgBox, the brackets are required to indicate that MsgBox is
being used as a function. The MsgBox display can be made more useful if a variable
is ‘concatenated’ (or ‘chained’) on to the prompt using ampersand (&). For example, in
the Factorial subroutine, the result could be communicated to the user with the state-
ment:
MsgBox “Factorial is ”& fac
as in the code below. In this version, the user supplies the number via an InputBox. This
VBA function pops up a dialog box displaying a message and returns the user’s input,
here called num. The argument in the InputBox syntax below is the message displayed,
also known as the ‘prompt’. Here InputBox has brackets to indicate it is being used ‘as
afunction’, that is, to return an answer, num. The factorial is built up multiplicatively in
aFor...Next loop:
Add metadata to pdf - add, remove, update PDF metadata in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Allow C# Developers to Read, Add, Edit, Update and Delete PDF Metadata
remove pdf metadata online; pdf xmp metadata editor
Add metadata to pdf - VB.NET PDF metadata library: add, remove, update PDF metadata in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Enable VB.NET Users to Read, Write, Edit, Delete and Update PDF Document Metadata
edit pdf metadata online; delete metadata from pdf
44
Advanced Modelling in Finance
SubFactorial()
’calculates the factorial of a number
fac = 1
num = InputBox(“Enter number ”)
For i = 1 To num
fac = i * fac
Next i
MsgBox “Factorial is ”& fac
EndSub
We use this simple factorial example to explore elements of programming macros in
section 3.4.
3.3.3 The Writing Environment
The Visual Basic Editor (referred to as the VBE) is where subroutines are written, tested
out and debugged. We assume Excel’s workbook environment, its menu, commands and
toolbars are familiar territory. When developing VBA procedures, it helps to have Excel’s
Visual Basic toolbar visible in the Excel window (shown in Figure 3.1). As with other
toolbars, this has buttons which are programmed to carry out sequences of relevant menu
commands, here Tools Macro commands such as Run Macro, Record Macro and the VBE
(first, second and fourth from left), etc.
Figure 3.1 Excel’s Visual Basic toolbar
VBA code is written (or recorded) not in worksheets but in Module sheets. In Excel 97
(and subsequent versions) these appear in a different window, the Visual Basic (VB)
window, and the process of developing macros involves switching to and fro between the
Excel and VB windows (using the keystroke combinations AltCTab or AltCF11) or the
equivalent buttons.
To try this out for yourself, open a new workbook in Excel, choose Tools then Macro
then Visual Basic Editor to go to the VB window. (Or simply click the VBE button on
the VB toolbar.) The VB window consists of the Project Explorer and the Properties
window as well as the Code window (which is not usually present until the workbook has
Modules). The Code window is where programs are written and/or keystrokes recorded.
From the VB window you can refer to the Excel Object Browser to check the correct
VBA syntax to accompany specific objects. (In the VB window, choose View to access
the Object Browser, then choose Excel in the top left-hand References textbox.)
The VBE also contains numerous debugging and editing tools that can be accessed
from its command bar or via its own specialist toolbars. More detail on the Visual Basic
Environment is at the end of the chapter in Appendix 3A (and could be skimmed now).
3.3.4 Entering Code and Executing Macros
VBA code is entered on a Module sheet. To add one to the workbook, on the VB window
menu, choose Insert then Module to get a blank module sheet in the Code window. Begin
VB.NET PDF insert image library: insert images into PDF in vb.net
VB.NET PDF - Add Image to PDF Page in VB.NET. Guide VB.NET Programmers How to Add Images in PDF Document Using XDoc.PDF SDK for VB.NET.
read pdf metadata java; remove metadata from pdf file
C# PDF Password Library: add, remove, edit PDF file password in C#
C# Sample Code: Add Password to PDF with Permission Settings Applied in C#.NET. This example shows how to add PDF file password with access permission setting.
get pdf metadata; pdf metadata extract
Introduction to VBA
45
typing in the Code window, for example:
Sub MsgBoxDemo()
MsgBox “Click OK to continue”
End Sub
At the end of the first statement, when you press Enter, Excel adds theEndSubstatement.
You may also notice the ‘quick information’ feature, which assists with the entry of
recognisable bits of syntax.
There are several ways to run the subroutine:
ž From the Code window, with the pointer positioned anywhere in the body of the
routine’s code, choose Run then Sub/UserForm (alternatively click the Run button on
the VB Standard toolbar underneath the VB window menu).
ž From the Excel window, choose Tools then Macro then Macros, then select
MsgBoxDemo macro and Run it or click on the VB toolbar Run button.
ž You can also execute the macro using a chosen keyboard shortcut (for example, the
combination of CtrlCShiftCG) or, if you’re really trying to impress, link the macro to
abutton on the spreadsheet.
When you run your code, execution may stop if a run-time error occurs. The ensuing
dialog box suggests the nature of error, although for novice programmers the comments
are somewhat opaque. Having noted the error message, on clicking OK the cursor jumps
to the statement containing the error and the subroutine declaration statement is shown
highlighted (in yellow). Having corrected the error, to continue execution, click Reset on
the Run menu (or the Reset button with a black square) to remove the yellow highlight
and run the macro again.
For further practice, enter the Factorial subroutine in the updated form given below. In
this version, the loop has been replaced by the Excel function FACT, which calculates
factorials. Note that to use Excel’s functions in VBA code, it is sufficient to preface the
function name FACT with Application. (or WorksheetFunction.):
Sub Factorial()
’calculates the factorial of anumber
num = InputBox(“Enter integer number ”, “Calculate Factorial ”)
fac = Application.Fact(num)
MsgBox “Factorial is ”& fac
End Sub
To avoid the memory overflowing, run subroutine Factorial with integer numbers less
than 25 say.
Both these simple macros have to be entered manually. However, the code for many
operations can be generated by Excel’s macro recorder, so next we explore this other
approach to macro writing.
3.3.5 Recording Keystrokes and Editing Code
The recorder translates keystrokes into VBA code and has two modes when interpreting
cell addresses: its default mode (absolute references) and the relative references mode.
Initially you will almost always use the recorder with absolute references, however
detail on the alternative mode is given at the end of the chapter in Appendix 3B. As
C# PDF Sticky Note Library: add, delete, update PDF note in C#.net
C#.NET PDF SDK - Add Sticky Note to PDF Page in C#.NET. Able to add notes to PDF using C# source code in Visual Studio .NET framework.
embed metadata in pdf; c# read pdf metadata
C# PDF Library SDK to view, edit, convert, process PDF file for C#
PDF SDK for .NET allows you to read, add, edit, update, and delete PDF file metadata, like Title, Subject, Author, Creator, Producer, Keywords, etc.
add metadata to pdf programmatically; rename pdf files from metadata
46
Advanced Modelling in Finance
an illustration, a simple macro entering data into cells B8:C10 will be recorded in the
absolute (default) mode.
The macro recorder is invoked from the Excel window by choosing Tools, then Macro
then Record New Macro. Give the macro a name, sayEntries, then click OK. (Alter-
natively, start recording by clicking the Record Macros button on the VB toolbar.) The
Stop Recording button appears on a small toolbar (together with the Relative References
button). The Relative References button should not be ‘pressed in’.
In the sheet, select cell B8 and enter JAN in B8; move down to B9, enter FEB in B9;
move down to B10 and enter Total. Then changing to column C, select C8, enter 300;
select C9, enter 400; select C10, entering the formula DSUM(C8:C9) in the cell and click
Stop Recording. Click the VBE button to see the code recorded from your keystrokes in
the Code window. Hopefully, it should be similar to the code below:
SubEntries()
’entering data using absolute addresses
Range(“B8”).Select
ActiveCell.FormulaR1C1 = “JAN”
Range(“B9”).Select
ActiveCell.FormulaR1C1 = “FEB”
Range(“B10”).Select
ActiveCell.FormulaR1C1 = “Total”
Range(“C8”).Select
ActiveCell.FormulaR1C1= “300”
Range(“C9”).Select
ActiveCell.FormulaR1C1= “400”
Range(“C10”).Select
ActiveCell.FormulaR1C1= “=SUM(R[-2]C:R[-1]C)”
Range(“C11”).Select
EndSub
When a cell is ‘selected’, it becomes the ActiveCell (a property of the Application object
which returns a range). The entries are made using ActiveCell.FormulaR1C1 to put the
entries into cells B8 to C10. When you run the macro, by switching to Excel and clicking
the Run Macro button (or from the Code window with Run then Sub/UserForm), notice
that the macro always produces the same results, i.e. it always fills the range B8 to C10.
For a VBA novice, the best approach is to record keystrokes to suggest code, then edit
to improve, make more concise, and generalise the code. The combination of recording,
editing and testing out code is a practical approach. Recorded code can produce excellent
results when the actions required consist of sequences of menu commands, as for example
in producing a chart of some data, doing a data sort or specifying pivot tables, etc. The
recorder produces concise code encapsulating quite complex instructions. In contrast, if
the actions recorded are mostly a sequence of cursor moves, the recorder generates very
verbose code. The best approach in this instance is to write the code, or record bits and
edit the results.
As an illustration, look back at the code generated for the Entries macro. Recorded
code always includes much ‘selecting’ of cells, but when writing code it is not necessary
to explicitly select cells to enter data into them. The following edited version of the code
performs the same operations but is more concise:
SubConciseEntries()
’entering data using absolute addresses
Range(“B8”).Formula = “JAN”
VB.NET PDF Library SDK to view, edit, convert, process PDF file
Various of PDF text and images processing features for VB.NET project. Multiple metadata types of PDF file can be easily added and processed. PDF Metadata Edit.
adding metadata to pdf; add metadata to pdf
C# PDF insert image Library: insert images into PDF in C#.net, ASP
C#.NET PDF SDK - Add Image to PDF Page in C#.NET. How to Insert & Add Image, Picture or Logo on PDF Page Using C#.NET. Add Image to PDF Page Using C#.NET.
remove metadata from pdf; remove metadata from pdf acrobat
Introduction to VBA
47
Range(“B9”).Formula = “FEB”
Range(“B10”).Formula = “Total”
Range(“C8”).Formula = “300”
Range(“C9”).Formula = “400”
Range(“C10”).Formula = “=SUM(C8:C9)”
End Sub
In fact for a single cell range object, it turns out to be unnecessary to specify the Formula
property, so the code is simply:
Sub Entries()
’entering datausing absolute addresses
Range(“B8”) = “JAN”
Range(“B9”) = “FEB”
Range(“B10”) = “Total”
Range(“C8”) = “300”
Range(“C9”) = “400”
Range(“C10”) = “=SUM(C8:C9)”
End Sub
Apractical way to tidy up generated code is to comment out (add apostrophes in front
of possibly) redundant statements, then test by running the macro to see the effect.
When developing code, it frequently helps to display messages about the stage of
processing reached, particular intermediate values in calculations, etc. The VBA MsgBox
function is invaluable for this. At the editing stage it helps to add comments concisely
describing the action performed by the macro, together with any unusual features or
requirements. More importantly, any useful possibilities for generalising the scope of the
code should be explored.
For reference, all the macros discussed in this section are stored in ModuleA and can
be run from the IntroEx sheet of VBSUB.
Reviewing the Factorial subroutine developed in the previous paragraphs, it is clear
that code of this type with its use of variables and a For...Next loop will never result
from recording keystrokes. It has to be entered manually. Therefore, some guidelines
for conducting this more conventional type of programming are set out in the following
section.
3.4 ELEMENTS OF PROGRAMMING
In the financial modelling context, much of the code you will want to write will have
as its objective the control of numerical calculations. This involves assigning variables,
applying proper control structures on the flow of processing and reporting results. These
tasks are common to programming whatever the language. VBA programs differ only in
that they often originate from spreadsheet models, where tasks are performed by menu
commands and where crucial calculations are in cell formulas, many involving Excel
functions. Fortunately, it is easy to incorporate Excel functions in VBA code. Rather than
replace the spreadsheet model, VBA programs increment or enhance their functionality.
We briefly review a few relevant aspects of programming concerning the use of variables,
in particular array variables, structures that control the flow of processing and the use of
Excel functions in VBA.
C# TIFF: TIFF Metadata Editor, How to Write & Read TIFF Metadata
You can also update, remove, and add metadata. List<EXIFField> exifMetadata = collection.ExifFields; You can also update, remove, and add metadata.
clean pdf metadata; acrobat pdf additional metadata
VB.NET PDF Password Library: add, remove, edit PDF file password
VB: Add Password to PDF with Permission Settings Applied. This VB.NET example shows how to add PDF file password with access permission setting.
read pdf metadata online; pdf metadata editor online
48
Advanced Modelling in Finance
3.4.1 Variables and Data Types
In programming, variables are used to store and manipulate data. Conventionally, data
comes in different forms or ‘types’ and this influences the amount of memory allocated
for storage. In most numerical calculation, the main distinctions are between numbers
(conventional decimal system numbers otherwise known as scalars), integers, Booleans
(True or False), and dates. There are also string variables that hold textual as opposed to
numerical information. VBA has a useful data type, variant, which can represent any data
type. It is the default data type, which can be useful when a variable’s type is uncertain.
However, the variant type consumes additional memory, which can affect processing
speeds if large amounts of numerical processing are required. There is also an ‘object’
variable type which can refer to an object such as a range or a worksheet. See Green
(1999) for more details of the different data types.
From the viewpoint of novice VBA programmers, it is important to explicitly declare
all variables used, as this cuts down errors in coding. This can be forced by ensuring
that the Option Explicit statement is included at the top of each Module sheet. (The VBE
can be set up to ensure that this happens automatically–via Tools then Options on the
VB menu, then checking the ‘Require Variable Declaration’ code setting.) At run-time,
the VBA compiler produces an error message if any undeclared variable is encountered.
This is particularly useful in detecting mis-spelt variable names in the code. Declaring
the data type (as integer, string, Boolean, etc.) is less important in the financial modelling
context, but it can be used as a way of indicating (to the user) a variable’s purpose in
the program.
Variables are declared with the Dim keyword as shown in the third statement of the
Factorial subroutine. Here, the two variables have been declared but not data-typed (as
integer say). By default they are variant in type:
SubFactorial()
’calculates the factorial of a number
Dimfac, num
num = InputBox(“Enter number ”, “Calculate Factorial ”)
fac = Application.Fact(num)
MsgBox “Factorial is ”& fac
EndSub
(As an aside, notice that InputBox(), which returns the user’s input, has two input param-
eters or ‘arguments’ here. The first argument is the prompt ‘Enter number ’, the second
(optional) argument is the title of the dialog box.)
In summary, all variables used in subroutines should be explicitly declared using the
Dim keyword. The statement Option Explicit at the top of a Module sheet ensures that
all variables must be declared for the subroutine to work correctly.
3.4.2 VBA Array Variables
Where sensible, variables can be grouped by name into arrays (vectors or matrices). For
example, the quartiles of the cumulative distribution of a data set can be represented
by the array variable, qvec(). Individual elements of the array are referenced as qvec(0),
qvec(1), etc. Using the log returns data discussed in the previous chapter, Figure 3.2 shows
the quartiles calculated with the Excel QUARTILE function in cells H21:H25, with the
first and last Q points being the minimum and maximum of the data set, 0.043 being
Introduction to VBA
49
the value below which 25% of the data falls, etc. So array qvec() could take its values
from the cells in range H21:H25, with qvec(0) taking value 0.153, qvec(1) taking value
0.043, etc.
18
19
20
21
22
23
24
25
26
27
28
29
F
G
H
I
J
K
L
M
N
O
P
Q
Quartiles:
quart no. Q points
Q %
0
-0.153
0%
1
-0.043
25%
2
0.028
50%
3
0.075
75%
4
0.193
100%
Cumulative Frequency from quartiles
0%
25%
50%
75%
100%
-0.20
-0.10
0.00
0.10
0.20
ln(return)
Figure 3.2 Quartile values for log returns data as in Data sheet of VBSUB
Extending the idea, array variables can have several dimensions, e.g. the two-dimensional
array variable PQmat() could represent a 5 by 2 array consisting of a column of quartiles
and a column of the corresponding ‘left-hand side’ percentages of the distribution. For
example, array variable PQmat() could take its values from the 5 by 2 cell range H21:I25
shown in Figure 3.2. Although there are few rules for the names given to array variables,
it is helpful to choose names that distinguish between arrays with one dimension (vectors)
and two dimensions (matrices). Hence our use of names such as qvec and PQmat.
As with other variables, array variables should be declared before use in the subroutine.
By default, VBA numbers its arrays from 0. So the array qvec(), if declared in the
statement:
Dim qvec(4)
will consist of five elements. By extension, the two-dimensional array for two rows and
four columns of quartiles and percentages, PQmat(), if declared in the form:
Dim PQmat(1,4)
will consist of 10 elements, again assuming the default numbering base for arrays is 0.
If you want VBA to use 1 as the lowest index, you must state Option Base 1 at
the start of your Module sheet. If this were done, the array variable qvec(4) would have
only four elements, qvec(1), qvec(2), qvec(3) and qvec(4). In fact in most of the VBA
procedures developed in this book, the array base is chosen as 1.
The effect of the Option Base setting is illustrated by the following ArrayBase macro. It
produces different results according to the Option Base statement at the top of its Module
sheet. Since the VBA array function Array() is used to enter the actual array, it is not
necessary to specify in advance the dimensions for array variable avec:
Sub ArrayBase()
’gives b=20 ifOption Base is 1; gives b=30 in absence of Option Basestatement
Dim avec, b
avec = Array(10,20,30)
b= avec(2)
50
Advanced Modelling in Finance
MsgBox “b is ”& b
EndSub
Often, the number of elements required in an array is not known at the outset, but
results from the operations of the macro. This so-called ‘dynamic array’ does not have a
preset number of elements. It is declared with a blank set of brackets, e.g.Dimqvec()or
Dim PQmat().However,beforeusinganynon-dimensionedarray,a ReDimstatementis
used to tell VBA how many elements are in the array. In the example below, the named
range ‘dvec’ contains results that are to be stored in array variable cvec. After declaring
cvec as an array variable, its dimensions are decided by counting the elements of the
named range (dvec), leading to the ReDim statement required before cvec can be used:
SubSelectCount()
’re-Dim dataarray cvec
Dimn, cvec()
Sheets(“Data”).Range(“dvec”).Select
n= Selection.Count
ReDim cvec(n)
EndSub
Working with arrays in VBA is more complicated than using Excel’s array formulas
(such as SUM, SUMPRODUCT and the matrix functions). In some cases, arrayprocessing
can be handled entirely by Excel functions taking array inputs. Note that if individual array
elements do not need to be accessed in the code, the array can be referred to by a variable
name such as qvec, without the requirement to state its dimensions. However, frequently
array processing involves element-by-element operations, which are best handled system-
atically in a loop. In this case, individual qvec(i) elements have to be identified and
typically Dim qvec()and ReDim statements need to be included. The coding requires
much more care if errors are to be avoided. There is also ambiguity about the layout of
VBA arrays constructed by Excel, in particular as to when they are row vectors and when
column vectors. To add possible further confusion, if an array is used as an input to a
procedure, Excel numbers the array elements from 1.
3.4.3 Control Structures
In common with other programming languages, VBA provides several control struc-
tures to sequence the flow of processing. These include conditional statements such as
If...Then...Else, which tests a condition and alters the flow of execution depending on
the result of the test; and Select Case, which selects a branch from a set of conditions
(or cases). A looping structure allows you to run a group of statements repeatedly. Some
loops repeat statements a specific number of times, such as the For...Next loop with its
counter which we have already used to calculate the factorial. Other constructions, such
as the Do While...Loop, repeat statements until a condition is True (or until a condition
is False). We look at simple examples of If...Then in this section, and further examples
of the For...Next loop and the Do While...Loop in the following section. Textbooks
(such as Green, 1999; Walkenbach, 1999; Wells and Harshbarger, 1997) explain these
structures much more extensively and can be referenced for other examples.
As noted in the Factorial subroutine, the VBA interaction function, InputBox, returns
the user’s input. To make our procedure more robust, wrong inputs should be filtered
out and amended inputs requested from the user. One approach is to test the input to
Introduction to VBA
51
check that it is numeric, and to discard it if not. The code below illustrates two uses
of the If...Then structure. The first instance is an in-line If...Then with no additional
conditions on following code lines. This tests the variable numtype (resulting from a VBA
function IsNumeric) and if numtype D True calculates the factorial. The test and ensuing
action are contained in a single code line. In the second case, the structure takes the block
form of If...Then. If the user input is non-numeric, the user is warned and no calculation
takes place. When the conditional statements finish, there is an End If:
Sub Factorial()
’calculates the factorial of anumber
Dim fac, num, numtype
num = InputBox(“Enter number ”, “Calculate Factorial ”)
numtype= IsNumeric(num)
’either True or False
If numtype = True Then fac = Application.Fact(num)
’in-line If Then
If numtype = FalseThen
’block If Then End If
MsgBox(“Not an integer number. Try again”) ’don’t proceed
End If
End Sub
We make much use of If...Then...Else in Chapter 4 on user-defined functions.
3.4.4 Control of Repeating Procedures
The early version of the factorial subroutine (in section 3.3.1) illustrates the simplest type
of repeating procedure, the For...Next loop. As a different example, consider the code
for the Quartiles subroutine below. This calculates the quartiles of a data set (taken from
anamed range, dvec, in the Data sheet of the VBSUB workbook), and displays the results
to the user one-by-one in a sequence of dialog boxes. (You may wish to access this sheet
of VBSUB to follow the argument in the next paragraphs.)
OptionBase 0
Sub Quartiles()
’displays quartiles of range named’dvec’
Dim i As Integer
Dim quart
’toholdthe current quartile
Dim dvec As Variant
’col vec ofdata
’fill array variable dvec from spreadsheet range named dvec
dvec = Worksheets(“Data”).Range(“dvec”)
’calculate quartiles one at a time & display
For i = 0 To 4
quart = Application.Quartile(dvec, i)
MsgBox “Quartile no. ”& i & “hasvalue ”& quart
Next i
End Sub
Inspection of the current range names in the VBSUB workbook, via the commands Insert
then Name then Define shows that the name dvec is attached to the LnReturns data range
in column E of the Data sheet. In the code for the Quartiles subroutine, we also use
the name dvec for the array variable containing the data set values. To indicate (to us)
that dvec is a vector not simply a scalar variable, we declare it as a Variant. Examining
the code, we note that after filling array dvec from the spreadsheet cells, the individual
quartiles are calculated and displayed element-by-element in the For...Next loop. Note
52
Advanced Modelling in Finance
that to use the Excel function QUARTILE in the VBA code, it needs to be prefaced by
Application. or WorksheetFunction., as explained in the next section.
The MsgBox prompt has the values of the For...Next counter and the current quartile
concatenated, which works, but is not the most satisfactory solution for handling output.
We give an improved version of the Quartiles subroutine in section 3.5.
Another useful structure for repeated operations is the Do While...Loop. Repeated
operations continue whilst a condition is satisfied and cease when this is not the case. The
DelDuplicates subroutine, which searches for and deletes duplicate rows in a database,
illustrates the use of the Do While...Loop. Having sorted the database on a specific
‘code’ field, the entries in the code column are processed row-by-row. If the values of the
currentCell and the nextCell are the same, the currentCell row is deleted. Here current-
Cell and nextCell are used as object variables, since they reference objects (here Range
objects). Because they are object variables, their values have to be assigned with the
keyword Set.
SubDelDuplicates()
DimcurrentCell, nextCell
Range(“database”).Sort key1:= Range(“code”)
SetcurrentCell = Range(“code”)
Do While Not IsEmpty(currentCell)
Set nextCell = currentCell.Offset(1, 0)
If nextCell.Value = currentCell.Value Then
currentCell.EntireRow.Delete
End If
Set currentCell = nextCell
Loop
EndSub
This subroutine illustrates some of the advantages of VBA’s online help. This can be
accessed from the VBE, via the Help command and the Help Index. Here the index
entry on Delete Method elicited the above subroutine, which provided exactly the oper-
ation required. Unfortunately, not all queries posed to VBA’s online help are so fruitful,
nevertheless, it contains much useful information on syntax. These sections have only
touched on a few of the most widely used control structures. Other useful sources for
VBA programming techniques are textbooks such as Green (1999), Walkenbach (1999)
or Wells and Harshbarger (1997).
3.4.5 Using Excel Functions and VBA Functions in Code
As seen in the Quartiles subroutine, to use an Excel function in a VBA procedure, you
need to prefix the function name with Application. In Excel 2000, the function name can
be prefixed by WorksheetFunction or Application. For compatibility with earlier versions
of Excel, we continue to use Application. In contrast, VBA functions require no prefix,
as we have seen with MsgBox, IsNumeric, InputBox, etc. In fact, there are relatively
few specific numeric functions built into VBA, currently just Abs, Cos, Exp, Int, Log,
Rnd, Sgn, Sin, Sqr and Tan, where Log is the natural log (usually denoted Ln). So some
VBA functions are spelt differently from the parallel Excel function (e.g. Sqr in VBA
for square root, whereas the Excel function is SQRT). To resolve the conflict, if both
a VBA and an Excel function exist for the same calculation, the VBA form must be
Documents you may be interested
Documents you may be interested