Eventos Excel VBA

Os eventos acontecem o tempo todo quando um usuário abre uma pasta de trabalho do Excel e começa a realizar várias ações, como inserir dados em células ou mover-se entre as planilhas

No Editor do Visual Basic (ALT + F11), as sub-rotinas já estão configuradas e podem ser disparadas quando o usuário faz algo, por exemplo inserir dados em uma célula. A sub-rotina não fornece nenhum código de ação, apenas uma instrução 'Sub' e uma instrução 'End Sub' sem nenhum código entre elas. Eles estão efetivamente inativos, então nada acontece até que você insira algum código.

Aqui está um exemplo baseado no evento ‘Change’ em uma planilha:

Como um programador VBA, você pode adicionar código para fazer certas coisas acontecerem quando o usuário realizar uma ação específica. Isso lhe dá a chance de controlar o usuário e evitar que ele execute ações que você não deseja que ele execute e que podem danificar sua pasta de trabalho. Por exemplo, você pode querer que eles salvem sua própria cópia individual da pasta de trabalho com outro nome, para que não afetem o original, que pode estar sendo usado por vários usuários.

Se eles fecharem a pasta de trabalho, serão automaticamente solicitados a salvar suas alterações. No entanto, a pasta de trabalho tem um evento ‘BeforeClose’ e você pode inserir o código para evitar que a pasta de trabalho seja fechada e acione um evento ‘Salvar’. Você pode então adicionar um botão à própria planilha e colocar sua própria rotina "Salvar" nela. Você também pode desativar a rotina ‘Salvar’ usando o evento ‘BeforeSave’

Uma compreensão de como os eventos funcionam é absolutamente essencial para um programador VBA.

Tipos de eventos

Livro de exercícios Eventos - esses eventos são disparados com base no que o usuário faz com a própria pasta de trabalho. Eles incluem ações do usuário, como abrir a pasta de trabalho, fechar a pasta de trabalho, salvá-la, adicionar ou excluir planilha

Eventos de planilha - esses eventos são disparados por um usuário executando ações em uma planilha específica. Cada planilha dentro da pasta de trabalho tem um módulo de código individual, que contém vários eventos especificamente para essa planilha (não para todas as planilhas). Isso inclui ações do usuário, como alterar o conteúdo de uma célula, clicar duas vezes em uma célula ou clicar com o botão direito em uma célula.

Eventos de controle Active X - Os controles Active X podem ser adicionados a uma planilha usando o ícone ‘Inserir’ na guia ‘Desenvolvedor’ na faixa do Excel. Freqüentemente, são controles de botão para permitir que o usuário execute várias ações sob o controle de seu código, mas também podem ser objetos, como menus suspensos. O uso de controles Active X em oposição aos controles de formulário na planilha oferece um escopo completo para a programação. Os controles Active X oferecem muito mais flexibilidade do ponto de vista da programação em relação ao uso de controles de formulário em uma planilha.

Por exemplo, você pode ter dois controles suspensos em sua planilha. Você deseja que a lista disponível no segundo menu suspenso seja baseada no que o usuário escolheu no primeiro menu suspenso. Usando o evento ‘Change’ no primeiro menu suspenso, você pode criar um código para ler o que o usuário selecionou e, em seguida, atualizar o segundo menu suspenso. Você também pode desativar a segunda lista suspensa até que o usuário tenha feito uma seleção na primeira lista

Eventos UserForm - Você pode inserir e criar um formulário com aparência profissional para usar como pop-up. Todos os controles que você coloca em seu formulário são controles Active X e têm os mesmos eventos que os controles Active X que você pode colocar em uma planilha

Eventos de gráfico - Esses eventos estão relacionados apenas a uma planilha de gráfico e não a um gráfico que aparece como parte de uma planilha. Esses eventos incluem redimensionar o gráfico ou selecionar o gráfico.

Eventos de aplicativos - Eles usam o objeto Aplicativo no VBA. Os exemplos permitem que o código seja disparado quando uma determinada tecla é pressionada ou quando um determinado tempo é atingido. Você pode programar uma situação em que a pasta de trabalho fica aberta 24 horas por dia, 7 dias por semana e importa dados de uma fonte externa durante a noite em um horário pré-determinado.

