Dicas de VBA – Eventos em Excel

10 Comentários

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

Comentários

10

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de jemexx
    jemexx

    Obrigado pelo tópico.

  2. Avatar de hug
    hug

    Já aprendi mais alguma coisa. Obrigado

  3. Avatar de Pedro A.
    Pedro A.

    Muito bom…

  4. Avatar de Marta Sousa
    Marta Sousa

    Obrigada pela dica!
    Aguardo pelas próximas 🙂

  5. Avatar de Luiz
    Luiz

    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?

    1. Avatar de Paulo Silva

      Qual o conteúdo da tua variável Sh?

      1. Avatar de Jorge Paulino

        Para atribuir um objecto a uma variável usar-se a keyword SET.

        Assim deve funcionar:

        Private Sub Workbook_SheetActivate(ByVal Sh As Object)
        Dim sheet As Worksheet

        Set sheet = Sh
        MsgBox(sheet.Name)

        End Sub

  6. Avatar de Diego Silva
    Diego Silva

    Legal o artigo.
    Obrigado pela dica.
    Foi de grande ajuda para meu estudos.
    Estou cursando o excel com vba pelo adv, http://www.cursoadv.com.br.
    O site está muito legal.

  7. Avatar de Elton Felipe
    Elton Felipe

    Bom dia, existe alguma maneira de executar MACRO quando a célula for alterada ? sem que eu precise passar ou tocar na célula.?

  8. Avatar de Domingos
    Domingos

    Boa tarde, utilizei o método change para executar um código quando houvesse uma mudança de valor da célula A3 por exemplo, mas não ocorreu a execução do código quando houve a mudança no valor da célula. A mudança do valor ocorre através de um link DDE. Observei que quando esta mudança do valor é feita manualmente, funciona mas através do link DDE, NÃO. Você sabe me explicar pq???
    Abs