Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.