次の方法で共有


Event ステートメント

ユーザー定義イベントを宣言します。

構文

[ パブリック ] イベントプロシージャ名 [ (arglist) ]

Event ステートメントには、次の指定項目があります。

指定項目 説明
Public 省略可能。 プロジェクト全体でイベントが表示されるように指定します。 Events 型は既定で Public です。 イベントは、それが宣言されている モジュール内でのみ生成できることに注意してください。
procedurename 必須です。 イベントの名前。は、標準変数の名前付け規則に従います。

arglist 引数の構文と指定項目は次のとおりです。

[ ByVal | ByRef ] varname [ ( ) ] [ Astype ]

指定項目 説明
ByVal 省略可能。 引数値で渡されることを示します。
ByRef 省略可能。 参照渡しで引数が渡されることを示します。 ByRef は、Visual Basic .NET とは異なり、VBA の既定値です。
varname 必須です。 プロシージャに渡される引数を表す変数の名前。は、標準変数の名前付け規則に従います。
type 省略可能。 プロシージャに渡される引数のデータ型。は、ByteBooleanIntegerLongCurrencySingleDoubleDecimal (現在サポートされていません)、DateString (可変長のみ)、ObjectVariantユーザー定義型、またはオブジェクト型のいずれかです。

解説

イベントが宣言されたら、 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 つのテキスト ボックス (Text1Text2) を含むフォーム (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 のサポートおよびフィードバックを参照してください。