Excel 2019 Power Programming with VBA. Michael Alexander. Читать онлайн. Newlib. NEWLIB.NET

Автор: Michael Alexander
Издательство: John Wiley & Sons Limited
Серия:
Жанр произведения: Программы
Год издания: 0
isbn: 9781119514916
Скачать книгу
"Sheet2"

      An array is a group of elements of the same type that have a common name. You refer to a specific element in the array by using the array name and an index number. For example, you can define an array of 12 string variables so that each variable corresponds to the name of a month. If you name the array MonthNames, you can refer to the first element of the array as MonthNames(0), the second element as MonthNames(1), and so on, up to MonthNames(11).

      You declare an array with a Dim or Public statement, just as you declare a regular variable. You can also specify the number of elements in the array. You do so by specifying the first index number, the keyword To, and the last index number—all inside parentheses. For example, here's how to declare an array comprising exactly 100 integers:

      Dim MyArray(1 To 100) As Integer

      TIP

      When you declare an array, you need to specify only the upper index, in which case VBA assumes that 0 is the lower index. Therefore, the two statements that follow have the same effect:

      Dim MyArray(0 To 100) As Integer Dim MyArray(100) As Integer

      In both cases, the array consists of 101 elements.

      Option Base 1

      Declaring multidimensional arrays

      The array examples in the preceding section are one-dimensional arrays. VBA arrays can have up to 60 dimensions, although you'll rarely need more than three dimensions (a 3D array). The following statement declares a 100-integer array with two dimensions (2D):

      Dim MyArray(1 To 10, 1 To 10) As Integer

      You can think of the preceding array as occupying a 10 × 10 matrix. To refer to a specific element in a 2D array, you need to specify two index numbers. For example, here's how you can assign a value to an element in the preceding array:

      MyArray(3, 4) = 125

      The following is a declaration for a 3D array that contains 1,000 elements (visualize this array as a cube):

      Dim MyArray(1 To 10, 1 To 10, 1 To 10) As Integer

      Reference an item in the array by supplying three index numbers.

      MyArray(4, 8, 2) = 0

      Declaring dynamic arrays

      A dynamic array doesn't have a preset number of elements. You declare a dynamic array with a blank set of parentheses.

      Dim MyArray() As Integer

      Before you can use a dynamic array in your code, however, you must use the ReDim statement to tell VBA how many elements are in the array. You can use a variable to assign the number of elements in an array. Often the value of the variable isn't known until the procedure is executing. For example, if the variable x contains a number, you can define the array's size by using this statement:

      ReDim MyArray (1 To x)

      You can use the ReDim statement any number of times, changing the array's size as often as you need. When you change an array's dimensions, the existing values are destroyed. If you want to preserve the existing values, use ReDim Preserve. Here's an example:

      ReDim Preserve MyArray (1 To y)

      Arrays crop up later in this chapter when we discuss looping (see the section “Looping blocks of instructions”).

      An object variable is one that represents an entire object, such as a range or a worksheet. Object variables are important for two reasons.

       They can simplify your code significantly.

       They can make your code execute more quickly.

      Object variables, like normal variables, are declared with the Dim or Private or Public statement. For example, the following statement declares InputArea as a Range object variable:

      Dim InputArea As Range

      Use the Set keyword to assign an object to the variable. Here's an example:

      Set InputArea = Range("C16:E16")

      To see how object variables simplify your code, examine the following procedure, which doesn't use an object variable:

      Sub NoObjVar() Worksheets("Sheet1").Range("A1").Value = 124 Worksheets("Sheet1").Range("A1").Font.Bold = True Worksheets("Sheet1").Range("A1").Font.Italic = True Worksheets("Sheet1").Range("A1").Font.Size = 14 Worksheets("Sheet1").Range("A1").Font.Name = "Cambria" End Sub

      This routine enters a value into cell A1 of Sheet1 on the active workbook, applies some formatting, and changes the fonts and size. That's a lot of typing. To reduce wear and tear on your fingers (and make your code more efficient), you can condense the routine with an object variable.

      Sub ObjVar() Dim MyCell As Range Set MyCell = Worksheets("Sheet1").Range("A1") MyCell.Value = 124 MyCell.Font.Bold = True MyCell.Font.Italic = True MyCell.Font.Size = 14 MyCell.Font.Name = "Cambria" End Sub

      After the variable MyCell is declared as a Range object, the Set statement assigns an object to it. Subsequent statements can then use the simpler MyCell reference in place of the lengthy Worksheets("Sheet1").Range("A1") reference.

      TIP

      After an object is assigned to a variable, VBA can access it more quickly than it can a normal, lengthy reference that has to be resolved. So, when speed is critical, use object variables. One way to think about code efficiency is in terms of dot processing. Every time VBA encounters a dot, as in Sheets(1).Range("A1"), it takes time to resolve the reference. Using an object variable reduces the number of dots to be processed. The fewer the dots, the faster the processing time. Another way to improve the speed of your code is by using the With-End With construct, which also reduces the number of dots to be processed. We discuss this construct later in this chapter.

      VBA lets you create custom, or user-defined, data types. A user-defined data type can ease your work with some types of data. For example, if your application deals with customer information, you may want to create a user-defined data type named CustomerInfo.

      Type CustomerInfo Company As String Contact As String RegionCode As Long Sales As Double End Type

      NOTE

      You define custom data types at the top of your module, before any procedures.

      After you create a user-defined data type, you use a Dim statement to declare a variable as that type. Usually, you define an array. Here's an example:

      Dim Customers(1 To 100) As CustomerInfo

      Each of the 100