free pdf viewer c# .net : Can't copy text from pdf control SDK system azure wpf web page console LiddleStephen.paper0-part1459

Implementing Legacy Statistical Algorithms 
in a Spreadsheet Environment 
Stephen W. Liddle and John S. Lawson 
Brigham Young University, Provo, UT 84602 
Abstract.  Over the years creative researchers in the field of statistics have 
published many useful and freely available FORTRAN programs implementing 
novel statistical computations.  But it is becoming less common to find a FOR-
TRAN compiler installed on the average workstation, making this prior work 
less accessible to the masses who rely on personal computers running Win-
dows.  We propose a methodology for converting legacy FORTRAN algorithms 
to run as VBA macros in the Excel environment.  Using our approach, moder-
ately literate programmers can effectively migrate legacy algorithms to the 
ubiquitous Excel spreadsheet tool, where users will again have ready access to 
past algorithm contributions. 
1.  Introduction 
Many algorithms for statistical calculations have been published in FORTRAN in jour-
nals such as Applied Statistics and the Journal of Quality Technology.  The code for these 
algorithms and many other programs that have been described in The American Statisti-
cian and Journal of the American Statistical Association can be downloaded for free from 
STATLIB (
http://lib.stat.cmu.edu/
). These published algorithms have been very 
valuable to applied statisticians who want to use statistical methods they have read about 
in current research journals.  However, today much of statistical computing is performed 
on personal computers that do not come with a FORTRAN compiler installed.  Therefore 
the published algorithms are inaccessible to many applied statisticians.  Some of the code 
has been duplicated or incorporated as add-ins for standard statistical packages such as 
SAS, SPlus, and MINITAB, but the latest algorithms, and many older algorithms, have 
not.  One way to utilize this legacy code on common personal computers is with Micro-
soft Excel. 
Practitioners who use Excel have the option of creating macros using Microsoft Visual 
Basic for Applications (VBA), a Basic language that is built into Excel.  VBA macros 
perform exactly as Basic programs, but rather than having input from the keyboard and 
output to the screen, VBA macros typically write output to an Excel worksheet, and take 
input from a worksheet or through graphical dialog boxes. 
This paper shows how published algorithms in FORTRAN can be converted to VBA 
macros that will run in Excel.  Converting FORTRAN algorithms to VBA macros has 
several advantages.  First, conversion allows practitioners to work in an environment 
where they are comfortable.  Second, when tabular output of programs is placed in an 
Excel worksheet rather than a file or computer screen, users can employ Excel features 
(with which they are already familiar) to further manipulate or summarize the results.  
For example, worksheet functions 
=SUM()
or 
=AVERAGE()
can quickly summarize a 
column of output, or Excel’s Chart Wizard can be used to quickly create a graph from 
tabular output.  Finally, when programs are converted to VBA macros, the spreadsheet 
environment and graphical dialog boxes can make the programs more user friendly by 
reducing the need for repetitive typing of inputs when the number of inputs is non-trivial. 
Our methodology for converting FORTRAN programs to VBA macros involves the fol-
lowing steps: 
Can't copy text from pdf - extract text content from PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Feel Free to Extract Text from PDF Page, Page Region or the Whole PDF File
extract all text from pdf; get text from pdf into excel
Can't copy text from pdf - VB.NET PDF Text Extract Library: extract text content from PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
How to Extract Text from PDF with VB.NET Sample Codes in .NET Application
copy highlighted text from pdf; can't copy text from pdf
1.  Understand the original FORTRAN program. 
2.  Choose suitable input/output (I/O) methods. 
a.  What are the data sources and outputs? 
b.  What interactive prompts are necessary? 
c.  Design an appropriate cell layout and supply labels, borders, etc. 
3.  Convert the original FORTRAN source code to VBA. 
a.  Consider reuse of existing Excel and VBA functions (this might in-
volve adapting and transforming the original program). 
b.  Translate  individual  code  statements,  transforming  code  structures 
where appropriate. 
4.  Test and use the resulting Excel worksheet. 
In the remainder of this paper we give the details of our approach.  We start with an 
overview of the fundamentals of VBA in the Excel environment.  Next we describe how 
the characteristics of a spreadsheet environment affect I/O and other aspects of program-
ming perspective.  Then we give specific guidance on converting FORTRAN programs 
to VBA. 
2.  Fundamentals of VBA in Excel 
Visual Basic for Applications (VBA) is the programming engine used in the Microsoft 
Office suite (and other similar products) for automating tasks and programming user-
specified features.  Indeed, when you record a macro in Excel, each individual action is 
translated into a VBA statement.  When you later edit the macro, Excel displays a Visual 
Basic editor window, and you edit in the VBA language. 
VBA is distinguished from the stand-alone version of Visual Basic (VB) primarily by the 
fact that VBA is embedded within another application (such as Word, PowerPoint, or 
Excel), whereas VB creates Windows programs that can run independently of a host ap-
plication.  For example, one of the authors has used VBA to create a custom facility that 
e-mails student grades directly from a grade roll spreadsheet to individual students.  The 
VBA code presents a dialog box, the user selects a first and last student, and the VBA 
code then e-mails grades to students in the chosen range.  This program can only be run 
within the Excel spreadsheet, and it is tightly bound with the data stored in the spread-
sheet.  In contrast, a standalone VB program is an application that is launched from the 
desktop like any other application.  In this paper, we restrict our focus to VBA, though 
the Visual Basic language and many of Microsoft’s development tools are common to 
both VB and VBA. 
2.1  The Spreadsheet Object Model 
Programming in VBA starts with the host application’s object model.  Once you under-
stand the objects in the VBA host application, you can use those objects to perform com-
plex tasks automatically.  The Excel object model is a hierarchy of objects that represent 
the elements of a spreadsheet.  Each object has properties that represent data and methods 
that perform specific operations.  As shown in Figure 1, 
Application
is the top-level 
object that represents the Excel program.  
Application.Caption
is a property that 
indicates the name that appears in the title bar of the main Excel window.  Invoking the 
Application.Save
method causes Excel to save changes just as if the user had typed 
Ctrl+S
or selected the 
File|Save
Menu.  The 
Application
object contains a collection of 
workbooks, denoted 
Application.Workbooks
.  This collection represents the Excel 
workbooks that are currently open.  A workbook can hold several worksheets, each rep-
resented by 
Worksheet
objects.  Worksheets contain elements such as cells (represented 
by 
Range
objects) and graphs (
Chart
objects).  VBA macros typically run in the context 
of a particular worksheet, so we often do not need to specify 
Application
Workbook
C# PDF copy, paste image Library: copy, paste, cut PDF images in
PDFImage image = PDFImageHandler.SelectImage(page1, cursorPos); // Copy the image. Extract all images in a PDF document doc, Target document object, Can't be null
copying text from pdf to excel; extract text from pdf c#
C# PDF Thumbnail Create SDK: Draw thumbnail images for PDF in C#.
Description: Convert the PDF page to bitmap with specified size. Parameters: Name, Description, Valid Value. targetSize, The size of the output image. Can't be
copy text from locked pdf; copy paste pdf text
and 
Worksheet
explicitly.  For example, to reference the value stored in cell A1 of the 
current worksheet, we just write 
Range("A1").Value
.
Figure 1.  Portion of the Excel Object Model 
The complete Excel object model is documented in the Visual Basic Reference section of 
Excel’s help file. 
Figure 2.  Example VBA Program 
Application
Workbooks
(
Workbook
Range 
Chart 
Worksheets
(
Worksheet
'
 Require ex
x
plicit variabl
l
e declaration. 
 Rec
c
o
mmended.
.
Option Explicit
' Declare constants 
Const PI As Double = 3.14159265358979 
Const MAX_POP As Integer = 100
' Declare variables 
Dim PopCount As Integer 
Dim Population(1 To MAX_POP) As Double  
' An array
' AddObservation is a subprocedure that places an 
' observation into the Population array if there is room. 
Public Sub AddObservation(value As Double) 
If PopCount < MAX_POP Then 
PopCount = PopCount + 1 
Population(PopCount) = value 
End If 
End Sub 
' SimpleMean returns the average of the observations in 
' our population.  A function returns a value.  The 
' return value is determined by assigning to the function 
' name (SimpleMean, in this case). 
Public Function SimpleMean() As Double 
Dim total As Double 
Dim i As Integer 
total = 0 
For i = 1 To MAX_POP 
total = total + Population(i) 
Next i 
SimpleMean = total / PopCount 
End Function 
C# PDF Page Replace Library: replace PDF pages in C#.net, ASP.NET
on the original page are removed, including text, images, interactive String outputFilePath = Program.RootPath + "\\" Output.pdf"; doc.Save Can't be null.
cut text from pdf document; copy paste text pdf file
C#: How to Extract Text from Adobe PDF Document Using OCR Library
String inputFilePath = @"C:\input.pdf"; PDFDocument doc = new PDFDocument(inputFilePath it will be helpful to recognize the text, but it can't be too large.
copy and paste pdf text; extract text from image pdf file
2.2  Language Basics 
VBA is a modern descendant of ANSI BASIC.  As such, it includes the following major 
language elements, as demonstrated in Figure 2. 
2.2.1  Data Handling.  VBA primitive data types include 
Boolean
1
(
True
or 
False
),  
Integer
(roughly  +/-  2  billion), 
Double
(IEEE  64-bit  floating-point  values),  and 
String
, among others.  Variables in VBA are typically typed, but a special 
Variant
data type allows programmers to rely on Visual Basic to determine whether to treat the 
value as numeric or string depending on the context.  (We recommend avoiding 
Variant
most of the time.)  Variables are usually declared by means of the 
Dim
statement.  Sym-
bolic constants are like variables whose values cannot change during program execution.  
These constants are introduced by the keyword 
Const
(e.g., 
PI
and 
MAX_POP
in Figure 
2).  VBA supports arrays of one or more dimensions (e.g., 
Population
).  VBA also 
includes many non-primitive components (e.g., 
TextBox
File
) that provide extended 
data handling capabilities. 
2.2.2  Operators, Expressions, Functions.  VBA supports a variety of mathematical, 
relational, Boolean, and other operators, as summarized in Figure 3.  Using these opera-
tors and parentheses, we can build arbitrarily complex expressions.  VBA supplements 
these basic operators with an extensive library of functions.  Available functions include 
trigonometric (
Sin
Cos
Tan
Atn
), logarithmic (
Log
Exp
), random-value (
Rnd
), and 
financial (
Rate
Pmt
NPV
) to name a few.  For example, the first form of the quadratic 
formula 
a
ac
b
b
2
4
2
− ±
can be expressed in VBA as 
(-b+Sqr(b^2–4*a*c))/(2*a)
where 
Sqr
is the square root function.  Note that VBA observes conventional operator 
precedence,  so  that  exponentiation  precedes  multiplication,  which  precedes  addition.  
Operators with the same precedence are evaluated left-to-right.  When in doubt, it is wise 
to use parentheses to control evaluation order explicitly. 
Figure 3.  VBA Operator Summary 
2.2.3  Structured Programming Constructs.  Structured programming—the idea of 
organizing  code  according  to  the  structures of  sequence,  selection, and iteration—is 
foundational to modern programming.  VBA supports these structures with 
If
-
Then
Select
-
Case
(selection structures), and 
For
-
Next
Do
-
While
Do
-
Until
, and 
While
-
1
We use syntax highlighting throughout this paper.  Code is listed in a 
monospaced font
.  VBA 
keywords are listed in 
boldface
.  Comments, which begin with a single quote mark, are 
itali-
cized
.
Mathematical
^
exponentiation 
*
/
+
-
multiplication, division, addition, subtraction 
\
Mod
integer division (discard remainder), modulus (give the remainder) 
Relational
=
<>
equality, inequality 
<
<=
>
>=
relative magnitudes 
Other
And
Or
Not
the usual Boolean operators 
&
string concatenation 
Like
pattern matching 
C#: Use OCR SDK Library to Get Image and Document Text
If it can't get text successfully, please try as follows You can directly copy demos to your .NET application to Jpeg, Png, Bmp, ) and output to text or PDF
how to copy and paste pdf text; can't copy and paste text from pdf
C# Image: How to Deploy .NET Imaging SDK in Visual C# Applications
dll; RasterEdge.Imaging.MSWordDocx.dll; RasterEdge.Imaging.PDF.dll; Copy and embed your required DLL libraries into web viewer control, I can't upload document
copy text from pdf with formatting; export text from pdf to excel
Wend
statements (iteration structures).  The two most common, 
If
-
Then
and 
For
-
Next
are illustrated in Figure 2.  
If
-
Then
statements take a Boolean expression (e.g. 
Pop-
Count < MAX_POP
) as the condition.  
Else
and 
ElseIf
clauses can also be used to 
supply alternative actions in case the condition is false.  
For
-
Next
loops allow us to 
count through a sequence of numbers.  Using the 
Step
clause, we can create interesting 
sequences.  For example, the statement 
For i = 10 To 2 Step -2
assigns 
i
the val-
ues 10, 8, 6, 4, and 2 in that order.  Sometimes the other selection and iteration structures 
are more convenient, but in general 
If
-
Then
and 
For
-
Next
are sufficient to implement 
any computable function. 
2.2.4  Procedures and Functions.  Another key idea of structured programming is the 
notion that programs should be decomposed into smaller, more manageable modules.  
VBA supports user-defined procedures  and functions such as 
AddObservation
and 
SimpleMean
in Figure 2.  A procedure (also called “subprocedure” in VBA parlance) is 
a distinct unit of code we can invoke to accomplish a task.  Procedures may receive zero 
or more parameters, as indicated by a parameter list in parentheses.  In Figure 2, 
AddOb-
servation
receives one parameter of type 
Double
.  Functions are procedures that also 
return a value.  VBA uses different keywords to distinguish the two (
Sub
vs. 
Function
).  
Functions specify the type of the result by listing it after the parameter list.  Thus, 
Sim-
pleMean
receives no parameters (indicated by empty parentheses), but it does return a 
Double
value.  There is no explicit “return” statement in VBA; instead, you simply as-
sign the result to the function name (e.g. 
SimpleMean = total / PopCount
).  Best 
practice is to name procedures with a verb-object phrase (e.g. 
AddObservation
) and to 
name functions with a description of the result (e.g. 
SimpleMean
). 
3.  Retargeting Traditional Algorithms to a Spreadsheet Environment 
Embedding a programming language such as VBA in a spreadsheet environment like 
Excel changes the context in which we implement our computing solutions.  Every com-
puter program consists of the three essential components of input, processing, and output.  
And a spreadsheet environment impacts each of these elements. 
3.1 Input/Output 
In a traditional programming environment, data input comes from two typical sources: 
the keyboard (for dynamic data entry) and data files.  Similarly, output typically goes 
either to the system console or to some kind of storage file.  In an embedded spreadsheet 
scenario, we have more possibilities.  For example, in addition to regular data files VBA 
can also access relational databases.  But perhaps most commonly, the input and output 
data can be stored directly in the Excel workbook itself.  For example, Figure 4 shows a 
worksheet designed to implement Lee’s (1987) ORPS subroutines for optimum ridge 
parameter selection.  Cells A5:A6, B5:B6, C5, and D5 represent the inputs, and cells in 
columns G and J will receive the output generated by running the ORPS algorithms.  
Command buttons (labeled “Run ORPS1” and “Run ORPS2”) provides the event han-
dling.  When the user clicks a button, its associated VBA code is executed.  (See Appen-
dix D for the original OPRS algorithms as published in Applied Statistics, and Appendix 
E for a listing of our version rewritten in VBA.) 
VBA code can reference cells in a worksheet by accessing the 
Range
property of a 
Worksheet
object.    For  example,  assuming  the  worksheet  in  Figure  4  is  labeled 
“ORPS,” we could reference the Sigma cell as 
Worksheets("ORPS").Range("D5")
.  
If we know we are already in the context of the “ORPS” worksheet, 
Range("D5")
would be sufficient.  We could assign the value currently stored in cell D5 to the variable 
sigma
with the statement 
sigma = Range("D5").Value
 Similarly, we can change 
the value of a cell by assigning to the 
Value
property of a 
Range
object.  Whereas 
VB.NET Image: VB Code to Read Linear Identcode Within RasterEdge .
read Identcode in high speed just through copy-and-paste; fileName As String = FolderName & "Sample.pdf" Dim reImage at one time, then you can't miss RasterEdge
edit pdf replace text; copy pdf text to word with formatting
VB.NET TIFF: Merge and Split TIFF Documents with RasterEdge .NET
You can't miss it Copy and paste demo code below to your VB.NET application for dedicated to provide powerful & profession imaging controls, PDF document, tiff
find and replace text in pdf file; copy and paste text from pdf to excel
Range
uses the “A1” style of reference, the similar 
Cells
property of a 
Worksheet
can 
be used to access cells by numeric index.  Thus, 
Cells(5, 4)
refers to the same cell as 
Range("D5")
Figure 4.  Spreadsheet Template for ORPS Algorithms 
Sometimes it is necessary to prompt the user for information dynamically while running 
an algorithm.  Message boxes and input boxes are useful methods for interactive commu-
nication.  To display information in a pop-up window, use the 
MsgBox
function: 
Call MsgBox(
prompt
)
or   
intResult = MsgBox(
prompt
buttons
title
)
Here, prompt is a string displayed in the pop-up window.  Buttons indicates what re-
sponse buttons are available to the user.  Title is a string displayed in the title bar of the 
message box window.  If you omit buttons and title, VBA displays an OK button and a 
default title.  Common choices for buttons include 
vbOKOnly
(the default), 
vbOKCan-
cel
vbYesNo
, and 
vbYesNoCancel
.  You can add an icon to the message box by add-
ing 
vbQuestion
vbInformation
vbExclamation
, or 
vbCritical
to the buttons.  
For example, the following code displays a message box:
2
intResult = MsgBox( _ 
"This operation overwrites existing data.  Continue?", _ 
vbYesNo + vbExclamation, "Warning") 
If intResult = vbYes Then 
' Perform destructive operation here. 
End If 
The value returned from 
MsgBox
indicates  the button selected  by the user.  This is 
typically either 
vbOK
vbCancel
vbYes
, or 
vbNo
2
An underscore (
_
) at the end of a line is the line continuation marker in VBA.
Clicking these buttons 
runs the ORPS1 and 
ORPS2 algorithms. 
Input Region
Output Region 
VB.NET Word: How to Convert Word Document to PNG Image Format in
and document formats, including converting Word to PDF in VB on this page and you can directly copy it to If a strong CSP is chosen, a password can't be removed
copy text from pdf online; erase text from pdf file
If we want more information from the user than a simple OK/Cancel or Yes/No response, 
we can use the InputBox function: 
strAnswer = InputBox(
prompt
title
default
)
where prompt is a string telling the user what to enter, title is a message displayed in the 
title bar of the input box, and default is the default value shown in the data-entry field of 
the input box.  For example, consider the following code, which displays the input box 
shown below: 
Dim strProject As String 
strProject = InputBox("Please enter a project name:", _ 
"Project Name") 
If the user clicks OK, whatever is entered in the text field is stored in the 
strProject
variable.  If the user clicks Cancel, the 
InputBox
function returns the empty string.  
VBA will perform automatic type conversion, so the results of the call to InputBox can 
be assigned to numeric variables instead of strings as needed. 
3.2 Built-in Functions 
One of the strengths of operating in the Excel environment is that many complex func-
tions are already implemented and available.  In some cases we may discover that we can 
replace portions of custom code with calls to the Excel built-in function library.  For ex-
ample, in Montgomery’s (1982) FORTRAN program for optimal economic design of an 
X control chart, the function 
PNORM(X)
, that evaluates cumulative area under the stan-
dard normal density, is programmed in FORTRAN.  When we implement this program in 
VBA, we can replace calls to 
PNORM()
with calls to Excel’s built-in 
NormSDist()
func-
tion.  Built-in functions not only can save work (including the nontrivial task of debug-
ging), but can also improve precision of the results (
NormSDist()
provides more digits 
of precision than 
PNORM()
).  To find the functions available in Excel, look at the 
Work-
sheetFunction
object.  Excel provides many dozens of trigonometric, statistical, engi-
neering, financial, and other functions.  An extremely abbreviated sample includes the 
following: 
ChiDist(x,deg_freedom)
Returns one-tailed probability of the χ
2
distribution.
Correl(array1,array2)
Returns the correlation coefficient of two cell ranges. 
Fisher(x)
Returns the Fisher transformation at a given x. 
Pearson(array1,array2)
Returns the Pearson product moment correlation co-
efficient for two sets.
Quartile(array,quart)
Returns the requested quartile of a data set. 
StDev(array)
Returns the standard deviation of a data set.
ZTest(array,x,sigma)
Returns the two-tailed P-value of a z-test. 
We call the built-in 
NormSDist()
function using the 
WorksheetFunction
object as 
follows: 
p = WorksheetFunction.NormSDist(arg) 
This directly replaces the similar FORTRAN code, 
P=PNORM(ARG)
, and the associated 
12-line implementation of 
PNORM()
 See the VBA implementation of Montgomery’s 
(1982) program in Appendix C for more context of this example. 
Running VBA Code 
The final aspect that we address here of repurposing traditional programs for the Excel 
environment is how to create and invoke algorithms implemented in VBA.  Typically, we 
write VBA code as Excel macros.  The source code for each macro is contained in a 
“module” that is visible when you display Excel’s Visual Basic Editor, shown in Figure 5 
(choose 
Tools|Macro|Visual Basic Editor
or press 
Alt+F11
to display the editor).  The win-
dow on the left side gives access to a hierarchical representation of elements of your Ex-
cel workbook.  Here we see our single worksheet, named “Sheet1” or “ORPS.”  We also 
see a code module, which holds the VBA code we wrote to implement the ORPS algo-
rithms.  Typically one creates macros by example; that is, we “record” macros (choose 
Tools|Macros|Record New Macro…
and perform the desired operations).  Indeed, a good 
strategy for learning more about VBA programming is to record a macro and inspect the 
VBA code Excel generates.  You can find the recorded macro code by browsing through 
the modules in the Visual Basic Editor. 
Figure 5.  Excel’s Visual Basic Editor 
A macro in a code module is defined as a VBA subprocedure.  Thus, for example, we 
implement the ORPS1 algorithm by declaring a subprocedure in a code module: 
Sub ORPS1() 
... 
End Sub 
Each macro needs to be declared in this manner, whether it is a recorded macro or one 
programmed manually.  To implement a new macro, either record a simple macro and 
then replace the generated code, or manually insert a subprocedure in a code module.  If 
you choose the second method, when you open the Visual Basic Editor, if there are no 
code modules listed, you can use the Insert menu to add a new code module (choose 
In-
sert|Module
).  Then you can add your subprocedure to the module you just created. 
Excel macros can be invoked in a couple of ways.  First, we can use the Macro dialog 
box (choose 
Tools|Macro|Macros…
or press 
Alt+F8
to display).  This dialog box gives a 
list  of  the available macros,  and  allows  you to select and run  a  macro.   A  second 
alternative that we sometimes favor is more user-friendly: you can insert a “command 
button” into your worksheet and connect that button to the macro, so that when the user 
clicks the button, the macro executes.  The text box below (“Connecting Code  to a 
Command Button”) describes how to create a button and associate VBA code with it.  
The code to cause your macro to be invoked when the user clicks a button is simple: 
Call
macro-name.  So for example, Figure 5 shows the code to call our ORPS1 macro.  
(If the macro were instead named ORPS2, we would write 
Call ORPS2
.)  The name of 
our command button in this case is 
btnORPS1
, so the name of the procedure that runs 
when the user clicks the button is 
btnORPS1_Click
.  The VBA code for this procedure 
is stored in the worksheet where the button is placed (Sheet1 or ORPS in this example).
4.  Converting FORTRAN to VBA 
We now consider the task of converting FORTRAN code to VBA.  The two languages 
share many common ideas, but they also have unique attributes that are important to un-
derstand.  We begin by describing what is common to the languages and comparing the 
syntax of the languages.  Then we discuss the differences between data types in the two 
languages.  We also compare control structures for decisions and loops. 
Figure 6.  FORTRAN Operator Summary (compare with Figure 3) 
Connecting Code to a Command Button 
Creating  a command button  in Excel is straightforward.  First,  select 
View|Toolbars|Control Toolbox.    This  displays a  toolbar (shown at 
right) with graphical components such as command buttons, radio but-
tons, drop-down lists, and so forth.  Select the control that looks like a 
command button.  This places you in “Design Mode” (indicated by the 
selection around the triangle-ruler-pencil icon).  Now click on your work-
sheet where you want the upper-left corner of the button to be placed.  
This creates a command button with a default name and caption (e.g. 
“CommandButton1”).  Next, click on the properties button (upper-right 
corner) in the Control Toolbox.  In the Properties window you can re-
name the button and give it a customized caption.  To associate code with 
the button, just double-click on the button while in Design Mode.  This 
inserts an “event handler” that is invoked when the user clicks this button.  
Try  typing 
Call  MsgBox("It  worked!")
into  the  code  window.    
Now go back to your worksheet.    While in Design Mode,  you can move 
and resize the button.  Now leave Design Mode by clicking on the triangle-ruler-
pencil icon.  Clicking the button now executes the associated code and displays the 
message  box  saying  “It  worked!”    To  invoke  a  macro  instead,  replace 
Call 
MsgBox(...)
with 
Call
macro-name. 
Mathematical
**
exponentiation 
*
/
+
-
multiplication, division, addition, subtraction 
MOD
modulus (return only the remainder) 
Relational
.EQ. 
.NE.
equality, inequality 
.LT. 
.LE.
less than, less than or equal 
.GT. 
.GE.
greater than, greater or equal 
Other
.AND.
.OR. .NOT. 
Boolean operators 
//
string concatenation 
4.1 Understanding Data-Type Commonalities 
Both FORTRAN and VBA are robust languages capable of implementing the complete 
range of computable functions.    Both have structured  programming  constructs,  data 
types, variables, and  rich mechanisms for describing complex expressions.   Figure 6 
gives a summary of FORTRAN operators similar to the VBA summary shown in Figure 
3.  Like VBA, FORTRAN has built-in functions for trigonometric (
SIN
COS
TAN
), loga-
rithmic (
EXP
LOG
LOG10
), and other operations (
MIN
MAX
SQRT
).  Earlier we gave the 
VBA expression of the quadratic formula as 
(-b+Sqr(b^2 –4*a*c))/(2*a)
 The 
FORTRAN equivalent is similar:  
(-b+SQRT(b**2–4*a*c)) /(2*a)
 The translation 
of most expressions will be straightforward. 
What is more interesting is the translation of data types.  FORTRAN has six data types: 
INTEGER
REAL
DOUBLE
PRECISION
COMPLEX
LOGICAL
(
.TRUE.
or 
.FALSE.
), and 
CHARACTER
.  Figure 7 shows the correspondence between FORTRAN and VBA.  Be-
cause VBA is written by a single vendor on a single computing platform, its data types 
are defined more specifically than FORTRAN’s (the FORTRAN language specification 
does not indicate expected ranges for its numeric data types).  So it is important to under-
stand the intended range for numeric values when choosing a VBA data type.  Typically, 
VBA numeric data types are at least as capable as their FORTRAN counterparts.  For 
integers, when in doubt you can use 
Long
(32 bits) instead of 
Integer
(16 bits) to guar-
antee that the VBA variable will have a sufficient range. 
One special case is that complex numbers are not directly implemented in VBA.  Instead, 
one must use worksheet functions (such as 
COMPLEX
IMPRODUCT
IMSUM
IMSQRT
, etc.) 
to handle complex numbers.  See the online VBA help files for details of these functions.  
(We described how to invoke worksheet functions in a previous section.) 
Figure 7.  Comparison of FORTRAN and VBA Data Types 
One of the aspects of data types that can be fairly confusing is the use of implicit data 
types.  In FORTRAN, you can declare your variables (e.g. 
DOUBLE PRECISION X
de-
clares an double-precision floating-point variable 
X
).  However, you need not declare 
variables, and indeed it is common practice to use implict data types.  Variables that be-
gin with the letters I through N are assumed to be of type 
INTEGER
, while any other vari-
ables are of type 
REAL
 If you do not want this default typing, you must either declare all 
your  variables.   Or  (even worse  from a  software  engineering  perspective),  you  can 
change the default implicit types using an 
IMPLICIT
statement.  For example, 
IMPLICIT 
COMPLEX (C, D)
indicates that in this program, all variables starting with C or D will 
FORTRAN Data Type
VBA Data Type
INTEGER 
Byte (0-255), Integer (-32,768 to 32,767), 
Long (-2
31
to 2
31
-1) 
REAL 
Single (7 digits of precision, exponent of 10
-45
to 10
38
DOUBLE PRECISION   Double (15 digits of precision, exponent of 10
-324
to 10
308
COMPLEX 
Not a VBA primitive type– use VBA worksheet functions 
LOGICAL 
Boolean
(
True
or 
False
CHARACTER 
String
(variable length up to roughly 2 billion characters) 
CHARACTER*length 
String*
length (fixed length string, length < about 65,400) 
Other notable data types in VBA:
Currency
15 digits left of decimal point, 4 to the right 
Decimal
28-digit floating point value (stored in 14 bytes) 
Date
1 January 100 to 31 December 9999 
Variant
Numeric or string data, interpreted by VBA according to context 
ext 
Documents you may be interested
Documents you may be interested