Comandos do VBA - ExcelCOPIAR 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 = 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 uma linha na planilha Range("a3") = TextBox1.Text 'Recebe o conteudo da textbox1 Range("b3") = TextBox2.Text Range("a3").Select End Sub RowCount = Worksheets("Plan1").Range("A1").CurrentRegion.Rows.Count Worksheets("Plan1").Range("A1").Offset(RowCount, 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á será “O maior é: &valor2”, sendo que o sinal & junta ‘(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, 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 ‘ 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 Range("a1").Borders(xlEdgeBottom).LineStyle = 9 = Esse método também insere borda, só que aqui estou especificando pra só colocar borda na parter inferior da célula (xlEdgeBottom) com o comando Borders(). 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. Comandos do VBA - Excel CRIANDO UM CONTADOR COM O BOTAO “SPINBUTTON” Private Sub SpinButton_SpinDown() ‘ Procedimento do botão SpinButton declarado na 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 Comandos do VBA - Excel Sub CORES() 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 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 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 Comandos do VBA - Excel Sub teste2() MsgBox "Ola Marcelo" End Sub 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 DECREMENTADO For i = 4 To 1 Step -1 'Da direita para a esquerda Next 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 (“ “) Comandos do VBA - Excel 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” 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 Comandos do VBA - Excel linha = Range("A100").End(xlUp).Row tanto = 0 For i = 0 To linha 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. Comandos do VBA - Excel ‘ Aqui o teste é feito no final, também será executado enquato a condição for verdadeira. 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 Comandos do VBA - Excel End If Next ctl ‘ 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 Comandos do VBA - Excel End Sub 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 barras com valores muito altos End Sub Comandos do VBA - Excel 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. 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) Comandos do VBA - Excel 'Range("a1").Select For i = 1 To 4 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 Comandos do VBA - Excel End If End Sub 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 OCULTAR CÉLULAS Sub ocultar() Dim i i = Range("i1").Value Range(i).EntireRow.Hidden = True ‘Oculta células End Sub Sub mostrar() Dim i i = Range("g1").Value Range(i).EntireRow.Hidden = False ‘Mostra células ocultas End Sub Comandos do VBA - Excel ACUMULAR VALOR NA CÉLULA Private Sub Worksheet_Change(ByVal Target As Range) With Target If .Row = 1 And .Column = 1 Then 'Se A1 If IsNumeric(.Value) Then .Worksheet.Cells(2, 1) = .Worksheet.Cells(2, 1) + .Value End If End If End With End Sub EXECUTAR MACRO AO ABRIR PLANILHA Sub auto_open() Msgbox “Seja Bem Vindo” ‘Ao abrir a planilha mostrará esta mensagem End Sub CONGELAR CÉLULA – ATALHO Depois de escrever a formula aperte a tecla F4, irá aparecer o cifrão (Do Dolar) na célula escolhida. DESTACAR LINHA SELECIONADA MUDANDO COR DE FUNDO Dim LinhaSelecAnterior As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) Select Case ActiveCell.Row Case 1, 2 'Coloque neste 'case' as linhas que não devem ser 'destacadas na seleção 'Exemplo: Linhas de título; Aqui eu defini como as linhas 1 e 2 'Remove cor de fundo da linha selecionada anteriormente Select Case LinhaSelecAnterior.Row Case Is <> 1, 2 Rows(LinhaSelecAnterior.Row).Interior.ColorIndex = 0 End Select Case Else 'Altera a cor de fundo da linha selecionada Rows(ActiveCell.Row).Interior.ColorIndex = 15 'Remove a cor de fundo quando a linha perde a seleção If Not LinhaSelecAnterior Is Nothing Then 'Verifica se a linha atual já estava selecionada Comandos do VBA - Excel 'neste momento, caso seja uma nova linha selecionada 'remove a cor de fundo. If ActiveCell.Row <> LinhaSelecAnterior.Row Then Rows(LinhaSelecAnterior.Row).Interior.ColorIndex = 0 End If End If 'Inicializa a variavel informando a seleção atual 'que será utilizada no inicio do procedimento 'como sendo a seleção anterior Set LinhaSelecAnterior = ActiveCell End Select End Sub FUNÇÃO SELECTIONCHANCE – BY TARGET ‘Serve para mudar cor, letra, fundo, nome, na célula selecionada, e depois volta ao normal após perder a seleção Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) On Error Resume Next Static UltCelula As String Target.Value = "marcelo" 'Coloca a string "marcelo" na célula selecionada Target.Interior.Color = vbYellow 'Colocar cor de fundo amarela na célula selecionada Target.Font.Color = vbRed 'Coloca a cor verde da fonte na célula selecionada Range(UltCelula).Interior.ColorIndex = xlNone 'Retira a cor de fundo na célula após perder a seleção Range(UltCelula).Font.Color = vbBlack 'Coloca a cor da fonte preta na célula após perder a seleção Range(UltCelula).Value = "" 'Retira a string "marcelo" na célula após perder a seleção UltCelula = Target.Address End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) ‘Muda a cor de fundo caso a célula selecionada contenha o nome marcelo Static nome As String On Error Resume Next If Target.Value = "marcelo" Then Target.Interior.Color = vbRed End If Nome = Target.Address End Sub Comandos do VBA - Excel Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim LinhaInicio As Range Dim Linha As Range Dim Linha2 As Long Cells.Interior.ColorIndex = xlNone Linha2 = Target.Row Set LinhaInicio = Range("A" & Linha2, Target) 'Pinta da celula selecionada até a coluna 5 Set Linha = Range(Cells(Target.Row, 2), Cells(Target.Row, 5)) ‘Seleciona a partir da segunda coluna, até a coluna de número 5, contando a partir da primeira, se quiser selecionar 5 células em linha, coloque 6 no lugar de 5 With Linha .Interior.ColorIndex = 12 End With End Sub STATUSBAR Sub StatusBar() Dim x As Integer Dim MyTimer As Double 'Change this loop as needed. For x = 1 To 250 'Dummy Loop here just to waste time. 'Replace this loop with your actual code. MyTimer = Timer Do Loop While Timer - MyTimer < 0.3 ‘Quanto maior o valor, mais lento será o contador Application.StatusBar = "Progress: " & x & " of 250: " & Format(x / 250, "Percent") DoEvents Next x Application.StatusBar = False End Sub Sub teste() Application.StatusBar = "Marcelo " & Format(1, "percent") ‘Escreve: Marcelo 100,00% End Sub Comandos do VBA - Excel INSERIR DADOS NA CÉLULA SELECIONADA Sub teste() linha = ActiveCell.Row coluna = ActiveCell.Column Cells(linha, coluna).Value = "Marcelo" ‘Insere a string Marcelo na célula selecionada End Sub Sub teste() linha = ActiveCell.Row coluna = ActiveCell.Column Cells(linha, coluna).Value = "Marcelo" ‘Insere a string Marcelo na célula a direita da célula selecionada End Sub DESPROTEGER PLANILHA PARA INSERIR DADOS Sub ModificarPlanilha() 'Realiza a abertura do arquivo Workbooks.Open Filename:= "C:\Teste.xls" 'Desprotege a planilha Valores utilizado o password "Senha" Sheets("Valores").Unprotect ("Senha") 'Realize suas modificações de acordo com o planejado 'Protege novamente a planilha Sheets("Valores").Protect ("Senha") 'Salva as alterações ActiveWorkbook.Save 'Fecha o arquivo ActiveWindow.Close End Sub PEGAR O NOME DA PLANILHA ATIVA Sub nomeDaPlanilha() Range(“a1”). Value = ActiveSheet.Name 'A célula A1 estará recebendo o nome da sua planilha End Sub Salvar em PDF Sub salvarPDF() Dim nome As String nome = Range("c15").Value ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ ActiveWorkbook.Path & "\" & nome, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ True 'Salva na pasta onde o arquivo esta: ActiveWorkbook.Path 'Dá nome ao arquivo: & nome End Sub Comandos do VBA - Excel SELECIONANDO VÁRIAS CÉLULAS Sub teste() Range(ActiveCell, ActiveCell.Offset(4, 0)).Select ‘Seleciona a célula ativa(ActiveCell) e mais 4 células abaixo dela (ActiveCell.Offset(4, 0)) Range("A1:b1", Range("A1").Offset(4, 0)).Select ‘Seleciona as células A1:B1 e mais 4 células abaixo delas End Sub ADICIONANDO UM BOTÃO DE AJUDA AO MSGBOX Sub teste() MsgBox "testando a ajuda", vbCritical + vbMsgBoxHelpButton, "Ajuda", "runner.hlp", 0 ‘Onde “runner.hlp” é o nome do arquivo de ajuda End Sub USAR O IMPUTBOX PARA OBTER O ENDEREÇO DA CÉLULA SELECIONADA Sub teste() Dim ORange As Range On Error Resume Next Set ORange = Application.InputBox _ (prompt:="Selecione uma célula", Type:=8) On Error GoTo 0 If ORange Is Nothing Then MsgBox "Você não selecionou uma célula" End If MsgBox "Você selecionou a seguinte célula: " & ORange.Address() ‘Mostra o endereço da célula selecionada MsgBox "Você selecionou a seguinte célula: " & ORange.Address(external:= true) ‘Mostra o endereço completo da célula selecionada End Sub