Event ステートメント
ユーザー定義イベントを宣言します。
構文
[ パブリック ] イベントプロシージャ名 [ (arglist) ]
Event ステートメントには、次の指定項目があります。
指定項目 | 説明 |
---|---|
Public | 省略可能。 プロジェクト全体でイベントが表示されるように指定します。 Events 型は既定で Public です。 イベントは、それが宣言されている モジュール内でのみ生成できることに注意してください。 |
procedurename | 必須です。 イベントの名前。は、標準変数の名前付け規則に従います。 |
arglist 引数の構文と指定項目は次のとおりです。
[ ByVal | ByRef ] varname [ ( ) ] [ Astype ]
指定項目 | 説明 |
---|---|
ByVal | 省略可能。 引数が値で渡されることを示します。 |
ByRef | 省略可能。 参照渡しで引数が渡されることを示します。 ByRef は、Visual Basic .NET とは異なり、VBA の既定値です。 |
varname | 必須です。 プロシージャに渡される引数を表す変数の名前。は、標準変数の名前付け規則に従います。 |
type | 省略可能。 プロシージャに渡される引数のデータ型。は、Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (現在サポートされていません)、Date、String (可変長のみ)、Object、Variant、ユーザー定義型、またはオブジェクト型のいずれかです。 |
解説
イベントが宣言されたら、 RaiseEvent ステートメントを使用してイベントを発生させます。 Event の宣言が 標準モジュール内にあると、構文エラーが発生します。 値を返すようにイベントを宣言することはできません。 次のフラグメントに示すように、一般的なイベントが宣言され、発生する可能性があります。
' Declare an event at module level of a class module
Event LogonCompleted (UserName as String)
Sub
RaiseEvent LogonCompleted("AntoineJan")
End Sub
注:
イベント引数は、プロシージャの引数と同様に宣言できます。イベントには名前付き引数、 省略可能 な引数、 または ParamArray 引数を指定することはできません。 イベントには戻り値がありません。
例
次の例では、イベントを使用して、最速の 100 メートル走のデモ中にイベントを使用してタイムをカウントします。 コードでは、イベントに関係するすべてのメソッド、プロシージャ、ステートメント (Event ステートメントを含みます) が示されています。
イベントを発生させるクラスはイベント ソース、イベントを実装するクラスはシンクです。 イベント ソースには、生成されたイベントに対して複数のシンクを指定できます。 クラスがイベントを発生させると、そのイベントはすべてのクラス (オブジェクトのインスタンスに対してイベントをシンクするために選択したクラス) で開始されます。
また、この例では、ボタン (Command1
)、ラベル (Label1
)、および 2 つのテキスト ボックス (Text1
と Text2
) を含むフォーム (Form1
) を使用しています。 ボタンをクリックすると、1 番目のテキスト ボックスに "From Now" と表示され、2 番目のテキスト ボックスで秒数のカウントが始まります。 フルタイム (9.84 秒) が経過すると、最初のテキスト ボックスに "Until Now" が表示され、2 番目のテキスト ボックスに "9.84" と表示されます。
コードでは、フォームの初期状態と最終状態を指定しています。 また、イベントの発生時に実行されるコードも含まれます。
Option Explicit
Private WithEvents mText As TimerState
Private Sub Command1_Click()
Text1.Text = "From Now"
Text1.Refresh
Text2.Text = "0"
Text2.Refresh
Call mText.TimerTask(9.84)
End Sub
Private Sub Form_Load()
Command1.Caption = "Click to Start Timer"
Text1.Text = ""
Text2.Text = ""
Label1.Caption = "The fastest 100 meter run took this long:"
Set mText = New TimerState
End Sub
Private Sub mText_ChangeText()
Text1.Text = "Until Now"
Text2.Text = "9.84"
End Sub
Private Sub mText_UpdateTime(ByVal dblJump As Double)
Text2.Text = Str(Format(dblJump, "0"))
DoEvents
End Sub
残りのコードは TimerState という名前のクラス モジュールにあります。 Event ステートメントではイベントが発生すると開始されるプロシージャが宣言されています。
Option Explicit
Public Event UpdateTime(ByVal dblJump As Double)
Public Event ChangeText()
Public Sub TimerTask(ByVal Duration As Double)
Dim dblStart As Double
Dim dblSecond As Double
Dim dblSoFar As Double
dblStart = Timer
dblSoFar = dblStart
Do While Timer < dblStart + Duration
If Timer - dblSoFar >= 1 Then
dblSoFar = dblSoFar + 1
RaiseEvent UpdateTime(Timer - dblStart)
End If
Loop
RaiseEvent ChangeText
End Sub
関連項目
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。