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.