Partilhar via


Instrução RaiseEvent

Dispara um evento declarado no nível do módulo dentro de uma classe, formulário ou documento.

Sintaxe

Nome de eventoRaiseEvent [ ( argumentlist ) ]

O nome de evento necessário é o nome de um evento declarado dentro do módulo e segue convenções básicas de nomenclatura de variável.

A sintaxe da instrução RaiseEvent tem estas partes:

Sair Descrição
Eventname Obrigatório. Nome do evento a ser disparado.
Argumentlist Opcional. Lista delimitada por vírgulas de variáveis, matrizes ou expressões. A lista de argumentos deve ser fechada por parênteses. Se não houver argumentos, os parênteses devem ser omitidos.

Comentários

Se o evento não tiver sido declarado dentro do módulo no qual ele é gerado, ocorrerá um erro. O fragmento a seguir ilustra uma declaração de evento e um procedimento no qual o evento é gerado.

' Declare an event at module level of a class module 
Event LogonCompleted (UserName as String) 
 
Sub 
 ' Raise the event. 
 RaiseEvent LogonCompleted ("AntoineJan") 
End Sub

Se o evento não tiver argumentos, incluindo parênteses vazios na invocação RaiseEvent do evento causará um erro. Você não pode usar RaiseEvent para disparar eventos que não são declarados explicitamente no módulo.

Por exemplo, se um formulário tiver um evento Click , você não poderá disparar seu evento Clique usando RaiseEvent. Se você declarar um evento Click no módulo de formulário, ele será sombreado pelo próprio evento Clique do formulário. Você ainda pode invocar o evento Clique do formulário usando a sintaxe normal para chamar o evento, mas não usando a instrução RaiseEvent .

O disparo de eventos é feito na ordem em que as conexões são estabelecidas. Como os eventos podem ter parâmetros ByRef , um processo que se conecta com atraso pode receber parâmetros que foram alterados por um manipulador de eventos anterior.

Exemplo

O exemplo a seguir usa eventos para contar segundos durante uma demonstração da corrida de 100 metros mais rápida. O código ilustra todos os métodos, propriedades e instruções relacionados ao evento, incluindo a instrução RaiseEvent .

A classe que gera um evento é a origem do evento e as classes que implementam o evento são os coletores. Uma fonte de evento pode ter vários coletores para os eventos gerados. Quando a classe levanta o evento, esse evento é disparado em cada classe que optou por afundar eventos para essa instância do objeto.

O exemplo também usa um formulário (Form1) com um botão (Command1), um rótulo (Label1) e duas caixas de texto (Text1 e Text2). Quando você clica no botão, a primeira caixa de texto exibe De Agora e a segunda começa a contar segundos. Quando o tempo integral (9,58 segundos) tiver decorrido, a primeira caixa de texto exibe Até Agora e a segunda exibe 9,58.

O código especifica os estados iniciais e terminais do formulário. Ele também contém o código executado quando os eventos são gerados.

Option Explicit

Private WithEvents ts As TimerState
Private Const FinalTime As Double = 9.58

Private Sub UserForm_Initialize()
    Command1.Caption = "Click to start timer"
    Text1.Text = vbNullString
    Text2.Text = vbNullString
    Label1.Caption = "The fastest 100 meters ever run took this long:"
    Set ts = New TimerState
End Sub

Private Sub Command1_Click()
    Text1.Text = "From Now"
    Text2.Text = "0"
    ts.TimerTask FinalTime
End Sub

Private Sub ts_UpdateElapsedTime(ByVal elapsedTime As Double)
    Text2.Text = CStr(Format(elapsedTime, "0.00"))
End Sub

Private Sub ts_DisplayFinalTime()
    Text1.Text = "Until now"
    Text2.Text = CStr(FinalTime)
End Sub

O código restante está em um módulo de classe chamado TimerState. Incluídos entre os comandos neste módulo estão as instruções Raise Event .

Option Explicit

Public Event UpdateElapsedTime(ByVal elapsedTime As Double)
Public Event DisplayFinalTime()
Private Const delta As Double = 0.01

Public Sub TimerTask(ByVal duration As Double)
    Dim startTime As Double
    startTime = Timer
    Dim timeElapsedSoFar As Double
    timeElapsedSoFar = startTime
    
    Do While Timer < startTime + duration
        If Timer - timeElapsedSoFar >= delta Then
            timeElapsedSoFar = timeElapsedSoFar + delta
            RaiseEvent UpdateElapsedTime(Timer - startTime)
            DoEvents
        End If
    Loop
    
    RaiseEvent DisplayFinalTime
End Sub

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.