Compartilhar via


Instrução Event

Declara um evento definido pelo utilizador.

Sintaxe

[ Público ] Eventprocedurename [ (arglist) ]

A instrução Evento tem as seguintes partes:

Sair Descrição
Public Opcional. Especifica que o Evento está visível em todo o projeto. Os tipos de eventos são Públicos por predefinição. Tenha em atenção que os eventos só podem ser gerados no módulo no qual são declarados.
procedurename Obrigatório. Nome do evento; segue as convenções de nomenclatura de variáveis padrão.

O argumento listadeargumentos tem as seguintes sintaxe e partes:

[ ByVal | ByRef ] varname [ ( ) ] [ Comotipo ]

Sair Descrição
ByVal Opcional. Indica que o argumento é transmitido por valor.
ByRef Opcional. Indica se o argumento será passado por referência. ByRef é a predefinição no VBA, ao contrário do Visual Basic .NET.
nomedavariável Obrigatório. Nome da variável que representa o argumento que está a ser transmitido ao procedimento; segue as convenções de nomenclatura de variáveis padrão.
type Opcional. Tipo de dados do argumento transmitido ao procedimento; podem ser Byte, Booleano, Número Inteiro, Longo, Conversor de Moedas, Único, Duplo, Decimal (não suportado atualmente), Data, Cadeia (apenas comprimento de variável), Objeto, Variante, um tipo definido pelo utilizador ou um tipo de objeto.

Comentários

Depois de o evento ter sido declarado, utilize a instrução RaiseEvent para acionar o evento. Ocorrerá um erro de sintaxe se for apresentada uma declaração de Evento num módulo padrão. Não é possível declarar um evento para devolver um valor. Um evento típico pode ser declarado e gerado conforme mostrado nos seguintes fragmentos.

' Declare an event at module level of a class module 
 
Event LogonCompleted (UserName as String) 
 
Sub 
 RaiseEvent LogonCompleted("AntoineJan") 
End Sub

Observação

Pode declarar argumentos de eventos tal como os argumentos dos procedimentos, com as seguintes exceções: os eventos não podem ter argumentos nomeados, Argumentos opcionais ou argumentos paramarray . Os eventos não têm valores devolvidos.

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 Evento .

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 apresenta "A Partir de Agora" e a segunda começa a contar segundos. Quando o tempo integral (9,84 segundos) tiver decorrido, a primeira caixa de texto apresenta "Até Agora" e a segunda apresenta "9,84".

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 mText As TimerState 
 
Private Sub Command1_Click() 
 Text1.Text = "From Now" 
 Text1.Refresh 
 Text2.Text = "0" 
 Text2.Refresh 
Call mText.TimerTask(9.84) 
End Sub 
 
Private Sub Form_Load() 
 Command1.Caption = "Click to Start Timer" 
 Text1.Text = "" 
 Text2.Text = "" 
 Label1.Caption = "The fastest 100 meter run took this long:" 
 Set mText = New TimerState 
 End Sub 
 
Private Sub mText_ChangeText() 
 Text1.Text = "Until Now" 
 Text2.Text = "9.84" 
End Sub 
 
Private Sub mText_UpdateTime(ByVal dblJump As Double) 
 Text2.Text = Str(Format(dblJump, "0")) 
 DoEvents 
End Sub

O código restante está num módulo de classe denominado TimerState. As declarações de Evento declaram os procedimentos iniciados quando os eventos são gerados.

Option Explicit 
Public Event UpdateTime(ByVal dblJump As Double)
Public Event ChangeText() 
 
Public Sub TimerTask(ByVal Duration As Double) 
 Dim dblStart As Double 
 Dim dblSecond As Double 
 Dim dblSoFar As Double 
 dblStart = Timer 
 dblSoFar = dblStart 
 
 Do While Timer < dblStart + Duration 
 If Timer - dblSoFar >= 1 Then 
 dblSoFar = dblSoFar + 1 
 RaiseEvent UpdateTime(Timer - dblStart) 
 End If 
 Loop 
 
 RaiseEvent ChangeText 
 
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.