Perigos do uso de código em eventos

Ao escrever código para fazer algo quando o usuário executa uma determinada ação, você precisa ter em mente que seu código pode estar disparando outros eventos, o que pode colocar seu código em um loop contínuo.

Por exemplo, suponha que você use o evento ‘Alterar’ em uma planilha para que, quando o usuário colocar um valor em uma célula, um cálculo baseado nessa célula seja colocado na célula imediatamente à direita dela.

O problema aqui é que a colocação do valor calculado na célula dispara outro evento 'Change', que por sua vez aciona outro evento 'Change', e assim por diante até que seu código fique sem colunas para usar e lance uma mensagem de erro.

Você precisa pensar com cuidado ao escrever o código do evento para garantir que outros eventos não sejam acionados inadvertidamente

Desativar eventos

Você pode usar o código para desabilitar eventos para contornar esse problema. O que você precisa fazer é incorporar o código para desativar eventos enquanto o código do evento está em execução e, em seguida, reativar os eventos no final do código. Aqui está um exemplo de como fazer isso:

1234 Sub DisableEvents ()Application.EnableEvents = FalseApplication.EnableEvents = TrueEnd Sub

Lembre-se de que isso desativa todos os eventos no aplicativo Excel, portanto, isso também afetaria outras funções do Excel. Se você usar isso por qualquer motivo, certifique-se de que os eventos sejam reativados depois.

Importância dos parâmetros em eventos

Os eventos geralmente têm parâmetros que você pode usar para descobrir mais sobre o que o usuário está fazendo e a localização da célula em que ele está.

Por exemplo, o evento de alteração da planilha tem a seguinte aparência:

1 Sub-planilha privada_Change (ByVal Target As Range)

Usando o objeto de intervalo, você pode descobrir as coordenadas de linha / coluna da célula em que o usuário está realmente.

1234 Sub-planilha privada_Change (ByVal Target As Range)MsgBox Target.ColumnMsgBox Target.RowEnd Sub

Se você deseja que seu código funcione apenas em uma determinada coluna ou número de linha, adicione uma condição que saia da sub-rotina se a coluna não for a necessária.

123 Sub-planilha privada_Change (ByVal Target As Range)If Target.Column 2 Then Exit SubEnd Sub

Isso contorna o problema de seu código disparar vários eventos, uma vez que só funcionará se o usuário tiver alterado uma célula na coluna 2 (coluna B)

Exemplos de eventos de pasta de trabalho (não exaustivos)

Os eventos da pasta de trabalho são encontrados no objeto ‘ThisWorkbook’ no VBE Project Explorer. Você precisará selecionar 'Workbook' na primeira lista suspensa na janela de código e, em seguida, a segunda lista suspensa mostrará todos os eventos disponíveis

Evento de abertura da pasta de trabalho

Este evento é disparado sempre que a pasta de trabalho é aberta por um usuário. Você pode usá-lo para enviar uma mensagem de boas-vindas a um usuário, capturando seu nome de usuário

123 Sub Workbook_Open ()MsgBox "Welcome" & Application.UserNameEnd Sub

Você também pode verificar o nome de usuário em uma lista mantida em uma folha oculta para ver se eles estão autorizados a acessar a pasta de trabalho. Se ele não for um usuário autorizado, você poderá exibir uma mensagem e fechar a pasta de trabalho para que ele não possa usá-la.

Novo evento de planilha da pasta de trabalho

Este evento é disparado quando um usuário adiciona uma nova planilha à pasta de trabalho

Você poderia usar este código apenas para permitir a si mesmo adicionar uma nova planilha, em vez de ter usuários diferentes, todos adicionando planilhas e bagunçando a pasta de trabalho

1234567 Sub Workbook_NewSheet privada (ByVal Sh As Object)Application.DisplayAlerts = FalseIf Application.UserName "Richard" ThenSh.DeleteFim seApplication.DisplayAlerts = TrueEnd Sub

