Este documento fornece exemplos de comandos VBA para realizar tarefas comuns no Excel, como copiar células, formatar texto, adicionar comentários, contar registros e navegar entre células. Os exemplos demonstram como manipular planilhas, selecionar células e rangos, formatar células e usar caixas de diálogo e mensagens.
Este documento fornece exemplos de comandos VBA para realizar tarefas comuns no Excel, como copiar células, formatar texto, adicionar comentários, contar registros e navegar entre células. Os exemplos demonstram como manipular planilhas, selecionar células e rangos, formatar células e usar caixas de diálogo e mensagens.
Este documento fornece exemplos de comandos VBA para realizar tarefas comuns no Excel, como copiar células, formatar texto, adicionar comentários, contar registros e navegar entre células. Os exemplos demonstram como manipular planilhas, selecionar células e rangos, formatar células e usar caixas de diálogo e mensagens.
Sub copiar() Range("b5").Select Clula que vai ser copiada Selection.Copy Range("a2").Select Clula que vai receber o conteudo copiado ActiveSheet.Paste Sheets(plan2).Select Seleciona a planilha 2 Range(a1).Select Seleciona a clula A1 da planilha 2 ActiveSheet.Paste Cola na clula A1 da planilha 2 Application.CutCopyMode = False Desseleciona a clula que foi copiada End Sub
PULA PARA A CLULA VAZIA ABAIXO (PREENCHIMENTO DE FORMULRIO)
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 ttulo da msgbox sera resultado, e a mensagem que aparecer ser O maior : &valor2, sendo que o sinal & junta (concatena) a mensagem com a varivel valor2 (ser mostrado o valor da varivel).
Iniciando o formulrio junto com a planilha
Abra o editor VBA, clique em EstaPasta_de_trabalho, na tela ao lado escolha workbooks e depois escreva o cdigo: Userform1.Open Userform1 o nome do formulrio, que pode ser outro nome Ficar assim:
Private Sub Workbook_Open() UserForm1.Show UserForm1 o nome do formulrio 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 clula da direita ActiveCell.Offset(0, -1).Activate Esse comando vai pulando para a clula da esquerda ActiveCell.Offset(1, 0).Range("b2").Select Pula uma linha para baixo a partir da clula B2 End Sub
Comandos do VBA - Excel
FORMATANDO A CLULA
Range("d4").Interior.ColorIndex = 36 36 referente a cor amarela Range(a1).HorizontalAlignment = xlCenter Centraliza o contedo da clula 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) Tambm adciona borda este mtodo Range("a1").Borders(xlEdgeBottom).LineStyle = 9 = Esse mtodo tambm insere borda, s que aqui estou especificando pra s colocar borda na parter inferior da clula (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 mtodo tambm altera a fonte ActiveCell.Characters(Start:=2, Length:=2).Font.Name = Algerian Esse mtodo muda somente a partir da 2 letra (Start := 2) do que estiver escrito na clula selecionada e apenas 2 caracteres (Length := 2). Por exemplo: Se digita-se marcelo na clula apenas a letra a e r ficaria no estilo Algerian. ActiveCell.Font.FontStyle = "itlico" 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 maiscula, no caso b3 recebe a string digitada em b2 com a inicial j maiscula 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 clula A2 recebe a string digitada em A1 (minscula) j convertido em maisculo.
ADCIONANDO COMENTRIOS
Range("b2").AddComment ("Marcelo") Adciona o comentrio Marcelo na clula B2 ActiveCell.AddComment (Marcelo) Adciona o comentrio Marcelo na clula selecionada ActiveCell.ClearComments Limpa o comentrio ActiveCell.AddComment.Text Text:="Marcelo" & Chr(10) & "maisa" Adciona comentrio, 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 no encontrado End Sub
CONTADOR DE REGISTROS
Label1 = Application.WorksheetFunction.CountA(Plan1.Columns(1)) Contador para a coluna 1, caso queira comear 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 clulas que se repetem de acordo com o critrio adotado, aqui TextBox1.Text ira receber algum texto e se esse texto se repetir na Coluna A ento ser contado quantas vezes se repetiu.
Comandos do VBA - Excel CRIANDO UM CONTADOR COM O BOTAO SPINBUTTON
Private Sub SpinButton_SpinDown() Procedimento do boto SpinButton declarado na Parte superior (Relativo ao boto 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 boto 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 BOTO 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 CLULAS COM O BOTO SpinButton
Private Sub contador_SpinDown() Move uma clula para baixo ActiveCell.Offset(1, 0).Activate
End Sub
Private Sub contador_SpinUp() Move uma clula para cima ActiveCell.Offset(-1, 0).Activate End Sub
NAVEGANDO ENTRE AS CLULAS 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 CLULAS
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
FUNO ONTIME Public Sub ExecutaOnTime() MsgBox "Opa! Executou." End Sub
Public Sub TesteOnTime() Executa determinada funo de acordo com o tempo especificado, no exemplo abaixo ir excutar a MsgBox Opa! Executor aps 10 seg. Call Application.OnTime(Now + TimeValue("00:00:10"), "ExecutaOnTime") End Sub
RELGIO
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 DECISES 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 no 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 Descrio vbOK 1 OK vbCancel 2 Cancelar vbAbort 3 Abortar vbRetry 4 Repetir vbIgnore 5 Ignorar vbYes 6 Sim vbNo 7 No
Comandos do VBA - Excel Sub teste2() MsgBox "Ola Marcelo" End Sub
CLULA PISCANDO
Exemplo 1
Sub Piscar() Range("a1").Interior.ColorIndex = 3 Coloca a cor vermelha na clula 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 clula 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 'durao 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 espaos 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 Varivel (pais) qualquer que ir receber sucessivamente os valores do array Next End Sub
ARRAY DINMICO
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 expresso em String Range("b3") = Len(Range("b2")) Este exemplo retorna na clula B3 o tamanho da String digitada na clula 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(nmero) Converte um valor numrico em String Len(String) Determina o nmero de caracteres da String String(Tamanho,String) Cria uma String igual ao tamanho especificado e que contm o primeiro caracter da String Lcase(String) Converte a String para minscula Ucase(String) Converte a String para maiscula 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 cdigo por Vetor = Split(Textbox1.text, , 2), iremos obter 2 substrings. Podemos tambm acrescentar por exemplo a consoante s, para indicar onde a diviso 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 = "Avaliao 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 preposio do aparece no texto citado. Se quiser contar quantas vezes a substring do aparece (nesse caso no preposio, ento iria contar o do de programador tambm) s mudar o cdigo: Split(frase, do ) por Split(frase,do), sem os espaos 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). Incio: Indica o incio da busca por StrProcura ( opcional). Contador: Indica o nmero mximo de vezes que a String StrProcura ser substituda. Compare: O modo de comparao 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 cdigo 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 nmero do ms atual, por exemplo: Setembro 09. MonthName() Recebe um nmero (relativo ao ms 0 a 12) e ele te retorna o ms por extenso. Exemplo: MontName(12) = Dezembro. Podemos fazer assim : Sub teste() MsgBox MonthName(Month(Date)) Aqui ele mostra por extenso o ms vigente End Sub Date() Mostra a data atual. Time() Mostra a hora do sistema. Day() Retorna um nmero relativo ao dia do ms, pode-se fazer assim tambm: Day(Date()) Retorna o dia do ms vigente. Month() Igual a anterior, s que retorna o ms. 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, Ms 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 perodo a ser acrescenado (d-dias; m=ms; y-ano). Exemplo: DateAdd(m,1000,22/04/1500) Neste exemplo queremos saber uma data futura de 1000 meses (m) aps 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 nmero relativo ao dia da semana: 1-Domingo ...... 7-Sbado. Podemos definir o primeiro dia da semana tambm, por exemplo, caso queira colocar segunda como o primeiro dia, aps 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 expresso pro formato Date MsgBox Cdate(12-11-2010)
FUNES PARA CLCULOS MATEMTICOS
Abs(n) Retorna o valor absoluto (sem sinal), do nmero n. Rnd(n) Retorna um nmero aleatrio entre 0 e 1. Rnd*10 Gera um nmero aleatrio entre 0 e 10 Sqr(n) Retorna a Raiz quadrada do nmero n. 2 ^ 3 Aqui calcula-se a potncia de 2 elevado a 3.
LAO WHILE
1) Do While Condio/Teste Teste no comeo Comando 1 Comando 2 ................. Comando n Loop Aqui enquanto a condio for verdadeira o cdigo sera executado. O teste da condio feito no comeo do lao
2) Do Teste no final Comando 1 Comando 2 .............. Comando n Loop While Teste/Condiao.
Comandos do VBA - Excel Aqui o teste feito no final, tambm ser executado enquato a condio for verdadeira.
3) Do Until Teste/Condio Teste no comeo Comando 1 Comando 2 .............. Comando n Loop Aqui enquanto a condio for falsa o cdigo sera executado. O teste da condio feito no comeo do lao
4) Do Teste no final Comando 1 Comando 2 .............. Comando n Loop Until Teste/Condio Aqui o teste feito no final, tambm ser executado enquato a condio for falsa
TEXTBOX QUE S ACEITA NMEROS
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 numrico MsgBox "informe um numero" Este mesmo comando poderia ser feito com datas tambm 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 vrgula, 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 vrgula, 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 FORMULRIO 2
RowCount = Worksheets("Plan1").Range("A1").CurrentRegion.Rows.Count Worksheets("Plan1").Range("A1").Offset(RowCount, 0).Value = TextBox1.Text Aqui ele comea a preencher uma clula abaixo (A2) da clula 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) sero zeradas. E na quarta linha esta dizendo que todas as caixas de verificao (CheckBox) ficaro 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 expresso for verdadeira, False se no for. IsDate() True se a Expresso do tipo Date, False se no for. IsEmpty() True se nenhum valor for atribudo a varivel. IsError() True se expresso conter algum erro. IsNUll() True se a expresso apresentar valor Null (Nulo). IsNumeric() True se a expresso for numrica. IsObject() True se se tratar de um objeto.
CONCATENANDO O COMANDO RANGE COM O VALOR DE UMA VARIVEL
Sub teste() Dim a As Single a = 3 A variavel A recebe valor 3 Range("a" & a) = "marcelo" Nesse exemplo ser escrito marcelo na clula A3 End Sub
CHAMANDO AS FUNES DISPONVEIS NO EXCEL
WorksheetFunction.Sum(Range(a1:a5)) Nesse exemplo estamos somando de A1 at A5 Range(b1).FormulaLocal = =Soma(a1:a5) Esse exemplo tambm faz a soma
CRIANDO UMA VARIVEL ESTTICA
Sub acumulador() Static total Declarando uma varivel esttica Dim a As Integer x = Range("a1").Value y = Range("b1").Value z = x - y total = total + z Cdigo pra ir sempre somando, incrementando Range("c1").Value = total End Sub
UTILIZANDO O COMANDO SELECT CASE
Sub Seleo() ' 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 FUNO DENTRO DE UMA SUB
Sub somar() O procedimento aqui chama a funo Somador e retorna 8 MsgBox Somador(3, 5) End Sub
Function Somador(x, y) Funo (Function) que faz a soma Somador = x + y End Function
PASSANDO ARGUMENTOS POR REFERNCIA E POR VALOR
POR REFERNCIA (ByRef) Sub TestePassagem1() Por Default o VBA passa por referncia 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 tambm 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 referncia x = x + 10 End Sub
DECREMENTANDO O LAO 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 GRFICOS
Sub Macro1() Range("A1:c5").Select Charts.Add ActiveChart.ChartType = xlColumnClustered Tipo de grfico mostrado ActiveChart.SetSourceData Source:=Sheets("Plan1").Range("a1:c5"), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Plan1" ActiveChart.Axes(xlValue).ScaleType = xlLogarithmic Esse cdigo para as barras com valores muito pequenos no sumirem devido existir barras com valores muito altos End Sub
Comandos do VBA - Excel ActiveChart.SeriesCollection(1).Select Comando para selecionar as barras do grfico, nesse caso a barra 1 (Contando da esquerda para direita), que no exemplo so as barras azuis.
ActiveChart.SeriesCollection(1).ApplyDataLabels AutoText:=True, LegendKey:= _ False, ShowSeriesName:=False, ShowCategoryName:=False, ShowValue:=True, _ ShowPercentage:=False, ShowBubbleSize:=False Esse commando tem vrias funes, 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 grfico
ARMAZENAR VRIAS 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
FUNO VarType
VarType(Nome da Varialve) ou VarType(Expresso) Determina o tipo de dado armazenado na varivel. A seguir temos os cdigos de retorno da funo VarType: 0 Vazio (no inicializado) 1 Nulo (dados no vlidos) 2 Inteiro 3 Inteiro longo 4 Nmero de preciso simples 5 Nmero de preciso dupla 6 Monetrio. 7 Data 8 Texto 9 Objeto de automao 10 Erro 11 Boleano 12 Variant (somente utilizado com Arrayvariantes) 13 Um objeto para acesso a dados. 17 Byte 8192 Array Uma aplicao prtica seria a validao de dados de um formulrio
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 Invlida!" & Chr(13) & "Favor verifique a data indicada.", vbCritical, "Erro") TextBox1.Value = vbNullString TextBox1.SetFocus End If
End Sub
GERANDO NMEROS ALEATRIOS
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 no gerar numeros quebrados. Exemplo: Sub NumerosAletatorios() Nesse exemplo gera uma sequncia de 4 numeros aleatrios 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
DIFERENA ENTRE InputBox e Application.InputBox
A principal diferena que Application.InputBox capaz de verificar automaticamente o tipo de dados que deve ser inserido na caixa de texto do caixa de dilogo mostrada e InputBox no. Estrutura do Application.InputBox: Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextId, Type) Prompt: Mensagem a ser exibida na caixa de mensagem. Title: Ttulo 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 numrico", "Application.InputBox", "Valor numrico", , , , , 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 no um numero" GoTo erro Else MsgBox x
Comandos do VBA - Excel End If End Sub
COMANDO GOTO
para: Identificar do GOTO, os dois pontos : obrigatrio 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 aps o identificador End If End If
COLOCANDO EM ORDEM CRESCENTE OU DECRESCENTE
Range("a1").Select Seleciona a primeira clula da coluna Selection.Sort Key1:=Range("a1"), Order1:=xlDescending, Header:=xlGuess Ordem decrescente O comando Header:=xlGuess pega o conteudo da primeira clula (Em destaque: Negrito) e no 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 posio na tela
USANDO A FUNO 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 CLULAS
Sub ocultar()
Dim i i = Range("i1").Value Range(i).EntireRow.Hidden = True Oculta clulas
End Sub
Sub mostrar()
Dim i i = Range("g1").Value Range(i).EntireRow.Hidden = False Mostra clulas ocultas
End Sub
Comandos do VBA - Excel
ACUMULAR VALOR NA CLULA
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 CLULA ATALHO
Depois de escrever a formula aperte a tecla F4, ir aparecer o cifro (Do Dolar) na clula 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 no devem ser 'destacadas na seleo
'Exemplo: Linhas de ttulo; Aqui eu defini como as linhas 1 e 2
'Remove cor de fundo da linha selecionada anteriormente
Serve para mudar cor, letra, fundo, nome, na clula selecionada, e depois volta ao normal aps perder a seleo
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 clula selecionada Target.Interior.Color = vbYellow 'Colocar cor de fundo amarela na clula selecionada Target.Font.Color = vbRed 'Coloca a cor verde da fonte na clula selecionada
Range(UltCelula).Interior.ColorIndex = xlNone 'Retira a cor de fundo na clula aps perder a seleo Range(UltCelula).Font.Color = vbBlack 'Coloca a cor da fonte preta na clula aps perder a seleo Range(UltCelula).Value = "" 'Retira a string "marcelo" na clula aps perder a seleo
UltCelula = Target.Address End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Muda a cor de fundo caso a clula 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 nmero 5, contando a partir da primeira, se quiser selecionar 5 clulas 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
Comandos do VBA - Excel INSERIR DADOS NA CLULA SELECIONADA
Sub teste()
linha = ActiveCell.Row coluna = ActiveCell.Column Cells(linha, coluna).Value = "Marcelo" Insere a string Marcelo na clula selecionada
End Sub
Sub teste()
linha = ActiveCell.Row coluna = ActiveCell.Column Cells(linha, coluna).Value = "Marcelo" Insere a string Marcelo na clula a direita da clula 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 modificaes de acordo com o planejado 'Protege novamente a planilha Sheets("Valores").Protect ("Senha") 'Salva as alteraes ActiveWorkbook.Save 'Fecha o arquivo ActiveWindow.Close
End Sub
PEGAR O NOME DA PLANILHA ATIVA
Sub nomeDaPlanilha()
Range(a1). Value = ActiveSheet.Name 'A clula A1 estar recebendo o nome da sua planilha
End Sub
Salvar em PDF
Sub salvarPDF() Dim nome As String nome = Range("c15").Value
'Salva na pasta onde o arquivo esta: ActiveWorkbook.Path 'D nome ao arquivo: & nome
End Sub
Comandos do VBA - Excel SELECIONANDO VRIAS CLULAS
Sub teste() Range(ActiveCell, ActiveCell.Offset(4, 0)).Select Seleciona a clula ativa(ActiveCell) e mais 4 clulas abaixo dela (ActiveCell.Offset(4, 0)) Range("A1:b1", Range("A1").Offset(4, 0)).Select Seleciona as clulas A1:B1 e mais 4 clulas abaixo delas End Sub
ADICIONANDO UM BOTO 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 ENDEREO DA CLULA SELECIONADA
Sub teste()
Dim ORange As Range On Error Resume Next Set ORange = Application.InputBox _ (prompt:="Selecione uma clula", Type:=8) On Error GoTo 0 If ORange Is Nothing Then MsgBox "Voc no selecionou uma clula" End If MsgBox "Voc selecionou a seguinte clula: " & ORange.Address() Mostra o endereo da clula selecionada MsgBox "Voc selecionou a seguinte clula: " & ORange.Address(external:= true) Mostra o endereo completo da clula selecionada