comandos - excel

13
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 = 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

Upload: predador32

Post on 28-Oct-2014

252 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Comandos - Excel

Comandos do VBA - Excel

COPIAR DE UMA CÉLULA PARA OUTRA – VBASub copiar()Range("b5").Select ‘ Célula que vai ser copiadaSelection.CopyRange("a2").Select ‘ Célula que vai receber o conteudo copiadoActiveSheet.Paste Sheets(“plan2”).Select ‘ Seleciona a planilha 2Range(“a1”).Select ‘ Seleciona a célula A1 da planilha 2ActiveSheet.Paste ‘ Cola na célula A1 da planilha 2Application.CutCopyMode = False ‘ Desseleciona a célula que foi copiadaEnd Sub

PULA PARA A CÉLULA VAZIA ABAIXO (PREENCHIMENTO DE FORMULÁRIO)

Private Sub CommandButton1_Click()Range("a3").SelectSelection.EntireRow.Insert 'Insere uma linha na planilhaRange("a3") = TextBox1.Text 'Recebe o conteudo da textbox1Range("b3") = TextBox2.TextRange("a3").SelectEnd SubRowCount = Worksheets("Plan1").Range("A1").CurrentRegion.Rows.CountWorksheets("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 nomeFicará assim:

Private Sub Workbook_Open()UserForm1.Show ‘UserForm1 é o nome do formulárioEnd Sub

SELECIONAR VARIAS LINHAS

Sub Seleciona()Set myunion = Union(Range("a1"), Range("d5"), Range("b1:b5")) myunion.SelectEnd Sub

PULAR LINHA

Private Sub PularLinha_Click()ActiveCell.Offset(1, 0).Activate ‘ Esse comando vai pulando para a linha de baixoActiveCell.Offset(-1, 0).Activate ‘ Esse comando vai pulando para a linha de cimaActiveCell.Offset(0, 1).Activate ‘ Esse comando vai pulando para a célula da direitaActiveCell.Offset(0, -1).Activate ‘ Esse comando vai pulando para a célula da esquerdaActiveCell.Offset(1, 0).Range("b2").Select ‘ Pula uma linha para baixo a partir da célula “B2”End Sub

Page 2: Comandos - Excel

Comandos do VBA - Excel

FORMATANDO A CÉLULA

Range("d4").Interior.ColorIndex = 36 ’ 36 é referente a cor amarelaRange(“a1”).HorizontalAlignment = xlCenter ‘ Centraliza o conteúdo da célulaActiveCell.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étodoRange("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 FonteActiveCell.Characters.Font.Name = "algerian" ‘ Altera o tipo da fonte para Algerian[b2].Characters.Font.Name = "algerian" ‘ Esse método também altera a fonteActiveCell.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 FonteColumns("b:b").AutoFit ‘ Adapta o tamanho da coluna ao tamanho da escritaRows("2:2").AutoFit ‘ Adapta o tamanho da linha ao tamanho da escritaRange("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úsculaRows("1:1").RowHeight = 18 ‘ Aumenta o tamanho da linhaColumns("b:b").ColumnWidth = 20 ‘ Aumenta o tamanho da colunaRange("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 B2ActiveCell.AddComment (“Marcelo”) ‘Adciona o comentário “Marcelo” na célula selecionada ActiveCell.ClearComments ‘ Limpa o comentárioActiveCell.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

encontradoIf TextBox1.Text = "" Then ‘ Imprime uma mensagem se a pesquisa estiver em brancoMsgBox "Informe o valor a ser procurado", , "Pesquisar"End IfCells.Find(what:=TextBox1, after:=ActiveCell, lookat:=xlPart).Activate ‘ Comando para

pesquisarExit Suberro: MsgBox "Nada encontrado", , "ERRO" ‘Mensagem de erro(especificado acima)

quando o texto pesquisado não é encontradoEnd 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.

Page 3: Comandos - Excel

Comandos do VBA - ExcelCRIANDO 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 contadorEnd 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 contadorEnd 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 = contEnd Sub

Private Sub ScrollBar1_Scroll() ‘ Contador clicando no meio da scrollbar arrastando-a cont = ScrollBar1.Value Label1.Caption = contEnd 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 cimaActiveCell.Offset(-1, 0).ActivateEnd Sub

NAVEGANDO ENTRE AS CÉLULAS COM O BOTAO “ScrollBar”

Public cont As IntegerDim 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 = contEnd 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 NextEnd Sub

Page 4: Comandos - Excel

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 NextEnd Sub

FUNÇÃO ONTIMEPublic 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:=FalseEnd Sub

Public Sub AtualizaRelogio()On Error Resume NextWorksheets(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

Page 5: Comandos - Excel

Comandos do VBA - ExcelSub 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 ativaApplication.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 ativaApplication.OnTime Now + TimeValue("00:00:01"), "Piscar" ‘ Executa o procedimento End Sub ‘ Piscar 1 em 1 segundo

Exemplo 2Sub pisca()Dim x As IntegerDim pausa As CurrencyDim inicio As DateFor x = 1 To 40 'total de piscadaspausa = 0.2 'duração da pausa entre as piscadas em segundosinicio = Timer ' hora inicialDo While Timer < inicio + pausa DoEvents 'submeta a outros processosLoop If Range("b10").Interior.ColorIndex = 6 Then Range("b10").Interior.ColorIndex = 3 Else Range("b10").Interior.ColorIndex = 6 End IfNext xEnd Sub

FOR DECREMENTADO

For i = 4 To 1 Step -1 'Da direita para a esquerdaNext

COMANDO FOR EACH E ARRAYSSub 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 NextEnd 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 StringRange("b3") = Len(Range("b2")) ‘ Este exemplo retorna na célula “B3” o tamanho da String digitada na célula “B2”

Page 6: Comandos - Excel

Comandos do VBA - Excelnome = Chr(34) & "marcelo" & Chr(34) ‘ Chr(34) imprime o Aspas dupla (“ “)Dim nome As string * 20 ‘Define uma string fixa de 20 caracteresCOMPARA = "MARCELO" Like "MARCELO" ‘ COMPARA é uma variavel qualquer e o seu valor nesse exemplo é “Verdadeiro”COMPARA = "MARCELO" Like "Marcelo" ‘ Aqui o resultado seria falsoStr(número) ‘ Converte um valor numérico em StringLen(String) ‘ Determina o número de caracteres da StringString(Tamanho,String) ‘ Cria uma String igual ao tamanho especificado e que contém o primeiro caracter da StringLcase(String) ‘ Converte a String para minúsculaUcase(String) ‘ Converte a String para maiúsculaSplit(String) ‘ Divide uma String e retorna as Substrings como um array de stringsExemplo: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) NextEnd 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) NextEnd Sub

Private Sub CommandButton1_Click()Dim frase As StringDim vetor As Variantfrase = "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 aumentaAsc(“A”) ‘ Mostra o código Ascii do caracter, no caso “A” é igual a 65

Atualizando o ListBox

Page 7: Comandos - Excel

Comandos do VBA - ExcelPrivate Sub CommandButton1_Click() Dim tanto As Integer 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 NextEnd 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 vigenteEnd SubDate() ‘ 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 DateMsgBox 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 10Sqr(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çoComando 1Comando 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 finalComando 1Comando 2..............Comando n

Page 8: Comandos - Excel

Comandos do VBA - ExcelLoop While ‘ Teste/Condiçao.

‘ 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çoComando 1Comando 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 finalComando 1Comando 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 ThenExit SubEnd IfIf KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then KeyAscii = 0End IF ‘ Neste exemplo, se for digitado letras, nada será mostrado na TextBox, ficará em brancoEnd Sub

Exemplo 2:

Private Sub CommandButton1_Click()If Not IsNumeric(TextBox1.Value) Then ‘ O commando Not está negando o valor numéricoMsgBox "informe um numero" ‘ Este mesmo comando poderia ser feito com datas tambémEnd IF ‘ era só trocar o IsNumeric por IsDateEnd 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 dataTextBox2.Text = Format(TextBox1.Text, "##/####/####") ‘ Mesmo efeito do exemplo anteriorTextBox2.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 2TextBox2.Text = Format(TextBox1.Text, "0.00") ‘ Aqui tem o mesmo efeito do primeiro exemploFormat(Now, "dd/mm/yyyy hh:nn:ss")

PREENCHENDO FORMULÁRIO 2

RowCount = Worksheets("Plan1").Range("A1").CurrentRegion.Rows.CountWorksheets("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

Page 9: Comandos - Excel

Comandos do VBA - Excel ctl.Value = False 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 MeEnd 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 A3End Sub

CHAMANDO AS FUNÇÕES DISPONÍVEIS NO EXCEL

WorksheetFunction.Sum(Range(“a1:a5”)) ‘ Nesse exemplo estamos somando de A1 até A5Range(“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 = totalEnd 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"

Page 10: Comandos - Excel

Comandos do VBA - Excel End SelectEnd Sub

CHAMANDO UMA SUB DENTRO DE OUTRA SUB

Sub x(a) ‘ Essa Sub possui um argumento MsgBox aEnd Sub

Sub y() Call x("marcelo") ‘ Aqui chama-se a Sub x, adicionando a String no lugar do seu argumentoEnd 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 é 60End Sub Sub AdicionaNo1(ByRef x As Integer) ‘ Se retirar o ByRef também funcionaria x = x + 10End Sub

POR VALOR (ByVal)Sub TestePassagem2() Dim y As Integer y = 50 AdicionaNo2 y MsgBox y ‘ O resultado será 50End Sub Sub AdicionaNo2(ByVal x As Integer) ‘ Se retirar o ByVal ele passaria por referência x = x + 10End Sub

DECREMENTANDO O LAÇO FOR

For i=10 to 1 Step -1 ‘ Decrementa de 1 em 1For 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 altosEnd Sub

Page 11: Comandos - Excel

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 outrosActiveChart.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 6mensagem = mensagem & "Dia: " & i + 1 & " " & Dias(i) & Chr(13)Next ‘ Dessa forma armazena todas as mensagens de uma só vez, diferente do exemplo abaixoMsgBox = mensagem

For i = 0 To 6MsgBox "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.TextElse msg = MsgBox("Data Inválida!" & Chr(13) & "Favor verifique a data indicada.", vbCritical, "Erro") TextBox1.Value = vbNullString TextBox1.SetFocusEnd 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

Page 12: Comandos - Excel

Comandos do VBA - ExcelDim x, y(3) 'Range("a1").Select For i = 1 To 4 Randomize x = Int(Rnd * (10)) ActiveCell.Value = x ActiveCell.Offset(0, 1).Activate NextEnd Sub

COMANDO WHILE WEND

Sub teste() ‘ É semelhante ao ForDim i As Integeri = 0While i <= 10 ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate i = i + 1WendEnd 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 Longnum = Application.InputBox("Digite um valor numérico", "Application.InputBox", "Valor numérico", , , , , 1)MsgBox "O valor digitado foi: " & numEnd Sub

CANCELANDO INPUTBOX

Sub teste() ‘ Aqui estou usando o Application.InputBox Dim erro Dim xerro: 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

Page 13: Comandos - Excel

Comandos do VBA - Excel MsgBox x End IfEnd 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 comandoSelection.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 DateEnd 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.IdadeEnd Sub