Observe que você precisa desligar os alertas, pois um aviso do usuário aparecerá quando a planilha for excluída, o que permite ao usuário contornar o seu código. Certifique-se de ativar os alertas novamente depois!

Cansado de procurar exemplos de código VBA? Experimente o AutoMacro!

Livro de exercícios antes de salvar o evento

Este evento é acionado quando o usuário clica no ícone ‘Salvar’, mas antes que ‘Salvar’ realmente ocorra

Conforme descrito anteriormente, você pode evitar que os usuários salvem suas alterações na pasta de trabalho original e forçá-los a criar uma nova versão usando um botão na planilha. Tudo o que você precisa fazer é alterar o parâmetro ‘Cancelar’ para Verdadeiro, e a pasta de trabalho nunca poderá ser salva pelo método convencional.

123 Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel as Boolean)Cancelar = VerdadeiroEnd Sub

Livro de exercícios antes do encerramento do evento

Você pode usar esse evento para impedir que os usuários fechem a pasta de trabalho e, novamente, forçá-los a sair por meio de um botão de planilha. Novamente, você define o parâmetro ‘Cancelar’ como ‘Verdadeiro’. O X vermelho no canto superior direito da janela do Excel não funciona mais.

123 Private Sub Workbook_BeforeClose (Cancelar como Booleano)Cancelar = VerdadeiroEnd Sub

Exemplos de eventos de planilha (não exaustivos)

Os eventos de planilha são encontrados no objeto de nome de planilha específico no VBE Project Explorer. Você precisará selecionar ‘Planilha’ na primeira lista suspensa da janela de código e, em seguida, a segunda lista suspensa mostrará todos os eventos disponíveis

Evento de mudança de planilha

Este evento é acionado quando um usuário faz uma alteração em uma planilha, como inserir um novo valor em uma célula

Você pode usar este evento para colocar um valor adicional ou comentário próximo à célula alterada, mas como discutido anteriormente, você não deseja iniciar um loop de eventos.

12345 Sub-planilha privada_Change (ByVal Target As Range)If Target.Column 2 Then Exit SubActiveSheet.Cells (Target.Row, Target.Column + 1). Valor = _ActiveSheet.Cells (Target.Row, Target.Column). Valor * 1,1End Sub

Neste exemplo, o código só funcionará se o valor for inserido na coluna B (coluna 2). Se isso for verdade, ele irá adicionar 10% ao número e colocá-lo na próxima célula disponível

Planilha antes do evento de duplo clique

Este evento irá disparar o código se um usuário clicar duas vezes em uma célula. Isso pode ser extremamente útil para relatórios financeiros, como um balanço ou conta de lucros e perdas, onde os números são suscetíveis de serem contestados pelos gerentes, especialmente se o resultado final for negativo!

Você pode usar isso para fornecer um recurso de detalhamento, de modo que, quando o gerente desafia um número específico, tudo o que eles precisam fazer é clicar duas vezes no número e a divisão aparece como parte do relatório.

Isso é muito impressionante do ponto de vista do usuário e evita que ele pergunte constantemente "por que esse número é tão alto?"

Você precisaria escrever um código para descobrir o título / critérios para o número (usando as propriedades do objeto Destino) e, em seguida, filtrar os dados tabulares e copiá-los para o relatório.

Programação VBA | O Code Generator funciona para você!

Planilha de ativação de evento

Este evento ocorre quando o usuário passa de uma folha para outra. Ele se aplica à nova planilha para a qual o usuário está se movendo.

Ele pode ser usado para garantir que a nova planilha seja completamente calculada antes que o usuário comece a fazer qualquer coisa nela. Também pode ser usado para recalcular apenas aquela planilha específica, sem recalcular a pasta de trabalho inteira. Se a pasta de trabalho for grande e tiver uma fórmula complicada, recalcular uma planilha economizará muito tempo

123 Sub-planilha privada_Activate ()ActiveSheet.CalculateEnd Sub

Eventos de controle Active X (não exaustivos)

