Type Statement

Description

Used at module level to define a user-defined data type containing one or more elements.

Syntax

[Private | Public] Type varname
elementname [([subscripts])] As type
[elementname [([subscripts])] As type]
. . .End Type

The Type statement syntax has these parts:

Part

Description

Public

Used to declare user-defined types that are available to all procedures in all modules in all projects.

Private

Used to declare user-defined types that are available only within the module where the declaration is made.

varname

Name of the user-defined type; follows standard variable naming conventions.

elementname

Name of an element of the user-defined type. Element names also follow standard variable naming conventions, except that keywords can be used.

subscripts

Dimensions of an array element. Use only parentheses when declaring an array whose size can change. The subscripts argument uses the following syntax:

[lower To] upper [,[lower To] upper] . . .

When not explicitly stated in lower, the lower bound of an array is controlled by the Option Base statement. The lower bound is zero if no Option Base statement is present.

type

Data type of the element; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String, String * length (for fixed-length strings), Object, Variant, another user-defined type, or an object type.


Remarks

The Type statement can be used only at module level. Once you have declared a user-defined type using the Type statement, you can declare a variable of that type anywhere within the scope of the declaration. Use Dim, Private, Public, ReDim, or Static to declare a variable of a user-defined type.

In standard modules, user-defined types are public by default. This visibility can be changed using the Private keyword. In class modules, however, user-defined types can only be private and the visibility cannot be changed using the Public keyword.

Line numbers and line labels aren’t allowed in Type...End Type blocks.

User-defined types are often used with data records, which frequently consist of a number of related elements of different data types.

The following example shows the use of fixed-size arrays in a user-defined type:


Type StateData(1 To 100) As Integer            ' Declare a static array.As String * 30TypeWashington(1 To 100) As StateData

In the preceding example, StateData includes the CityCode static array, and the record Washington has the same structure as StateData.

When you declare a fixed-size array within a user-defined type, its dimensions must be declared with numeric literals or constants rather than variables.

The setting of the Option Base statement determines the lower bound for arrays within user-defined types.

See Also

Data Type Summary, Dim Statement, Option Base Statement, Private Statement, Public Statement, ReDim Statement, Static Statement.

Specifics (Microsoft Access)

In Microsoft Access, user-defined types in a standard module are public by default. To make a user-defined type in a standard module private, precede the Type statement with the Private keyword.

In a form module or report module, user-defined types are private and cannot be made public.

Example

This example uses the Type statement to define a user-defined data type. The Type statement is used at the module level only. If it appears in a Class Module, a Type statement must be preceded by the keyword Private.


Type EmployeeRecord                ' Create user-defined type.
    ID As Integer                ' Define elements of data type.As String * 20As String * 30As LongAs DateTypeMyRecord As EmployeeRecord    ' Declare variable.
' Assignment to EmployeeRecord variable must occur in a procedure..ID = 12003                ' Assign a value to an element.