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.