Conforme discutido anteriormente, você pode adicionar controles Active X diretamente em uma planilha. Podem ser botões de comando, menus suspensos e caixas de listagem

Os eventos Active X são encontrados no objeto de nome de folha específico (onde você adicionou o controle) no VBE Project Explorer. Você precisará selecionar o nome do controle Active X no primeiro menu suspenso na janela de código e, em seguida, o segundo menu suspenso mostrará todos os eventos disponíveis

Evento de clique de botão de comando

Depois de colocar um botão de comando em uma planilha, você desejará que ele execute alguma ação. Você faz isso colocando o código no evento Click.

Você pode facilmente colocar uma mensagem "Tem certeza?" Para que uma verificação seja feita antes que seu código seja executado

12345 Private Sub CommandButton1_Click ()Dim ButtonRet As VariantButtonRet = MsgBox ("Tem certeza que deseja fazer isso?", VbQuestion Or vbYesNo)If ButtonRet = vbNo Then Exit SubEnd Sub

Evento de alteração suspenso (caixa de combinação)

Uma lista suspensa Active X tem um evento de alteração, de forma que se um usuário selecionar um item específico da lista suspensa, você pode capturar sua escolha usando este evento e, em seguida, escrever o código para adaptar outras partes da planilha ou pasta de trabalho de acordo.

123 Sub ComboBox1_Change privado ()MsgBox "Você selecionou" & ComboBox1.TextEnd Sub

Programação VBA | O Code Generator funciona para você!

Caixa de seleção (caixa de seleção) Evento de clique

Você pode adicionar uma marca ou caixa de seleção a uma planilha para fornecer opções de opções para o usuário. Você pode usar o evento click nele para ver se o usuário mudou alguma coisa nele. Os valores retornados são True ou False, dependendo se foi marcado ou não.

123 Sub CheckBox1_Click privada ()MsgBox CheckBox1.ValueEnd Sub

Eventos de formulário de usuário (não exaustivos)

O Excel oferece a capacidade de criar seus próprios formulários. Eles podem ser muito úteis para usar como pop-ups para coletar informações ou fornecer várias opções para o usuário. Eles usam controles Active X conforme descrito anteriormente e têm exatamente os mesmos eventos, embora os eventos dependam muito do tipo de controle.

Aqui está um exemplo de um formulário simples:

Quando é exibido, é o que parece na tela

Você usaria eventos no formulário para fazer coisas como inserir um nome de empresa padrão quando o formulário for aberto, para verificar se a entrada do nome da empresa está de acordo com o que já está na planilha e não foi escrito incorretamente e para adicionar código ao clique eventos nos botões 'OK' e 'Cancelar'

O código e os eventos por trás do formulário podem ser vistos clicando duas vezes em qualquer lugar do formulário

A primeira lista suspensa dá acesso a todos os controles do formulário. O segundo menu suspenso dará acesso aos eventos

Evento de ativação do UserForm

Este evento é acionado quando o formulário é ativado, normalmente quando é exibido. Este evento pode ser usado para definir valores padrão, por exemplo, um nome de empresa padrão na caixa de texto do nome da empresa

123 Subutilizador PrivadoForm_Activate ()TextBox1.Text = "Nome da minha empresa"End Sub

Programação VBA | O Code Generator funciona para você!

Mudar Evento

A maioria dos controles no formulário tem um evento de mudança, mas neste exemplo, a caixa de texto do nome da empresa pode usar o evento para colocar uma restrição no comprimento do nome da empresa que está sendo inserido

123456 Private Sub TextBox1_Change ()Se Len (TextBox1.Text)> 20 ThenMsgBox "O nome é restrito a 20 caracteres", vbCriticalTextBox1.Text = ""Fim seEnd Sub

Clique em Evento

Você pode usar este evento para executar ações desde o usuário clicando nos controles do formulário, ou até mesmo no próprio formulário

Neste formulário há um botão ‘OK’ e, tendo coletado o nome de uma empresa, gostaríamos de colocá-lo em uma célula da planilha para referência futura

