Instrução RaiseEvent

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

Sintaxe

RaiseEventeventeventname [ ( argumentlist ) ]

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

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

Sair Descrição
Nome do evento Obrigatório. Nome do evento a ser acionado.
argumentlist Opcional. Lista delimitada por vírgulas de variáveis, matrizes ou expressões. O argumentlist deve ser delimitado por parênteses. Se não houver argumentos, os parênteses deverão 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 Demo()
 ' Raise the event. 
 RaiseEvent LogonCompleted ("AntoineJan") 
End Sub

Se o evento não tiver argumentos, incluindo parênteses vazios no RaiseEvent , a invocação 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 Click usando RaiseEvent. Se você declarar um evento Click no módulo de formulário, ele sombreará o próprio evento Click do formulário. Você ainda pode invocar o evento Click do formulário usando a sintaxe normal para chamar o evento, mas não usando a instrução RaiseEvent .

O disparo de evento é feito na ordem em que as conexões são estabelecidas. Como os eventos podem ter parâmetros ByRef , um processo que se conecta tarde 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 a eventos, 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 origem de evento pode ter vários coletores para os eventos que ela gera. Quando a classe gera o evento, esse evento é acionado 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 A partir de agora e a segunda começa a contar os segundos. Quando o tempo completo (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 inicial e terminal 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 deste 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.