Dicas de VBA – Eventos em Excel

Por Jorge Paulino para o Pplware

A execução de macros em Excel, está normalmente associada a um botão ou um objecto, no entanto existem diversas formas de executar macros, que podem simplificar bastante a automação na folha de cálculo. Este artigo pretende mostrar alguns exemplos simples de alguns dos eventos mais importantes e mais utilizados em VBA.

NOTA: Neste artigo será usado o Microsoft Excel 2010 mas o mesmo se aplica a versões anteriores com o Microsoft Excel 2003 ou o Microsoft Excel 2007.


Quando entramos no editor de VBA, o VBE (Visual Basic Editor), existem alguns objectos no explorador do projecto: um objecto por cada folha disponível (Sheet), e um objecto global (ThisWorkBook).

Objecto Sheet

No objecto Sheet, temos os eventos relativos apenas para essa folha, como por exemplo:

  • Change: Quando é efectuada alguma alteração em alguma célula;
  • SelectionChange: Quando é alterada a selecção;
  • BeforeRightClick: Antes de clicar com o botão direito;
  • Calculate: Quando é efectuada uma operação que obrigue a cálculos;

Existem mais disponíveis mas estes são talvez os mais utilizados. Por exemplo, o BeforeRightClick permite-nos criar um menu personalizado quando clicamos com o botão direito do rato, o Calculate permite-nos correr um código quando existem cálculos, etc, etc.

Por exemplo, se queremos executar qualquer código quando alteramos um valor numa determinada área, podemos utilizar o evento Change. Deste modo verificamos se a nossa área – range - coincide com a célula alterada, utilizando a função Intersect(), e executamos o nosso código.

Private Sub Worksheet_Change(ByVal Target As Range)
 ' Verifica se a célula modificada está entre o range B2:B10
         If Not Intersect(Range("B2:B10"), Target) Is Nothing Then
             MsgBox("Executar código!")
         End If
     End Sub

Objecto ThisWorkBook

No objecto ThisWorkBook estão os eventos comuns a todas as folhas e os eventos gerais, como por exemplo:

  • Workbook_Open: Quando o documento é aberto
  • Workbook_BeforeClose: Quando o documento é fechado (antes de fechar)
  • Workbook_BeforeSave: Quando o documento vai ser gravado
  • Workbook_NewSheet: Quando é adicionada uma nova folha
  • Workbook_SheetChange: Quando é alterado qualquer célula em qualquer folha
  • Workbook_SheetActivate: Quando uma folha é activada

Estes são apenas alguns dos eventos que estão disponíveis e que podem ser utilizados.

Por exemplo, se queremos saber qual a folha – Worksheet – que foi seleccionada, podemos fazer:

    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
         Dim sheet As Worksheet
         sheet = Sh
         MsgBox(sheet.Name)
     End Sub

Ou ainda, evitar que o documento seja fechado:

    Private Sub Workbook_BeforeClose(ByVal Cancel As Boolean)
         Dim msg As String
         msg = "Deseja fechar o documento ?"
         ' Cancela o encerramento do documento
         If MsgBox(msg, vbYesNo) <> vbYes Then
             Cancel = True
         End If
     End Sub

Como podem ver, existem vários eventos que podemos utilizar para melhorar os nossas folhas de cálculo, através do VBA, e com bastantes aplicações.

Para breve mais dicas de como melhorar o código em VBA!

Página Pessoal do Autor: Jorge Paulino

  
     Pin It  

Arquivado na categoria: Informática, Programação


7 Comentários

  1. Obrigado pelo tópico.

  2. Já aprendi mais alguma coisa. Obrigado

  3. Obrigada pela dica!
    Aguardo pelas próximas :)

  4. O código abaixo nao está funcionando…

    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim sheet As Worksheet
    sheet = Sh
    MsgBox(sheet.Name)
    End Sub

    Variável de objeto ou variável do bloco With não definida (Erro 91)

    Alguem sabe o que está faltando?

Deixe o seu comentário

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste site ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. O autor deste site reserva-se, desde já, o direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação do seu autor (nome completo e endereço válido de email) também poderão ser excluídos.