Previous Page

Creating Your Own Data Types

You can combine variables of several different types to create user-defined types (known as structures in the C programming language). User-defined types are useful when you want to create a single variable that records several related pieces of information.

Declaring a User-Defined Type

You create a user-defined type with the Type statement, which must be placed in the Declarations section of a standard module. User-defined types can be declared as Private or Public with the appropriate keyword, as shown in the following examples:

Private Type YourType
Public Type YourType

For example, you could create a user-defined type that records information about a computer system by placing the following code in the Declarations section of any standard module:

Public Type SystemInfo
   varCPU As Variant
   lngMemory As Long
   intVideoColors As Integer
   curCost As Currency
   dtePurchase As Variant
End Type

Declaring Variables of a User-Defined Type

You can declare local, private module-level, or public module-level variables of the same user-defined type. For example:

Dim sysMine As SystemInfo, sysYours As SystemInfo

The following table illustrates where, and with what scope, you can declare user-defined types and their variables.

Procedure/Module

You can create a
user-defined type as

Variables of a
user-defined type can be

Procedures

Not applicable

Not applicable

Standard modules

Private or public

Private or public

Form or report modules

Private only

Private only

   

Assigning and Retrieving Values

Assigning and retrieving values from the elements of a user-defined variable is similar to setting and getting properties.

sysMine.varCPU = "486"
If sysMine.dtePurchase > #1/1/92# Then

You can also assign one variable to another if they are both of the same user-defined type. This assigns all the elements of one variable to the same elements in the other variable.

sysYours = sysMine

User-Defined Types That Contain Arrays

A user-defined type can contain an ordinary (fixed-size) array, as shown in the following example:

Type SystemInfo
   varCPU As Variant
   lngMemory As Long
   strDiskDrives(25) As String         ' Fixed-size array.
   intVideoColors As Integer
   curCost As Currency
   dtePurchase As Variant
End Type

It can also contain a dynamic array:

Type SystemInfo
   varCPU As Variant
   lngMemory As Long
   strDiskDrives() As String            ' Dynamic array.
   intVideoColors As Integer
   curCost As Currency
   dtePurchase As Variant
End Type

You can access the values in an array within a user-defined type in the same way that you access the property of an object. For example:

Dim sysMine As SystemInfo
sysMine.strDiskDrives(0) = "1.44 MB"

You can also declare an array of user-defined types:

Dim sysAll(100) As SystemInfo

Follow the same rules to access the components of each element in the array:

sysAll(5).varCPU = "386SX"
sysAll(intX).strDiskDrives(2) = "100M SCSI"

See Also   For more information on arrays, see "Arrays" later in this chapter.

Declaring Procedure Arguments

You can declare procedure arguments with a user-defined type.

Sub FillSystem(sysAny As SystemInfo)
   sysAny.varCPU = "486"
   sysAny.lngMemory = "24"
   sysAny.curCost = "$3000.00"
   sysAny.dtePurchase = Now
End Sub

Note   If you want to pass a user-defined type in a form or report module, the procedure must be private.

You can return user-defined types from functions, and you can pass a user-defined type variable to a procedure as one of the arguments. Because user-defined types are always passed by reference, the procedure can modify the argument and return it to the calling procedure, as illustrated in the previous example.

User-Defined Types That Contain Objects

User-defined types can also contain objects. For example:

Private Type AccountPack
   frmInput As Form
   dbsPayRollAccount As Database
End Type

Tip   Because the Variant data type can store many different types of data, a Variant array can be used in many situations where you may expect to use a user-defined type. A Variant array is actually more flexible than a user-defined type, because you can change the type of data you store in each element at any time, and you can make the array dynamic so that you can change its size as necessary. However, a Variant array always uses more memory than an equivalent user-defined type.

Nesting Data Structures

Nesting data structures can get as complex as you want. In fact, user-defined types can contain other user-defined types, as shown in the following example. To make your code more readable and easier to debug, try to keep all the code that defines user-defined types in one module. For example:

Type DriveInfo
   Type As String
   Size As Long
End Type
Type SystemInfo
   varCPU As Variant
   lngMemory As Long
   strDiskDrives(26) As DriveInfo
   curCost As Currency
   dtePurchase As Variant
End Type

The following code demonstrates how you can refer to a nested user-defined type:

Dim sysAll(100) As SystemInfo
sysAll(1).strDiskDrives(0).Type = "Floppy"

© 1996 Microsoft Corporation. All rights reserved.

Next Page


Casa de Bender