1234 Private Sub CommandButton1_Click ()ActiveSheet.Range ("A1"). Value = TextBox1.TextMe.HideEnd Sub

Este código atua quando o usuário clica no botão ‘OK’. Ele coloca o valor na caixa de entrada do nome da empresa na célula A1 na planilha ativa e, em seguida, oculta o formulário para que o controle do usuário seja retornado à planilha.

Eventos de gráfico

Os eventos de gráfico funcionam apenas em gráficos que estão em uma folha de gráfico separada, e não em um gráfico incorporado em uma planilha padrão

Os eventos do gráfico são um tanto limitados e não podem ser usados ​​em uma planilha onde você pode ter vários gráficos. Além disso, os usuários não querem necessariamente mudar de uma planilha contendo números para uma planilha de gráfico - não há impacto visual imediato aqui

O evento mais útil seria descobrir o componente de um gráfico em que um usuário clicou, por exemplo, um segmento em um gráfico de pizza ou uma barra em um gráfico de barras, mas este não é um evento disponível no intervalo padrão de eventos.

Este problema pode ser resolvido usando um módulo de classe para adicionar um evento ‘Mouse Down’ que retornará detalhes do componente do gráfico em que o usuário clicou. Isso é usado em um gráfico dentro de uma planilha.

Isso envolve uma codificação muito complicada, mas os resultados são espetaculares. Você pode criar detalhamentos, por exemplo o usuário clica em um segmento de gráfico de pizza e instantaneamente esse gráfico é oculto e um segundo gráfico aparece em seu lugar, mostrando um gráfico de pizza de detalhes para o segmento original, ou você pode produzir os dados tabulares que suportam esse segmento do gráfico de pizza.

Eventos de aplicativos

Você pode usar o objeto Application no VBA para disparar o código de acordo com um determinado evento

Programação VBA | O Code Generator funciona para você!

Application.OnTime

Isso pode permitir que você dispare um trecho de código em intervalos regulares, desde que a pasta de trabalho seja carregada no Excel. Você pode salvar automaticamente sua pasta de trabalho em uma pasta diferente a cada 10 minutos ou deixar a planilha em execução durante a noite para trazer os dados mais recentes de uma fonte externa.

Neste exemplo, uma sub-rotina é inserida em um módulo. Ele exibe uma caixa de mensagem a cada 5 minutos, embora esse possa ser facilmente outro procedimento codificado. Ao mesmo tempo, ele zera o cronômetro para a hora atual mais 5 minutos.

Cada vez que é executado, o cronômetro é redefinido para executar a mesma sub-rotina em mais 5 minutos.

1234 Sub TestOnTime ()MsgBox "Testing OnTime"Application.OnTime (Now () + TimeValue ("00:05:00")), "TestOnTime"End Sub

Application.OnKey

Esta função permite que você crie suas próprias teclas de atalho. Você pode fazer com que qualquer combinação de teclas chame uma sub-rotina de sua criação.

Neste exemplo, a letra 'a' é redirecionada para que, em vez de colocar um 'a' em uma célula, ele exiba uma caixa de mensagem. Este código precisa ser colocado em um módulo inserido.

123456 Sub TestKeyPress ()Application.OnKey "a", "TestKeyPress"End SubSub TestKeyPress ()MsgBox "Você pressionou 'a'"End Sub

Você executa a sub-rotina ‘TestKeyPress’ em primeiro lugar. Você só precisa executar isso uma vez. Ele informa ao Excel que toda vez que a letra 'a' for pressionada, ele chamará a sub-rotina 'TestKeyPress'. A sub-rotina ‘TestKeyPress’ exibe apenas uma caixa de mensagem para informar que você pressionou a tecla ‘a’. Ele pode, é claro, carregar um formulário ou fazer todos os tipos de outras coisas.

Você pode usar qualquer combinação de teclas que pode ser usada com a função ‘SendKeys’

Para cancelar esta funcionalidade, você executa a instrução ‘OnKey’ sem o parâmetro ‘Procedure’.

123 Sub CancelOnKey ()Application.OnKey "a"End Sub

Tudo voltou ao normal.

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave