Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Spreadsheet-Based Decision Support Systems Chapter 14: Variables Prof. Name Position University Name [email protected] (123) 456-7890 Overview 14.1 Introduction 14.2 Variable Declarations and Data Types 14.3 Variable Scope 14.4 Variables in User Interface 14.5 VBA Math Functions 14.6 Applications 14.7 Summary 2 Introduction Declaring variables of different data types in VBA. Private and public variables. Using variables in the Message Box and Input Box user interfaces. Mathematical, trigonometric, and derived math functions. Conversion and string functions. Two detailed examples of a simple DSS application which uses basic Excel object manipulation, variables, and a simple user interface. 3 Variable Declarations and Data Types Integer and Double String Boolean Constant Range Worksheets Object 4 Data Types A data type categorizes the values that can be assigned to a variable. There are several different data types available in VBA; we will focus on the following seven data types for now, which we feel will be used most often. – – – – – – – Integer Double String Boolean Range Worksheets Object 5 Defining a Variable To declare a variable in VBA, we use the Dim statement. – Dim varaible As DataType Remember that VBA for Excel is case-sensitive. A constant variable is a variable whose value will never change. – To declare a constant, we use Const – Const variable = value We will also see public and private declarations later. 6 Integers and Doubles Both integers and doubles are numerical values. Integers are non-decimal numbers ranging in value from -32,768 to 32,767. – Integers will be used for simple numerical values, counting in loops, and enumerating arrays. Doubles have values from -1.79769E308 to -4.94065E-324 for negative values and from 4.94065E-324 to 1.79769E308 for positive values. – Doubles will be used for any data or calculations. 7 String A string is a segment of text. This text can include upper and lower-case letters, punctuation marks, and numbers; however these numbers can not be used in calculations as they will be viewed as text. – We will use strings to name objects, label objects, and label data in spreadsheets. 8 Boolean A Boolean is a variable whose value is either True or False. – We will use Boolean variables often in logic statements, If, Then statements, and loops. 9 Range A range is a variable which can be used with all of the properties and methods of the Range object. We must also use the Set declaration to initialize the value of a range variable. – For example, to set MyRange equal to cell A1 we would type the following: Set MyRange = Range(“A1”) 10 Using Ranges We will use Ranges often to increase the efficiency of our code. – We can use ranges to define what we will call a StartCell. – We set the value of this range variable at the beginning of our code and reference this StartCell variable name throughout the remainder of the code. We may also use Ranges to make our code more dynamic. – We can use an Input Box to capture where the user wants to start a table. Dim text As String, StartCell As Range text = InputBox(“Enter starting cell for table:”) Set StartCell = Range(text) 11 Worksheets The worksheets data type defines a Worksheets object. This variable can be assigned any of the properties or methods used with the Worksheets object. – We will use this object when creating loops and/or functions to perform repeated methods or set repeated properties to multiple worksheets. 12 Object The object variable can be used to define any object in Excel. This can be considered a drawing object, a range, a worksheet, or any other object. Any of the properties or methods associated with any object in Excel can be used with the object variable 13 Variable Scope Private and Public Variable Declarations Keeping Track of Variable Values 14 Variable Scope It is important to understand the scope of each variable you declare. You must check your code to see if a variable will be used in only one sub procedure, or function procedure, or if it will be used in several different procedures. There are two types of variable declarations which determine the scope of each variable. – Public – Private 15 Private Variables A Private variable is declared using the Dim statement. This variable can be private on two levels – Procedure level = only used in the particular sub procedure in which it was declared. – Module level = used in any procedure in the module, but only in the particular module in which it was declared. 16 Procedure Level vs Module Level Procedure level private declaration Sub Sub1() Dim i As Integer ..... End Sub ---------------------------------Sub Sub2() Dim i As Integer .... End Sub Module level private declaration Dim i As Integer ------------------------Sub Sub1() ....... End Sub -----------------------Sub Sub2() ........ End Sub 17 Public Variables A Public variable on the other hand can be used in any sub procedure in any module. To declare a public variable, we use the Public statement. – Public i As Integer 18 Keeping Track of Variable Values There are two main ways to keep track of variable values while running your program. – Use the Watch Window Click on View > Watch Window from the menu Highlight any variable from the Code Window and drag it to the Watch Window – Hold your cursor over a variable name in the Code Window to see a small display of its value 19 Variables in User Interface Message Box Input Box 20 Message Box and Input Box Message Boxes allow you to print something for the user to see in a small dialog box. Input Boxes allow you to prompt the user to enter some value in a small dialog box. 21 Message Box You can print the following with a Message Box – Text – Variable values – Both using concatenation with & sign MsgBox “This is a string of text.” MsgBox "The height is " & h & vbCrLf & " and the width is " & w & "." 22 MsgBox Function You can also use the MsgBox function to specify button types and response types – MsgBox (prompt, [buttons], [title], [helpfile, context]) The prompt is either the text or variable (or concatenation of both) which will be displayed in the dialog box. The title argument allows you to enter text a title for the dialog box. The helpfile and context arguments allow you to give the user help options. 23 MsgBox Function (cont’d) The buttons argument takes a VB Constant value to determine the number and style of buttons available to the user. – – – – vbOKOnly: Displays an OK button only vbOKCancel: Displays OK and Cancel buttons vbYesNoCancel: Displays Yes, No, and Cancel buttons vbYesNo: Displays Yes and No buttons You can also capture the user’s response to your Message Box with a VBA variable called response. – – – – – – – vbOK: If response was OK vbCancel: If response was Cancel vbAbort: If response was Abort vbRetry: If response was Retry vbIgnore: If response was Ignore vbYes: If response was Yes vbNo: If response was No 24 InputBox Function The InputBox function is always assigned to a variable. This function takes the following general form: – InputBox (prompt, [title], [default], [xpos], [ypos], [helpfile, context]) The prompt and title arguments of the InputBox function are the same as those of the MsgBox function. The default argument allows you enter a default value to display in the Input Box. The xpos and ypos arguments allow you to position the Input Box relative the left and top edges of the screen. The helpfile and context arguments are the same as those of the MsgBox function. 25 InputBox Function (cont’d) For example, you may prompt the user to enter a number and store the user value in the variable UserNumber. UserNumber = InputBox (prompt, [title], [default], [xpos], [ypos], [helpfile, context]) 26 VBA Math Functions Typical Math Functions Trigonometric Functions Derived Math Functions Conversion Functions String Functions 27 VBA Math Functions We can use typical math functions in VBA without needing to create a formula in the spreadsheet. There are – Typical Math Functions – Trigonometric Functions – Derived Math Functions 28 Typical Math Functions We will describe seven basic math functions – – – – – – – Abs Sqr Mod Int Rnd Exp Log 29 Abs Function The Abs function calculates the absolute value of a variable. This function can be used with both integer and double data types (as well as with other numerical variables). It will return the same data type which is used in the function. – Abs(-10) = 10 30 Sqr Function The Sqr function calculates the square root of a number. It can also be used with any numerical data type (must be greater than 0). It will always return a double data type. – Sqr(100) = 10 31 Mod Function The Mod function calculates the modular value of a number, given its divisor (that is, it gives the remainder when a number is divided by the divisor). The format of this function is divisor Mod number. Sub ModularFunction() Dim x As Integer, y As Integer x=2 y=4 MsgBox x Mod y ‘answer is 2 x=4 y=2 MsgBox x Mod y ‘answer is 0 End Sub 32 Int Function The Int function removes the decimal part of a double variable and returns the integer part. The result will be an integer data type. For positive numbers, the Int function always rounds down. For negative numbers, the Int function will return the first negative integer less than or equal to the original variable value. – Int(5.6) = 5 – Int(-4.3) = -5 33 Rnd Function The Rnd function will generate a random number. You can either enter a seed as a parameter for the function, or leave the seed value blank. This function will return a double data type between 0 and 1. To create random integers in a specific range, use the formula – Int((upperbound - lowerbound + 1) * Rnd + lowerbound) 34 Exp Function The Exp function raises the constant e to some power given in the function statement. The value returned will be a double data type. – Exp(2) = e2 = 7.389056099 35 Log Function The Log function calculates the natural log, that is the logarithm with base e, of a given number. The result is a double data type. You can calculate logarithms with base n for any number by dividing the natural logarithm of that number by the natural logarithm of n. For example, to calculate the log of 15 with base 10, you would type. – Log(15) / Log(10) = 1.176091259 36 Trigonometric Functions There are four basic trig functions that we will describe – – – – Sin Cos Tan Atn These functions all take angles as a parameter, and this angle value should be entered in radians. – To convert degrees to radians, multiply degrees by pi/180 – To use the variable pi, we have to define a constant Const pi = 3.14159 37 Sin, Cos, and Tan Functions The Sin, Cos, and Tan functions take an angle and return the ratio of two sides of a right triangle. The value returned is a double data type. The result of the Sin and Cos functions will be between -1 and 1. Sin(pi/4) = 0.7071067812 Cos(pi/3) = 0.5 Tan(pi/6) = 0.5773502692 38 Atn Function The Atn function calculates the arctangent of a given ratio. The result is an angle in radians, which will be a double data type. The result of the Atn function will be between -pi/2 to pi/2 radians. – To convert radians to degrees, multiply radians by 180/pi. – Atn(0.5773502692) = pi/6 39 Derived Math Functions Using the above functions, we can derive other functions. There is a long list of examples of derived functions in Microsoft Visual Basic Help; we will demonstrate two: – Arcsin – Sec We will use function procedures to create these and other derived math functions. 40 Arcsin Function We can derive the arcsine or inverse sine function using the Atn and Sqr functions. We can name this the Arcsin function. This function would be defined as follows – Arcsin(X) = Atn(X / Sqr(-X * X + 1)) 41 Sec Function We can derive the secant function using the Cos function. We can name this function Sec. It is defined as follows: – Sec(X) = 1 / Cos(X) 42 Conversion Functions There are several functions in VBA that can be used to convert one data type to another. Two main conversion functions used with numerical values are CInt and CDbl. – CInt converts a variable to an Integer data type: CInt(variable or expression) – CDbl converts a variable to a Double data type: CDbl(variable or expression) The Val function also extracts a numerical value from a string. The input for this function is an expression. – Val(expression) 43 Conversion Functions (cont’d) Any numeric expression can also be converted to a string using the CStr function. The input for this function is again any variable or expression: – CStr(variable or expression) The CDate function converts values into the Date data type. This data type is necessary to work with dates in your code for comparisons or calculations. – CDate(variable or expression) Two other useful conversion functions are Asc and Chr. These functions, which use the ASCII list of numbers and characters, can be used to convert letters to numbers and numbers to letters, respectively: – Asc(character): Asc(“A”) = 65 – Chr(number): Chr(65) = “A” 44 String Functions There are several string functions available in VBA. Two useful string functions are UCase and LCase, which can be used to convert a string into all upper case or all lower case, respectively. – UCase(string variable or string expression) – LCase(string variable or string expression) To extract a segment from a string value, you can use the Mid function. – Mid(string variable or string expression, starting_position, length) MidName = Mid(“JohnHenrySmith”, 5, 5) Another useful string function is Len. This function determines the length of a string variable value or string expression: – Len(string variable or string expression) 45 Applications Creating and Modifying Shapes Making Calculations and Creating a Report 46 Applications (cont’d) We consider two applications, or extended examples, in which we implement some of the new techniques learned in this chapter. – Creating and Modifying Shapes (Example 1) Message Boxes, Input Boxes, and some various data types – Making Calculations and Creating Reports (Example 2) Several different functions and the range data type 47 Creating and Modifying Shapes Let us create a program in which a user can: – – – – – create either a square or a circle label their shape position their shape on the spreadsheet keep track of how many squares and circles have been created delete a square or circle 48 Figure 14.1 We begin by preparing the following spreadsheet. We have a brief description of the program, and several buttons. 49 Creating a Square To do this, we will first declare variables that can be assigned to an Input Boxes to find the desired width and height of the square. We call these variables width and height – Both of these variables should be define as double data types Sub CreateSquare() Dim width As Double, height As Double width = InputBox("Please enter the width of your square:", "Width", 50) height = InputBox("Please enter the height of your square:", "Height", 50) End Sub 50 Creating a Square (cont’d) Now we use the AddShape method associated with the ActiveSheet and Shapes objects to create the square. – The shape type parameter should be msoShapeRectangle. – The position parameters can be anything for now. – The width and height parameters will be set as our variable values. ActiveSheet.Shapes.AddShape(msoShapeRectangle, 146.25, 289.5, width, height).Select We then simply display a Message Box which tells the user that the macro has run successfully and the square has been created. 51 Figure 14.2 The final CreateSquare() procedure: 52 Figure 14.3 The output is as follows: 53 Creating a Circle This sub procedure will be very similar to creating a square. We only need to change the msoAutoShapeType to msoShapeOval. However, we also decide to create a new variable, radius, to be used for both the width and height values in the AddShape method. 54 Figure 14.5 The Input Box for the radius variable value: 55 Counting the Shapes We will first need two variables (which can both be integer data types): – NumSquares – NumCircles We first need to initialize these variables to have value 0. – We cannot perform this initialization in either the CreateSquare() or CreateCircle() sub procedures since we want to increase these values each time the macros are called. – Therefore, we can either create a new sub procedure called Main() or Initialize() and assign it to a new “Start” button, or we can use the Workbook_Open() event procedure. – For now we use the Workbook event procedure. 56 Figures 14.6 The Public declaration of NumSquares and NumCircles. 57 Workbook Event Procedure We create a Workbook_Open() event procedure in the Workbook object of our current VBA project. In this procedure we initialize the NumSquares and NumCircles variables to be 0. Since we want to use these variables in the Workbook object and in our main module, we must declare them as public variables with the Public statement. We also clear the range of cells where the shapes will most likely be created and/or positioned in this event procedure. – We assume this range is A12:K50. We specify that this range is in our first worksheet and use the Delete method. 58 Figure 14.7 This event procedure initializes the variable values and clears previously created shapes. The code is as follows: 59 Figure 14.8 We can now create and count objects: 60 Incrementing Variable Values To increment a variable value in VBA, use the structure – variable = variable + 1 We create two procedures for deleting squares and circles: 61 Label Shape To label our shape, we first prompt the user to see what text will be used as the label. We declare a private variable called text and assign it to an Input Box as follows – text = InputBox("Please enter label for your shape:", "Shape Label", "Square 1") Now we use the Selection object with the Characters property and Text sub property and assign the value equal to our text variable. – Selection.Characters.Text = text 62 Figures 14.10 and 14.11 The procedure and result: 63 Position Shape To position a shape, instead of asking the user to provide two numerical values for the left and top arguments of the AddShape method, we will cut and paste the selected object to a specified range. We first declare a private variable called position to capture the range name where the user wants to move the selected object. We then use a range variable called place to use this range value in our Paste method. 64 Position Shape (cont’d) The variable declarations, InputBox function, and range assignment are written as follows Dim position As String, place As Range position = InputBox("Please enter cell name where you would like to position your shape (below A12):", "Position", "A12") Set place = Range(position) We now use the Cut method on the Selection object, and then use the ActiveSheet object and Paste method to paste the object to the desired range. We specify this range with the Destination argument as shown below. – ActiveSheet.Paste Destination:= place 65 Figures 14.12 and 14.13 Positioning the shape in cell A12. 66 Making Calculations and Creating a Report We will create a program which can make various calculations and create reports. – The user can generate a random numbers in a specified interval and calculate its: Absolute value Integer value Square root Exponential power Natural logarithm – The user can also provide an angle to calculate its: Sine Cosine Tangent – We also provide a “Clear All” button to clear current reports. 67 Figure 14.14 Our spreadsheet is prepared with the appropriate buttons and table headings. We only need three sub procedures for this program. – CalcRandNum() – CalcAngles() – ClearAll() 68 Random Number Calculations We will first ask the user to specify an interval in which they want the random number to be generated. We will use two variables and the InputBox function to achieve this. We declare these variables privately in the CalcRandNum() sub procedure and name them low and upp. low = InputBox(“Please enter the lower bound of the interval in which you” & _ “would like to generate a random number: “, “Lower Bound”, –10) upp = InputBox(“Please enter the upper bound of the interval in which you” & _ “would like to generate a random number: “, “Upper Bound”, 10) 69 Random Number Calculations (cont’d) We now use the following function to generate a random number in this interval – x = (upp - low + 1) * Rnd() + low We will define this x variable publicly as we will use it to perform calculations in our CalcAngles() sub procedure as well. We can insert this result into the first column of our random number calculation table. Since we will be inserting all other random number calculations into the same table, we will use a range variable, similar to the StartCell example, for this table and use it to reference all report values. 70 Random Number Calculations (cont’d) We define this range variable publicly as we will use it in the ClearAll() procedure as well. We name this variable RandStart and declare it as follows. – Public RandStart As Range Now we should set this variable to a particular range in the worksheet. We do this in the CalcRandNum() sub procedure by typing. – Set RandStart = Worksheets(“Example 2”).Range(“A14”) We can now use this variable as a Range object and apply the Offset method to insert calculation results into our table. We insert the first value, the random number generated in the specified interval, into the first column. – RandStart.Offset(1, 0).Value = x 71 Figures 14.15 and 14.16 We can now use the Value property of our range variable to insert all other calculations directly. 72 Angle Calculation For the CalcAngles() sub procedure we will begin by asking the user to enter an angle in degrees. We do this using the InputBox function again with the prompt, title, and default value defined as shown below. – x = InputBox("Enter an angle value in degrees:", "Angle value", 45) Notice we used the same x value as before, which was declared as a public variable. We now need to convert this value into radians before using any trigonometric calculations. To do this, we will first need to declare the constant pi. – Const pi = 3.14 73 Angle Calculation (cont’d) We can now use the following function to make the angle conversion. – x = x * pi / 180 We will use another range variable in this procedure to insert calculation values into the angle calculation table. We also define this variable publicly so that we can use it again in the ClearAll() procedure. We name this variable AngleStart and declare it as follows. – Public AngleStart As Range 74 Figures 14.17 and 14.18 We can now use the Offset method again to insert the original degree value of the angle, the converted radian value of the angle, and the Sin, Cos, and Tan calculation results into the report. 75 Clear All Procedure ClearAll() sub procedure will clear the values in both tables. We will use the ClearContents method so as to keep the borders and other formatting of our table. We will only clear the second row of both tables. To do this, we will use the RandStart and AngleStart variables to define the ranges we want to clear. To clear the second row of the random number calculation table: – Range(RandStart.Offset(1, 0), RandStart.Offset(1, 5)).ClearContents To clear the second row of the angle calculation table: – Range(AngleStart.Offset(1, 0), AngleStart.Offset(1, 4)).ClearContents 76 Summary To declare a variable in VBA, use the Dim statement. It is important to remember that VBA for Excel is case-sensitive. A data type categorizes the values that can be assigned to a variable. There are several data types available for variables in VBA, including integer, double, string, Booleans, range, worksheet, and object. There are two types of variable declarations: Public and Private. We declare a private variable using the Dim statement and a public variable using the Public statement. Message Boxes and Input Boxes allow us to communicate with the user using VBA code. A Message Box prints information to a small dialog box, and an Input Box prompts the user to enter information into a small dialog box. There are several math functions in VBA that can be used with variables or values. There are a few trigonometric functions in VBA that you can use with variables or values. You can also derive other functions using the pre-defined VBA functions. There are also several conversion and string functions in VBA. To keep track of variable values while running our code, we can use the Watch Window in order to observe several variable values at once or we can place the cursor over a particular variable in the Code Window. 77 Additional Links (place links here) 78