Um guia avançado de VBA para MS Excel
Se você está apenas começando com VBA , então você vai querer começar a estudar nosso guia VBA para iniciantes(VBA guide for beginners) . Mas se você for um especialista em VBA experiente e estiver procurando por coisas mais avançadas que pode fazer com o VBA no Excel , continue lendo.
A capacidade de usar a codificação VBA no (VBA)Excel abre todo um mundo de automação. Você pode automatizar cálculos no Excel , botões e até mesmo enviar e-mail. Há mais possibilidades de automatizar seu trabalho diário com o VBA do que você imagina.
Guia VBA Avançado para Microsoft Excel(Advanced VBA Guide For Microsoft Excel)
O principal objetivo de escrever código VBA no (VBA)Excel é extrair informações de uma planilha, realizar vários cálculos nela e, em seguida, gravar os resultados de volta na planilha.
A seguir estão os usos mais comuns do VBA no Excel .
- Importar(Import) dados e realizar cálculos
- Calcular(Calculate) resultados de um usuário pressionando um botão
- Resultados de cálculo por e- mail(Email) para alguém
Com esses três exemplos, você poderá escrever uma variedade de seu próprio código VBA avançado do Excel .(Excel VBA)
Importando dados e realizando cálculos(Importing Data and Performing Calculations)
Uma das coisas mais comuns para as quais as pessoas usam o Excel é realizar cálculos em dados que existem fora do Excel . Se você não usa VBA , isso significa que você precisa importar os dados manualmente, executar os cálculos e enviar esses valores para outra planilha ou relatório.
Com o VBA , você pode automatizar todo o processo. Por exemplo, se você tiver um novo arquivo CSV baixado em um diretório em seu computador toda segunda- feira(Monday) , poderá configurar seu código VBA para ser executado quando abrir sua planilha pela primeira vez na terça(Tuesday) -feira de manhã.
O código de importação a seguir será executado e importará o arquivo CSV para sua planilha do Excel(Excel) .
Dim ws As Worksheet, strFile As String Set ws = ActiveWorkbook.Sheets("Sheet1") Cells.ClearContents strFile = “c:\temp\purchases.csv” With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1")) .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True .Refresh End With
Abra a ferramenta de edição Excel VBA e selecione o objeto Sheet1 . Nas caixas suspensas de objeto e método, escolha Planilha(Worksheet) e Ativar(Activate) . Isso executará o código toda vez que você abrir a planilha.
Isso criará uma função Sub Worksheet_Activate() . Cole o código acima nessa função.
Isso define a planilha ativa como Sheet1 , limpa a planilha, conecta-se ao arquivo usando o caminho do arquivo que você definiu com a variável strFile e, em seguida, o loop With percorre todas as linhas do arquivo e coloca os dados na planilha começando na célula A1 .
Se você executar esse código, verá que os dados do arquivo CSV são importados para sua planilha em branco, em Sheet1 .
A importação é apenas o primeiro passo. Em seguida, você deseja criar um novo cabeçalho para a coluna que conterá os resultados do cálculo. Neste exemplo, digamos que você queira calcular os 5% de impostos pagos na venda de cada item.
A ordem das ações que seu código deve executar é:
- Crie uma nova coluna de resultados chamada impostos(taxes) .
- Percorra a coluna de unidades vendidas(units sold) e calcule o imposto sobre vendas.
- Escreva os resultados do cálculo na linha apropriada da planilha.
O código a seguir realizará todas essas etapas.
Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double
Set StartCell = Range("A1")
'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))
rowCounter = 2
Cells(1, 5) = "taxes"
For Each cell In rng
fltTax = cell.Value * 0.05
Cells(rowCounter, 5) = fltTax
rowCounter = rowCounter + 1
Next cell
Este código encontra a última linha em sua planilha de dados e, em seguida, define o intervalo de células (a coluna com os preços de venda) de acordo com a primeira e a última linha de dados. Em seguida, o código percorre cada uma dessas células, executa o cálculo do imposto e grava os resultados em sua nova coluna (coluna 5).
Cole o código VBA acima abaixo do código anterior e execute o script. Você verá os resultados aparecerem na coluna E.
Agora, toda vez que você abrir sua planilha do Excel(Excel) , ela sairá automaticamente e obterá a cópia mais recente dos dados do arquivo CSV . Em seguida, realizará os cálculos e escreverá os resultados na folha. Você não precisa mais fazer nada manualmente!
Calcular resultados ao pressionar o botão(Calculate Results From Button Press)
Se preferir ter um controle mais direto sobre quando os cálculos são executados, em vez de executar automaticamente quando a planilha é aberta, você pode usar um botão de controle.
Os botões de controle(Control) são úteis se você deseja controlar quais cálculos são usados. Por exemplo, neste mesmo caso acima, e se você quiser usar uma alíquota de 5% para uma região e uma alíquota de 7% para outra?
Você pode permitir que o mesmo código de importação CSV seja executado automaticamente, mas deixe o código de cálculo de imposto em execução quando você pressionar o botão apropriado.
Usando a mesma planilha acima, selecione a guia Desenvolvedor(Developer) e selecione Inserir(Insert) no grupo Controles(Controls) na faixa de opções. Selecione o botão (push button) Controle ActiveX(ActiveX Control) no menu suspenso.
Desenhe o botão em qualquer parte da folha longe de onde quaisquer dados irão.
Clique com o botão direito do mouse no botão de comando e selecione Propriedades(Properties) . Na janela Propriedades(Properties) , altere a Legenda para o que você gostaria de exibir ao usuário. Nesse caso, pode ser Calculate 5% Tax .
Você verá este texto refletido no próprio botão. Feche a janela de propriedades(properties) e clique duas vezes no próprio botão. Isso abrirá a janela do editor de código e seu cursor estará dentro da função que será executada quando o usuário pressionar o botão.
Cole o código de cálculo do imposto da seção acima nesta função, mantendo o multiplicador da taxa de imposto em 0,05. Lembre-se de incluir as 2 linhas a seguir para definir a planilha ativa.
Dim ws As Worksheet, strFile As String
Set ws = ActiveWorkbook.Sheets("Sheet1")
Agora, repita o processo novamente, criando um segundo botão de pressão. Faça a legenda Calculate 7% Tax .
Clique duas vezes(Double-click) nesse botão e cole o mesmo código, mas torne o multiplicador de impostos 0,07.
Agora, dependendo de qual botão você pressionar, a coluna de impostos será calculada de acordo.
Quando terminar, você terá os dois botões na sua folha. Cada um deles iniciará um cálculo de imposto diferente e escreverá resultados diferentes na coluna de resultados.
Para enviar um texto, selecione o menu Desenvolvedor(Developer) e selecione Modo de Design(Design Mode) no grupo Controles(Controls) na faixa de opções para desabilitar o Modo de Design(Design Mode) . Isso ativará os botões de pressão.
Tente selecionar cada botão para ver como a coluna de resultados de “impostos” muda.
Enviar resultados de cálculo por e-mail para alguém(Email Calculation Results to Someone)
E se você quiser enviar os resultados da planilha para alguém por e-mail?
Você pode criar outro botão chamado Email Sheet to Boss usando o mesmo procedimento acima. O código para este botão envolverá o uso do objeto CDO do Excel para definir as configurações de email (Excel CDO)SMTP e enviar os resultados por email em um formato legível pelo usuário.
Para habilitar esse recurso, você precisa selecionar Ferramentas e Referências(Tools and References) . Role para baixo até a Biblioteca do Microsoft CDO para Windows 2000(Microsoft CDO for Windows 2000 Library) , habilite-a e selecione OK .
Existem três seções principais no código que você precisa criar para enviar um e-mail e incorporar os resultados da planilha.
A primeira é configurar variáveis para conter o assunto, os endereços de e para e o corpo do e-mail .(From)
Dim CDO_Mail As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim strSubject As String
Dim strFrom As String
Dim strTo As String
Dim strCc As String
Dim strBcc As String
Dim strBody As String
Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double
Set ws = ActiveWorkbook.Sheets("Sheet1")
strSubject = "Taxes Paid This Quarter"
strFrom = "[email protected]"
strTo = "[email protected]"
strCc = ""
strBcc = ""
strBody = "The following is the breakdown of taxes paid on sales this quarter."
É claro que o corpo precisa ser dinâmico dependendo de quais resultados estão na planilha, então aqui você precisará adicionar um loop que percorra o intervalo, extraia os dados e grave uma linha por vez no corpo.
Set StartCell = Range("A1") 'Find Last Row and Column LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4)) rowCounter = 2 strBody = strBody & vbCrLf For Each cell In rng strBody = strBody & vbCrLf strBody = strBody & "We sold " & Cells(rowCounter, 3).Value & " of " & Cells(rowCounter, 1).Value _ & " for " & Cells(rowCounter, 4).Value & " and paid taxes of " & Cells(rowCounter, 5).Value & "." rowCounter = rowCounter + 1 Next cell
A próxima seção envolve a configuração das configurações de SMTP para que você possa enviar e-mails por meio do servidor SMTP . Se você usa o Gmail , geralmente é seu endereço de e-mail do Gmail , sua senha do Gmail e o servidor (Gmail)SMTP(Gmail SMTP) do Gmail (smtp.gmail.com).
Set CDO_Mail = CreateObject("CDO.Message") On Error GoTo Error_Handling Set CDO_Config = CreateObject("CDO.Configuration") CDO_Config.Load -1 Set SMTP_Config = CDO_Config.Fields With SMTP_Config .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com" .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password" .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True .Update End With With CDO_Mail Set .Configuration = CDO_Config End With
Substitua [email protected] e senha pelos detalhes da sua própria conta.
Por fim, para iniciar o envio de e-mail, insira o seguinte código.
CDO_Mail.Subject = strSubject
CDO_Mail.From = strFrom
CDO_Mail.To = strTo
CDO_Mail.TextBody = strBody
CDO_Mail.CC = strCc
CDO_Mail.BCC = strBcc
CDO_Mail.Send
Error_Handling:
If Err.Description <> "" Then MsgBox Err.Description
Observação(Note) : se você vir um erro de transporte ao tentar executar esse código, é provável que sua conta do Google esteja bloqueando a execução de "aplicativos menos seguros". Você precisará visitar a página de configurações de aplicativos menos seguros(less secure apps settings page) e ativar esse recurso.
Após habilitar, seu e-mail será enviado. Isso é o que parece para a pessoa que recebe seu e-mail de resultados gerados automaticamente.
Como você pode ver, há muito que você pode realmente automatizar com o Excel VBA . Tente brincar com os trechos de código que você aprendeu neste artigo e crie suas próprias automações VBA exclusivas.(VBA)
Related posts
O melhor guia VBA (para iniciantes) que você precisará
Como criar uma macro ou script VBA no Excel
Um guia para todas as extensões de arquivo do Excel e o que elas significam
Como excluir linhas em branco no Excel
Corrigir a mensagem de erro "Não é possível verificar a licença" do MS Office
4 maneiras de converter Excel para Planilhas Google
Planilhas Google vs Microsoft Excel – Quais são as diferenças?
Como criar uma tabela dinâmica simples no Excel
Centralize seus dados de planilha no Excel para impressão
Como inserir rapidamente várias linhas no Excel
Como calcular o Z-Score no Excel
Por que você deve usar intervalos nomeados no Excel
Usando a ferramenta de busca de meta de análise de variações hipotéticas do Excel
Como mesclar células, colunas e linhas no Excel
Como criar várias listas suspensas vinculadas no Excel
Verifique todos os hiperlinks em um documento do MS Word em segundos
Agrupar linhas e colunas em uma planilha do Excel
Como usar instruções if e if aninhadas no Excel
Soletrar rapidamente números no Word e Excel
2 maneiras de usar a função de transposição do Excel