Module ステートメントModule Statement

モジュールの名前を宣言し、モジュールを構成する変数、プロパティ、イベント、およびプロシージャの定義を提供します。Declares the name of a module and introduces the definition of the variables, properties, events, and procedures that the module comprises.

構文Syntax

[ <attributelist> ] [ accessmodifier ]  Module name
    [ statements ]
End Module

指定項目Parts

attributelist
任意。Optional. 属性リスト」を参照してください。See Attribute List.

accessmodifier
任意。Optional. 次のいずれかの値を指定します。Can be one of the following:

Access levels in Visual Basic」を参照してください。See Access levels in Visual Basic.

name
必須です。Required. このモジュールの名前です。Name of this module. Declared Element Names」を参照してください。See Declared Element Names.

statements
任意。Optional. このモジュールの変数、プロパティ、イベント、プロシージャ、および入れ子にされた型を定義するステートメントです。Statements which define the variables, properties, events, procedures, and nested types of this module.

End Module
Module の定義を終了します。Terminates the Module definition.

RemarksRemarks

Module ステートメントは、名前空間全体で使用できる参照型を定義します。A Module statement defines a reference type available throughout its namespace. モジュール (標準モジュールと呼ばれることもあります) はクラスに似ていますが、いくつかの重要な違いがあります。A module (sometimes called a standard module) is similar to a class but with some important distinctions. すべてのモジュールにはインスタンスが 1 つだけあり、変数を作成したり、変数に割り当てたりする必要はありません。Every module has exactly one instance and does not need to be created or assigned to a variable. モジュールは、継承をサポートしたり、インターフェイスを実装したりしません。Modules do not support inheritance or implement interfaces. モジュールはクラスまたは構造体の意味でではないことに注意してください。モジュールのデータ型を持つようにプログラミング要素を宣言することはできません。Notice that a module is not a type in the sense that a class or structure is — you cannot declare a programming element to have the data type of a module.

Module は、名前空間レベルでのみ使用できます。You can use Module only at namespace level. つまり、モジュールの宣言コンテキストは、ソース ファイルまたは名前空間である必要があり、クラス、構造体、モジュール、インターフェイス、プロシージャ、またはブロックにすることはできません。This means the declaration context for a module must be a source file or namespace, and cannot be a class, structure, module, interface, procedure, or block. モジュールは、別のモジュール内、または任意の型の中で入れ子にすることはできません。You cannot nest a module within another module, or within any type. 詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。For more information, see Declaration Contexts and Default Access Levels.

モジュールの有効期間はプログラムと同じです。A module has the same lifetime as your program. そのメンバーはすべて Shared であるため、有効期間もプログラムと同じになります。Because its members are all Shared, they also have lifetimes equal to that of the program.

モジュールは、既定で Friend アクセスに設定されます。Modules default to Friend access. アクセス修飾子を使用してこれらのアクセス レベルを調整できます。You can adjust their access levels with the access modifiers. 詳しくは、「Visual Basic でのアクセス レベル」を参照してください。For more information, see Access levels in Visual Basic.

モジュールのすべてのメンバーは、暗黙的に Shared です。All members of a module are implicitly Shared.

クラスとモジュールClasses and Modules

これらの要素には多くの類似点がありますが、重要な相違点もいくつかあります。These elements have many similarities, but there are some important differences as well.

  • 用語。Terminology. 以前のバージョンの Visual Basic では、クラス モジュール (.cls ファイル) と標準モジュール (.bas ファイル) の 2 種類のモジュールを認識します。Previous versions of Visual Basic recognize two types of modules: class modules (.cls files) and standard modules (.bas files). 現在のバージョンでは、これらのクラスモジュールをそれぞれ呼び出します。The current version calls these classes and modules, respectively.

  • 共有メンバー。Shared Members. クラスのメンバーが共有メンバーかインスタンス メンバーかを制御できます。You can control whether a member of a class is a shared or instance member.

  • オブジェクト指向。Object Orientation. クラスはオブジェクト指向ですが、モジュールはそうではありません。Classes are object-oriented, but modules are not. そのため、オブジェクトとしてインスタンス化できるのはクラスだけです。So only classes can be instantiated as objects. 詳細については、オブジェクトとクラスに関するページを参照してください。For more information, see Objects and Classes.

ルールRules

  • 修飾子。Modifiers. すべてのモジュール メンバーは、暗黙的に Shared です。All module members are implicitly Shared. メンバーを宣言するときに Shared キーワードを使用することはできません。また、メンバーの共有ステータスを変更することもできません。You cannot use the Shared keyword when declaring a member, and you cannot alter the shared status of any member.

  • 継承。Inheritance. モジュールは、Object 以外の型を継承できません。すべてのモジュールが、この型を継承します。A module cannot inherit from any type other than Object, from which all modules inherit. 特に、モジュールは別のモジュールからは継承できません。In particular, one module cannot inherit from another.

    Object を指定する場合でも、モジュールの定義で Inherits ステートメントを使用することはできません。You cannot use the Inherits Statement in a module definition, even to specify Object.

  • 既定のプロパティ。Default Property. モジュールでは、既定のプロパティを定義することはできません。You cannot define any default properties in a module. 詳細については、「Default」を参照してください。For more information, see Default.

動作Behavior

  • アクセス レベル。Access Level. モジュールの内部では、各メンバーを独自のアクセス レベルで宣言できます。Within a module, you can declare each member with its own access level. モジュール メンバーは、既定で Private アクセスに設定される変数と定数を除き、既定で Public アクセスに設定されます。Module members default to Public access, except variables and constants, which default to Private access. モジュールがそのメンバーのいずれかよりもアクセスが制限されている場合は、指定されたモジュールのアクセス レベルが優先されます。When a module has more restricted access than one of its members, the specified module access level takes precedence.

  • 範囲Scope. モジュールは、その名前空間全体をスコープとします。A module is in scope throughout its namespace.

    すべてのモジュール メンバーのスコープは、モジュール全体になります。The scope of every module member is the entire module. すべてのメンバーで型の上位変換が行われることに注意してください。これにより、そのスコープがモジュールを含む名前空間に昇格します。Notice that all members undergo type promotion, which causes their scope to be promoted to the namespace containing the module. 詳細については、「型の上位変換」を参照してください。For more information, see Type Promotion.

  • 修飾。Qualification. プロジェクトには複数のモジュールを含めることができ、2 つ以上のモジュールで同じ名前のメンバーを宣言できます。You can have multiple modules in a project, and you can declare members with the same name in two or more modules. ただし、このようなメンバーへの参照は、そのモジュールの外部から参照されている場合は、適切なモジュール名で修飾する必要があります。However, you must qualify any reference to such a member with the appropriate module name if the reference is from outside that module. 詳細については、「 References to Declared Elements」を参照してください。For more information, see References to Declared Elements.

Example

Public Module thisModule
    Sub Main()
        Dim userName As String = InputBox("What is your name?")
        MsgBox("User name is " & userName)
    End Sub
    ' Insert variable, property, procedure, and event declarations.
End Module

関連項目See also