Compartilhar via


Instrução RaiseEvent

Aciona um evento declarado ao nível do módulo numa classe, formulário ou documento.

Sintaxe

RaiseEventeventname [ ( argumentlist ) ]

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

A sintaxe da instrução RaiseEvent tem as seguintes 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. A lista de argumentos tem de estar entre parênteses. Se não existirem argumentos, os parênteses têm de ser omitidos.

Comentários

Se o evento não tiver sido declarado no módulo em que é gerado, ocorre um erro. O fragmento seguinte 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 na invocação RaiseEvent do evento, ocorrerá um erro. Não pode utilizar o RaiseEvent para acionar eventos que não são explicitamente declarados no módulo.

Por exemplo, se um formulário tiver um evento Clique , não poderá acionar o evento Clique utilizando RaiseEvent. Se declarar um evento Clique no módulo de formulário, este sombrea o evento Click do próprio formulário. Ainda pode invocar o evento Clique do formulário através da sintaxe normal para chamar o evento, mas não através da instrução RaiseEvent .

O acionamento de eventos é feito pela ordem em que as ligações são estabelecidas. Uma vez que os eventos podem ter parâmetros ByRef , um processo que se liga atrasado pode receber parâmetros que foram alterados por um processador de eventos anterior.

Exemplo

O exemplo seguinte utiliza 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 com 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 sinks. Uma origem de eventos pode ter vários sinks para os eventos gerados. Quando a classe gera o evento, esse evento é acionado em todas as classes que optaram por afundar eventos para essa instância do objeto.

O exemplo também utiliza um formulário (Form1) com um botão (Command1), uma etiqueta (Label1) e duas caixas de texto (Text1 e Text2). Quando clica no botão, a primeira caixa de texto é apresentada A Partir de Agora e a segunda começa a contar segundos. Quando o tempo integral (9,58 segundos) tiver decorrido, a primeira caixa de texto é apresentada Até Agora e a segunda apresenta 9,58.

O código especifica os estados iniciais e terminais do formulário. 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á num módulo de classe denominado TimerState. Estão incluídas entre os comandos neste módulo 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.