Comandos do VBA - Excel
COPIAR DE UMA CÉLULA PARA OUTRA – VBA Sub copiar() Range("b5").Select ‘ Célula que vai ser copiada Selection.Copy Range("a2").Select ‘ Célula que vai receber o conteudo copiado ActiveSheet.Paste Sheets(“plan2”).Select ‘ Seleciona a planilha 2 Range(“a1”).Select ‘ Seleciona a célula A1 da planilha 2 ActiveSheet.Paste ‘ Cola na célula A1 da planilha 2 Application.CutCopyMode Application.CutCopyMo de = False ‘ Desseleciona a célula que foi copiada End Sub PULA PARA A CÉLULA VAZIA ABAIXO (PREENCHIMENTO DE FORMULÁRIO) Private Sub CommandButton1_Click() Range("a3").Select Selection.EntireRow.Insert 'Insere Selection.EntireRow.Insert 'Insere uma linha na planilha Range("a3") = TextBox1.Text 'Recebe TextBox1.Text 'Recebe o conteudo da textbox1 Range("b3") = TextBox2.Text Range("a3").Select End Sub RowCount = Worksheets("Plan1").Range(" Worksheets("Plan1").Range("A1").CurrentRegio A1").CurrentRegion.Rows.Count n.Rows.Count Worksheets("Plan1").Range("A1").Offset(RowCo Worksheets("Plan1").Range(" A1").Offset(RowCount, unt, 0).Value = TextBox1.Text
COMANDO PROCV NO VBA EXCEL Sub Teste_PROCV() [G1].FormulaLocal = "=PROCV(F1;A1:B20;2;0)" End Sub
MsgBox – Concatenando (&) MsgBox "O maior é: " & valor2, , "resultado" ‘O título da msgbox sera “resultado”, e a ‘mensagem que aparecerá aparecerá será “O maior é: &valor2”, &valor2”, sendo que o sinal & junta ‘(concatena) ‘(concatena) a mensagem com a variável valor2 (será mostrado o valor da variável).
Iniciando o formulário junto com a planilha Abra o editor VBA, clique em EstaPasta_de_trabalho, na tela ao lado escolha workbooks e depois escreva o código: Userform1.Open ‘Userform1 é o nome do formulário, que pode ser outro nome Ficará assim: Private Sub Workbook_Open() UserForm1.Show ‘UserForm1 é o nome do formulário End Sub
SELECIONAR VARIAS LINHAS Sub Seleciona() Set myunion = Union(Range("a1"), Range("d5"), Range("b1:b5")) myunion.Select End Sub
PULAR LINHA Private Sub PularLinha_Click() ActiveCell.Offset(1, 0).Activate ‘ Esse comando vai pulando para a linha de baixo ActiveCell.Offset(-1, ActiveCell.Offset(-1, 0).Activate ‘ Esse comando vai pulando para a linha de cima ActiveCell.Offset(0, 1).Activate ‘ Esse comando vai pulando para a célula da direita ActiveCell.Offset(0, -1).Activate ‘ Esse comando vai pulando para a célula da esquerda ActiveCell.Offset(1, 0).Range("b2").Select ‘ 0).Range("b2").Select ‘ Pula uma linha para baixo a partir da célula “B2” End Sub
Comandos do VBA - Excel
FORMATANDO A CÉLULA Range("d4").Interior.ColorIndex = 36 ’ 36 é referente a cor amarela Range(“a1”).HorizontalAlignment = xlCenter ‘ Centraliza o conteúdo da célula ActiveCell.BorderAround (1) ‘ Adiciona borda, o numero entre parenteses refere-se ao ‘ tipo de borda. 1 = Borda Simples e 9 = Borda Dupla [b2].BorderAround (9) ‘ Também adciona borda este método ActiveCell.Characters.Font.Size = 22 ‘ Altera o tamanho da Fonte ActiveCell.Characters.Font.Name = "algerian" ‘ Altera o tipo da fonte para Algerian [b2].Characters.Font.Name = "algerian" ‘ Esse método também altera a fonte ActiveCell.Characters(Start:=2, Length:=2).Font.Name = “Algerian” ‘ Esse método muda somente a partir da 2° letra (Start := 2) do que estiver escrito na célula selecionada e apenas 2 caracteres (Length := 2). Por exemplo: Se digita-se “marcelo” na célula apenas a letra “a” e “r” ficaria no estilo Algerian. ActiveCell.Font.FontStyle = "itálico" ‘ Mudo o estilo da Fonte Columns("b:b").AutoFit ‘ Adapta o tamanho da coluna ao tamanho da escrita Rows("2:2").AutoFit ‘ Adapta o tamanho da linha ao tamanho da escrita Range("b3").FormulaLocal = "=pri.maiuscula(b2)" ‘ converte a incial da String em maiúscula, no caso” b3” recebe a string digitada em “b2” com a inicial já maiúscula Rows("1:1").RowHeight = 18 ‘ Aumenta o tamanho da linha Columns("b:b").ColumnWidth = 20 ‘ Aumenta o tamanho da coluna Range("a2") = UCase(Range("a1")) ‘ A célula “A2” recebe a string digitada em “A1” (minúscula) já convertido em maiúsculo.
ADCIONANDO COMENTÁRIOS Range("b2").AddComment ("Marcelo") ‘Adciona o comentário “Marcelo” na célula B2 ActiveCell.AddComment (“Marcelo”) Adciona ‘ o comentário “Marcelo” na célula selecionada ActiveCell.ClearComments ‘ Limpa o comentário ActiveCell.AddComment.Text Text:="Marcelo" & Chr(10) & "maisa" ‘ Adciona comentário, “chr(10)” é para pular linha
COMANDO FIND (PESQUISAR) Private Sub CommandButton1_Click() On Error GoTo erro ‘ Comando para imprimir mensangem de erro se nada for encontrado If TextBox1.Text = "" Then ‘ Imprime uma mensagem se a pesquisa estiver em branco MsgBox "Informe o valor a ser procurado", , "Pesquisar" End If Cells.Find(what:=TextBox1, after:=ActiveCell, lookat:=xlPart).Activate ‘ Comando para pesquisar Exit Sub erro: MsgBox "Nada encontrado", , "ERRO" ‘Mensagem de erro(especificado acima) quando o texto pesquisado não é encontrado End Sub
CONTADOR DE REGISTROS Label1 = Application.WorksheetFunction.CountA(Plan1.Columns(1)) ‘Contador para a coluna 1, caso queira começar a contar a partir de uma determinada linha coloque por exemplo: -1 para contar a partir da segunda linha da coluna escolhida, no exemplo aqui coluna 1 (Columns(1)) Label1 = (Application.WorksheetFunction.CountIf(Columns("a:a"), TextBox1.Text)) ‘ Nesse exemplo é contado as células que se repetem de acordo com o critério adotado, aqui “TextBox1.Text” ira receber algum texto e se esse texto se repetir na Coluna A então será contado quantas vezes se repetiu.
CRIANDO UM CONTADOR COM O BOTAO “SPINBUTTON” Private Sub SpinButton_SpinDown() ‘ Procedimento do botão SpinButton declarado na
Comandos do VBA - Excel Parte superior (Relativo ao botão “para baixo” cont = cont – 1 ‘Quando clicar na seta para baixo irá decrementar If cont < 0 Then ‘ Se for menor zero entao fica como valor minimo 0 (zero) cont = 0 End If Label1.Caption = cont ‘ Label que recebe o valor do contador End Sub
Private Sub SpinButton_SpinUp() ‘ Relativo ao botão “para cima” cont = cont + 1 ‘ Quando clicar na seta para cima irá incrementar Label1.Caption = cont ‘ Label que recebe o valor do contador End Sub
CRIANDO UM CONTADOR COM O BOTÃO “SCROLLBAR” Private Sub ScrollBar1_Change() ‘ Contador clicando nas setas para cima e para baixo cont = ScrollBar1.Value Label1.Caption = cont End Sub Private Sub ScrollBar1_Scroll() ‘ Contador clicando no meio da scrollbar arrastando-a cont = ScrollBar1.Value Label1.Caption = cont End Sub
NAVEGANDO ENTRE AS CÉLULAS COM O BOTÃO “SpinButton” Private Sub contador_SpinDown() ‘ Move uma célula para baixo ActiveCell.Offset(1, 0).Activate End Sub Private Sub contador_SpinUp() ‘ Move uma célula para cima ActiveCell.Offset(-1, 0).Activate End Sub
NAVEGANDO ENTRE AS CÉLULAS COM O BOTAO “ScrollBar” Public cont As Integer Dim soma As Integer Private Sub ScrollBar1_Change() soma = cont cont = ScrollBar1.Value If cont > soma Then ActiveCell.Offset(1, 0).Activate Else ActiveCell.Offset(-1, 0).Activate End If Label1.Caption = cont End Sub
COLORINDO CÉLULAS Sub CORES() Range("A1").SelecT For I = 1 To 56 ColorIndex = I ActiveCell.Interior.ColorIndex = ColorIndex ActiveCell.Offset(1, 0).Activate Next End Sub Sub CORES()
Comandos do VBA - Excel
Range("A1").Select For I = 1 To 10 For J = 1 To 5 ColorIndex = I ActiveCell.Interior.ColorIndex = ColorIndex ActiveCell.Offset(1, 0).Activate Next ActiveCell.Offset(0, 1).Activate ActiveCell.Offset(-5, 0).Activate Next End Sub
FUNÇÃO ONTIME Public Sub ExecutaOnTime() MsgBox "Opa! Executou." End Sub Public Sub TesteOnTime() ‘ Executa determinada função de acordo com o tempo especificado, no exemplo abaixo irá excutar a MsgBox “Opa! Executor após 10 seg. Call Application.OnTime(Now + TimeValue("00:00:10"), "ExecutaOnTime") End Sub
RELÓGIO Public Sub StartTimer() Application.OnTime EarliestTime:=Time + TimeValue("00:00:01"), Procedure:="AtualizaRelogio" End Sub Public Sub StopTimer() Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), Procedure:="AtualizaRelogio", Schedule:=False End Sub Public Sub AtualizaRelogio() On Error Resume Next Worksheets(1).Range("A1").Value = Worksheets(1).Range("A1").Value + TimeValue("00:00:01") Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), Procedure:="AtualizaRelogio" End Sub
CONFIRMANDO DECISÕES COM O MsgBox Sub teste() Dim resultado As VbMsgBoxResult resultado = MsgBox("deseja sair?", vbYesNo, "testando") If resultado = vbYes Then ‘ Se clicar em “Sim” MsgBox "voce clicou em ok" Else MsgBox "voce clicou em nao" ‘ Clicar em não End If End Sub
Constante Valor Descrição vbOK
1
OK
vbCancel
2
Cancelar
vbAbort
3
Abortar
vbRetry
4
Repetir
vbIgnore
5
Ignorar
vbYes
6
Sim
vbNo
7
Não
MOSTRAR MENSAGEM EM HORARIO ESPECIFICADO Sub teste() Application.OnTime earliesttime:=TimeValue("10:54AM"), PROCEDURE:="TESTE2" ‘ Chama a “Sub Teste2” no horario especificado: 10:54AM). End Sub Sub teste2() MsgBox "Ola Marcelo" End Sub
Comandos do VBA - Excel
CÉLULA PISCANDO Exemplo 1 Sub Piscar() Range("a1").Interior.ColorIndex = 3 ‘ Coloca a cor vermelha na célula ativa Application.OnTime Now + TimeValue("00:00:01"), "Tempo" ‘ Excecuta o procedimento End Sub ‘ Tempo de 1 em 1 segundo Sub Tempo() Range("a1").Interior.ColorIndex = xlNone ‘ Descolore a célula ativa Application.OnTime Now + TimeValue("00:00:01"), "Piscar" ‘ Executa o procedimento End Sub ‘ Piscar 1 em 1 segundo Exemplo 2 Sub pisca() Dim x As Integer Dim pausa As Currency Dim inicio As Date For x = 1 To 40 'total de piscadas pausa = 0.2 'duração da pausa entre as piscadas em segundos inicio = Timer ' hora inicial Do While Timer < inicio + pausa DoEvents 'submeta a outros processos Loop If Range("b10").Interior.ColorIndex = 6 Then Range("b10").Interior.ColorIndex = 3 Else Range("b10").Interior.ColorIndex = 6 End If Next x End Sub FOR
For i = 4 To 1 Step -1 Next
'
DECREMENTADO
Da direita para a esquerda
COMANDO FOR EACH E ARRAYS
Sub inicializa_arrays() Dim arrays_pais(5) As String ‘ Arrays de 0 a 5 espaços Dim contador As Integer For contador = 0 To UBound(arrays_pais) – 1 ‘ Conta o tamanho do array (Ubound) arrays_pais(contador) = InputBox("Nome do pais: ") Next For Each pais In arrays_pais ‘ Percorre o array MsgBox pais ‘ Variável (pais) qualquer que irá receber sucessivamente os valores do array Next End Sub
ARRAY DINÂMICO Redim x(6) ‘ Modifica o tamanho do Array “x” mas apaga todos os outros valores anteriores. Redim Preserve x(6) ‘ Modifica o tamanho do Array “x”, mas preserva os valores anteriores.
STRING Cstr() ‘ Converte uma expressão em String Range("b3") = Len(Range("b2")) ‘ Este exemplo retorna na célula “B3” o tamanho da String digitada na célula “B2” nome = Chr(34) & "marcelo" & Chr(34) ‘ Chr(34) imprime o Aspas dupla (“ “) Dim nome As string * 20 ‘Define uma string fixa de 20 caracteres COMPARA = "MARCELO" Like "MARCELO" ‘ COMPARA é uma variavel qualquer e o seu valor nesse exemplo é “Verdadeiro”
Comandos do VBA - Excel COMPARA = "MARCELO" Like "Marcelo" ‘ Aqui o resultado seria falso Str(número) ‘ Converte um valor numérico em String Len(String) ‘ Determina o número de caracteres da String String(Tamanho,String) ‘ Cria uma String igual ao tamanho especificado e que contém o primeiro caracter da String Lcase(String) ‘ Converte a String para minúscula Ucase(String) ‘ Converte a String para maiúscula Split(String) ‘ Divide uma String e retorna as Substrings como um array de strings Exemplo: Private Sub CommandButton1_Click() Dim i As Integer Dim vetor As Variant vetor = Split(TextBox1.Text) 'ListBox1.Clear For i = LBound(vetor) To UBound(vetor) ListBox1.AddItem i & vbTab & vetor(i) Next End Sub ‘ Se substituirmos o código por Vetor = Split(Textbox1.text, , 2), iremos obter 2 substrings. Podemos também acrescentar por exemplo a consoante “s”, para indicar onde a divisão irá ocorrer, por exemplo: Private Sub CommandButton1_Click() Dim i As Integer Dim vetor As Variant vetor = Split(TextBox1.Text, “s”) ListBox1.Clear For i = LBound(vetor) To UBound(vetor) ListBox1.AddItem i & vbTab & vetor(i) Next End Sub
Private Sub CommandButton1_Click() Dim frase As String Dim vetor As Variant frase = "Avaliação do impacto do treinamento no trabalho do programador" vetor = Split(frase, " do ") MsgBox " 'do' aparece na texto ' " & frase & " ' " & UBound(vetor) & " vezes." End Sub ‘ No exemplo acima estaremos contando quantas vezes a preposição “do” aparece no texto citado. Se quiser contar quantas vezes a substring “do” aparece (nesse caso não é preposição, então iria contar o “do” de “programador” também) é só mudar o código: Split(frase,” do “) por Split(frase,”do”), sem os espaços entre as aspas. StrReverse(String) ‘ Retorna uma String com os caracteres invertidos Replace(string, StrProcura, StrSubstPor, Inicio, Contador, Compare) String: É a String a ser alterada. StrProcura: É a String(0u Caracter) a ser procurado na String. StrSubsPor: É a String (Ou caracter) usada para substituir a String(StrProcura). Início: Indica o início da busca por StrProcura (É opcional). Contador: Indica o número máximo de vezes que a String StrProcura será substituída. Compare: O modo de comparação a ser efetuada. Exemplo: Frase = " Geralmente , temos um problema , quando a temperatura aumenta " NovaFrase = Replace(Frase, "," , ";" ) MsgBox novafrase • • • • • •
Ficará assim: ‘ Geralmente; temos um problema; quando a temperatura aumenta Asc(“A”) ‘ Mostra o código Ascii do caracter, no caso “A” é igual a 65
Atualizando o ListBox Private Sub CommandButton1_Click() Dim tanto As Integer linha = Range("A100").End(xlUp).Row tanto = 0 For i = 0 To linha
Comandos do VBA - Excel
tanto = tanto + 1 ListBox1.AddItem Cells(tanto, 1).Value ‘ Mostrará na Listbox os valores inseridos até A100 Next End Sub
TRABALHANDO COM DATAS Month(Date) ‘ Mostra o número do mês atual, por exemplo: Setembro – 09. MonthName() ‘ Recebe um número (relativo ao mês – 0 a 12) e ele te retorna o mês por extenso. Exemplo: MontName(12) = Dezembro. Podemos fazer assim : Sub teste() MsgBox MonthName(Month(Date)) ‘ Aqui ele mostra por extenso o mês vigente End Sub Date() ‘ Mostra a data atual. Time() ‘ Mostra a hora do sistema. Day() ‘ Retorna um número relativo ao dia do mês, pode-se fazer assim também: Day(Date()) ‘ Retorna o dia do mês vigente. Month() ‘ Igual a anterior, só que retorna o mês. Exemplo: Month(Date()). Now() ‘ Retorna a data e a hora do sistema. DateDiff("d", DATA1, DATA2) ‘ Calcula o intervalo entre duas datas, “d” é referente ao tipo de pesquisa que neste caso será em dias, Mês é “m” e Ano é “a”, “DATA1’”, é a data incial e “DATA2” é a data final DateAdd(Intervalo, N°_de_Intervalo,Data) ‘ Determina uma data futura, com base em uma data fornecida, o tipo de período a ser acrescenado (“d”-dias; “m”=mês; “y”-ano). Exemplo: DateAdd(“m”,1000,”22/04/1500”) ‘ Neste exemplo queremos saber uma data futura de 1000 meses (“m”) após o descobrimento (“22/04/1500”). Se quisermos saber em dias é só trocar o “m” por “d” ou se quisermos saber em anos trocamos por “y”. Year() ‘ Retorno um numero indicativo do ano. Exemplo: Year(Date()) ‘ Retorna o ano vigente. WeekDay(data, 1°_dia_semana) ‘ Retorna um número relativo ao dia da semana: 1-Domingo ...... 7-Sábado. Podemos definir o primeiro dia da semana também, por exemplo, caso queira colocar segunda como o primeiro dia, após especificar a data, depois da vigula coloque 2. WeeDayName() ‘ Mostra por extenso a data, Exemplo: WeekdayName(WeekDay(“01/09/2010”)) ‘ Este exemplo mostra Quarta-Feira. CDATE() ‘ Converte a expressão pro formato Date MsgBox Cdate(“12-11-2010”)
FUNÇÕES PARA CÁLCULOS MATEMÁTICOS Abs(n) ‘ Retorna o valor absoluto (sem sinal), do número n. Rnd(n) ‘ Retorna um número aleatório entre 0 e 1. Rnd*10 ‘ Gera um número aleatório entre 0 e 10 Sqr(n) ‘ Retorna a Raiz quadrada do número n. 2 ^ 3 ‘ Aqui calcula-se a potência de 2 elevado a 3.
LAÇO WHILE 1) Do While ‘ Condição/Teste – Teste no começo Comando 1 Comando 2 ................. Comando n Loop ‘ Aqui enquanto a condição for verdadeira o código sera executado. O teste da condição é feito no começo do laço 2) Do
‘ Teste no final Comando 1 Comando 2 .............. Comando n Loop While ‘ Teste/Condiçao. ‘ Aqui o teste é feito no final, também será executado enquato a condição for verdadeira.
Comandos do VBA - Excel 3) Do Until ‘ Teste/Condição – Teste no começo Comando 1 Comando 2 .............. Comando n Loop ‘ Aqui enquanto a condição for falsa o código sera executado. O teste da condição é feito no começo do laço
4) Do ‘ Teste no final Comando 1 Comando 2 .............. Comando n Loop Until ‘ Teste/Condição ‘ Aqui o teste é feito no final, também será executado enquato a condição for falsa
TEXTBOX QUE SÓ ACEITA NÚMEROS Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii = vbKeyReturn Or KeyAscii = vbKeyBack Then Exit Sub End If If KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then KeyAscii = 0 End IF ‘ Neste exemplo, se for digitado letras, nada será mostrado na TextBox, ficará em branco End Sub Exemplo 2: Private Sub CommandButton1_Click() If Not IsNumeric(TextBox1.Value) Then ‘ O commando Not está negando o valor numérico MsgBox "informe um numero" ‘ Este mesmo comando poderia ser feito com datas também End IF ‘ era só trocar o IsNumeric por IsDate End Sub
FORMATANDO CASAS DECIMAIS TextBox2.Text = Format(TextBox1.Text, "###.00") ‘ Aqui nesse exemplo a Textbox2 irá receber já formatado pra duas casas decimais depois da vírgula, o numero que for digitado na textbox1. TextBox2.Text = Format(TextBox1.Text, "dd/mmmm/yyyy") ‘ Formata pra tipo de data TextBox2.Text = Format(TextBox1.Text, "##/####/####") ‘ Mesmo efeito do exemplo anterior TextBox2.Text = FormatCurrency(TextBox1, 2) ‘ Aqui ele adiciona o R$ e pra duas casas decimais, de acordo com o ultimo numero depois da vírgula, aqui no caso 2 TextBox2.Text = Format(TextBox1.Text, "0.00") ‘ Aqui tem o mesmo efeito do primeiro exemplo Format(Now, "dd/mm/yyyy hh:nn:ss")
PREENCHENDO FORMULÁRIO 2 RowCount = Worksheets("Plan1").Range("A1").CurrentRegion.Rows.Count Worksheets("Plan1").Range("A1").Offset(RowCount, 0).Value = TextBox1.Text ‘ Aqui ele começa a preencher uma célula abaixo (A2) da célula indicada (A1). Se quiser inserir na coluna B modifique o valor Zero para 1 e na coluna C para 2 e assim por diante, RowCount seria uma variavel.
USANDO O COMANDO FOR EACH PARA LIMPAR For Each ctl In Me.Controls If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then ctl.Value = "" ‘ ctl é uma variavel do tipo Controls ElseIf TypeName(ctl) = "CheckBox" Then ctl.Value = False End If Next ctl
Comandos do VBA - Excel ‘ Na segunda linha esta dizendo que todas as caixas de texto (TextBox) e Caixas Combo (ComboBox) serão zeradas. E na quarta linha esta dizendo que todas as caixas de verificação (CheckBox) ficarão desmarcadas (False).
BOTAO PARA SAIR DO FORM Private Sub cmdCancel_Click() Unload Me End Sub
OCULTAR PLANILHA Worksheets("plan1").Visible = False ‘ Oculta a planilha Plan1
COMANDOS ÚTEIS IsArray() ‘ True se a expressão for verdadeira, False se não for. IsDate() ‘ True se a Expressão é do tipo Date, False se não for. IsEmpty() ‘ True se nenhum valor for atribuído a variável. IsError() ‘ True se expressão conter algum erro. IsNUll() ‘ True se a expressão apresentar valor Null (Nulo). IsNumeric() ‘ True se a expressão for numérica. IsObject() ‘ True se se tratar de um objeto.
CONCATENANDO O COMANDO RANGE COM O VALOR DE UMA VARIÁVEL Sub teste() Dim a As Single a=3 ‘ A variavel A recebe valor 3 Range("a" & a) = "marcelo" ‘ Nesse exemplo será escrito “marcelo” na célula A3 End Sub
CHAMANDO AS FUNÇÕES DISPONÍVEIS NO EXCEL WorksheetFunction.Sum(Range(“a1:a5”)) ‘ Nesse exemplo estamos somando de A1 até A5 Range(“b1”).FormulaLocal = “=Soma(a1:a5)” ‘ Esse exemplo também faz a soma
CRIANDO UMA VARIÁVEL ESTÁTICA Sub acumulador() Static total ‘ Declarando uma variável estática Dim a As Integer x = Range("a1").Value y = Range("b1").Value z = x - y total = total + z ‘ Código pra ir sempre somando, incrementando Range("c1").Value = total End Sub
UTILIZANDO O COMANDO SELECT CASE Sub Seleção() ' Exemplo do comando Select / End Select Dim x As Integer x = InputBox("Informe um valor") Select Case x Case Is < 0 ‘ Caso “x” seja menor que zero entao... MsgBox "Numero Negativo" Case 0 To 10 ‘ Caso “x” seja menor/igual a 10 entao... MsgBox "Numero positivo" Case Is > 10 ‘ Caso “x” seja maior que 10 entao... MsgBox "Numero positivo maior que 10" End Select End Sub
Comandos do VBA - Excel
CHAMANDO UMA SUB DENTRO DE OUTRA SUB Sub x(a) ‘ Essa Sub possui um argumento MsgBox a End Sub Sub y() Call x("marcelo") ‘ Aqui chama-se a Sub x, adicionando a String no lugar do seu argumento End Sub
CHAMANDO UMA FUNÇÃO DENTRO DE UMA SUB Sub somar() ‘ O procedimento aqui chama a função Somador e retorna 8 MsgBox Somador(3, 5) End Sub Function Somador(x, y) ‘ Função (Function) que faz a soma Somador = x + y End Function
PASSANDO ARGUMENTOS POR REFERÊNCIA E POR VALOR POR REFERÊNCIA (ByRef) Sub TestePassagem1() ‘ Por Default o VBA passa por referência Dim y As Integer y = 50 AdicionaNo1 y MsgBox y ‘ Aqui o resultado é 60 End Sub Sub AdicionaNo1(ByRef x As Integer) ‘ Se retirar o ByRef também funcionaria x = x + 10 End Sub POR VALOR (ByVal) Sub TestePassagem2() Dim y As Integer y = 50 AdicionaNo2 y MsgBox y ‘ O resultado será 50 End Sub Sub AdicionaNo2(ByVal x As Integer) ‘ Se retirar o ByVal ele passaria por referência x = x + 10 End Sub
DECREMENTANDO O LAÇO FOR For i=10 to 1 Step -1 ‘ Decrementa de 1 em 1 For i=10 to 1 Step -2 ‘ Decrementa de 2 em 2, e assim por diante
INSERINDO GRÁFICOS Sub Macro1() Range("A1:c5").Select Charts.Add ActiveChart.ChartType = xlColumnClustered ‘ Tipo de gráfico mostrado ActiveChart.SetSourceData Source:=Sheets("Plan1").Range("a1:c5"), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Plan1" ActiveChart.Axes(xlValue).ScaleType = xlLogarithmic ‘ Esse código é para as barras com valores muito pequenos não sumirem devido existir b arras com valores muito altos End Sub ActiveChart.SeriesCollection(1).Select ‘ Comando para selecionar as barras do gráfico, nesse caso a barra 1 (Contando da esquerda para direita), que no exemplo são as barras azuis.
Comandos do VBA - Excel
ActiveChart.SeriesCollection(1).ApplyDataLabels AutoText:=True, LegendKey:= _ False, ShowSeriesName:=False, ShowCategoryName:=False, ShowValue:=True, _ ShowPercentage:=False, ShowBubbleSize:=False ‘ Esse commando tem várias funções, como por exemplo, colocar legenda, o valor das barras entre outros ActiveChart.SeriesCollection(1).ApplyDataLabels ShowValue:=True ‘ Esse comando coloca o valor das barras selecionadas do gráfico
ARMAZENAR VÁRIAS MENSAGENS DE UMA SÓ VEZ NO MsgBox NO COMANDO FOR For i = 0 To 6 mensagem = mensagem & "Dia: " & i + 1 & " " & Dias(i) & Chr(13) Next ‘ Dessa forma armazena todas as mensagens de uma só vez, diferente do exemplo abaixo MsgBox = mensagem For i = 0 To 6 MsgBox "Dia: " & i + 1 & " " & Dias(i) & Chr(13) Next ‘ Dessa forma teria que apertar enter varias vezes (7) pra ir aparecendo as mensagens
FUNÇÃO VarType VarType(Nome da Varialve) ou VarType(Expressão) ‘ Determina o tipo de dado armazenado na variável. A seguir temos os códigos de retorno da função VarType: 0 ‘ Vazio (não inicializado) 1 ‘ Nulo (dados não válidos) 2 ‘ Inteiro 3 ‘ Inteiro longo 4 ‘ Número de precisão simples 5 ‘ Número de precisão dupla 6 ‘ Monetário. 7 ‘ Data 8 ‘ Texto 9 ‘ Objeto de automação 10 ‘ Erro 11 ‘ Boleano 12 ‘ Variant (somente é utilizado com Arrayvariantes) 13 ‘ Um objeto para acesso a dados. 17 ‘ Byte 8192 ‘ Array ‘ Uma aplicação prática seria a validação de dados de um formulário
VERIFICANDO UMA DATA VALIDA NO FORMULARIO Private Sub CommandButton1_Click() If IsDate(TextBox1.Value) = True Then TextBox1 = VBA.FormatDateTime(TextBox1, vbGeneralDate) TextBox2.Text = TextBox1.Text Else msg = MsgBox("Data Inválida!" & Chr(13) & "Favor verifique a data indicada.", vbCritical, "Erro") TextBox1.Value = vbNullString TextBox1.SetFocus End If End Sub
GERANDO NÚMEROS ALEATÓRIOS Randomize ‘ Sem o Randomize ele gera os mesmos numeros sempre que for inicializado x = Int(Rnd * (10)) ‘ Gera numeros de 1 a 10, o Int é pra não gerar numeros quebrados. Exemplo: Sub NumerosAletatorios() ‘ Nesse exemplo gera uma sequência de 4 numeros aleatórios Dim x, y(3) 'Range("a1").Select For i = 1 To 4
Comandos do VBA - Excel
Randomize x = Int(Rnd * (10)) ActiveCell.Value = x ActiveCell.Offset(0, 1).Activate Next End Sub
COMANDO WHILE WEND Sub teste() ‘ É semelhante ao For Dim i As Integer i=0 While i <= 10 ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate i=i+1 Wend End Sub
DIFERENÇA ENTRE InputBox e Application.InputBox A principal diferença é que Application.InputBox é capaz de verificar automaticamente o tipo de dados que deve ser inserido na caixa de texto do caixa de diálogo mostrada e InputBox não. Estrutura do Application.InputBox: Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextId, Type) Prompt: Mensagem a ser exibida na caixa de mensagem. Title: Título da caixa de entrada. Type: Especifica o dado retornado conforme a tabela abaixo:
Exemplo: Public Sub TesteAppInputBox() Dim num As Long num = Application.InputBox("Digite um valor numérico", "Application.InputBox", "Valor numérico", , , , , 1) MsgBox "O valor digitado foi: " & num End Sub
CANCELANDO INPUTBOX Sub teste() ‘ Aqui estou usando o Application.InputBox Dim erro Dim x erro: x = Application.InputBox("informe um numero", , , , , , 1) If x = False Then Exit Sub End If If IsNumeric(x) = False Then MsgBox "isso não é um numero" GoTo erro Else MsgBox x End If End Sub
Comandos do VBA - Excel
COMANDO GOTO para: ‘ Identificar do GOTO, os dois pontos “:” é obrigatório y = Application.InputBox("Informe o seu nome: ") ‘ GOTO virá para essa linha If y = False Then x = MsgBox("Deseja realmente sair?", vbYesNo, "Sair") If x = vbYes Then Exit Sub Else GoTo para ‘ GOTO irá para a primeira linha após o identificador End If End If
COLOCANDO EM ORDEM CRESCENTE OU DECRESCENTE Range("a1").Select ‘ Seleciona a primeira célula da coluna Selection.Sort Key1:=Range("a1"), Order1:=xlDescending, Header:=xlGuess ‘ Ordem decrescente ‘ O comando Header:=xlGuess pega o conteudo da primeira célula (Em destaque: Negrito) e não ‘ ‘ o coloca na ordem junto como o restante da coluna que vai sofrer o comando Selection.Sort Key1:=Range("a1"), Order1:=xlDAscending, Header:=xlGuess ‘ Ordem crescente
INSERINDO WORLD ART ActiveSheet.Shapes.AddTextEffect(msoTextEffect22, "Maisa", "impact", 20#, msoFalse, msoFalse, 200, 70).Select ‘ O numero 22 é o tipo de Worl Art; “Maisa” é a String, “Impact” é o tipo da fonte, 20 é o tamanho da fonte, 200 e 70 é a posição na tela
USANDO A FUNÇÃO TYPE Type Dados_Pessoais Nome As String Idade As Date DataNascimento As Date End Type Sub Tipos_definidos_Utilizador() Dim Pessoa As Dados_Pessoais Pessoa.Nome = "Francisco" Pessoa.Idade = InputBox("informe a data: ") Range("a1") = Pessoa.Nome Range("a2").Value = Pessoa.Idade MsgBox Pessoa.Nome & Chr(13) & Pessoa.Idade End Sub