Arquivo

Archive for the ‘1- PRIMEIROS PASSOS’ Category

Cores No VBA – Tutorial

Recentemente recebi uma dúvida sobre o assunto cores no vba. Inicialmente após pensar em uma resposta simples percebi que seria interessante dividir com todos. Talvez seja a dúvida de outra pessoa.

Com este artigo pretendo demonstrar:

  • Como evitar a armadilha da macro
  • Duvida de um leitor: como verificar/contar as cores pintadas nas celulas
  • Várias formas de se fazer

 

Cores No Vba: Armadilha na macro

 

cores no vba

Pintar celulas, guias ou fontes não é difícil visto que é possível fazer com macros, mas neste atalho pode te levar em situações complicadas.

Por mais que o seu código seja simples você poderá ver no vídeo a brutal diferença do código feito manualmente e o gerado automaticamente pelo Excel.

E como consequência:

  • Código muito grande
  • Difícil interpretação
  • Difícil manutenção

 

Formas Simplificadas de Usar as Cores

 

codigo vba cor

Por padrão as macros irão trazer qualquer cor no formato decimal, mas além deste podemos utilizar mais três formas:

  • Decimal
  • RGB
  • Tabela ColorIndex
  • Cores no vba padrões

Ou seja, podemos utilizar destas 4 maneiras para colorir as celulas, guias (sheet) e fontes. Abaixo segue exemplos.

 

Codigos para Mudar Cor da Celula

 

mudar cor

Veja como é simples pintar uma celula!

Primeiro selecionamos a célula (range ou cells), depois no referimos ao seu interior (.interior) e depois a sua cor (.color ou .colorindex):

Cores no VBA Básicas

Range("A2").Interior.Color = vbBlue
Range("a3").Interior.Color = vbYellow
Range("a4").Interior.Color = vbMagenta
Range("a5").Interior.Color = vbRed
Range("a6").Interior.Color = vbGreen
Range("a7").Interior.Color = vbCyan
Range("a8").Interior.Color = vbWhite
Range("a9").Interior.Color = vbBlack

ColorIndex

Indice de 56 Cores (tabela de cores no material exclusivo ebook):

Range("a2").Interior.ColorIndex = 43

RGB

Range("a2").Interior.Color = RGB(153, 204, 0)

Forma Decimal

Range("a2").Interior.Color = 51510

 

Alterar Cor Das Fontes

Para altera a coloração da fonte através da do vba basta usar uma das maneiras já descritas anteriormente como nas células:

Range("B2").Font.ColorIndex = 23
'ou
Range("B2").Font.Color= vbRed

 

Formatar Cor das Sheets

Nas guias do excel também não precisamos utilizar macros basta identificar a guia seguido da palavra TAB, exemplo:

Sheets("Plan1").Tab.Color = 51510
ou
Sheets("Plan1").Tab.Color = RGB(153, 204, 0)

Como Identificar as Cores

identificar as cores

A seguir vou colocar alguns exemplos para verificar as cores nas células.

Verificar cor basica

If Range("A2").Interior.Color = vbBlue Then
MsgBox "Azul"
End if

Verificar RGB

varCor = Range("a2").Interior.Color
varVm = varCor Mod 256
varVd = (varCor \ 256) Mod 256
varAz = (varCor \ 65536) Mod 256
varRGB = "Vermelho =" & varVm & ", Verde =" & varVd & ", Azul =" & varAz
MsgBox varRGB

Verificar cor tabela indice

If Range("A2").Interior.ColorIndex = 41 Then
MsgBox "Azul Médio"
End if

Observações:

formatar cor

Evitar verificar cores por colorIndex pois se a cor (rgb) estiver fora do alcance o vba indicará a cor mais próxima.

Para retirar qualquer “pintura” basta colocar xlColorIndexNone

Enfim para maior entendimento eu sugiro fortemente a visualização do vídeo.

Vídeo:

Range, Cells e Offset

Antes de iniciarmos a falar sobre Range, Cells e Offset vamos fazer uma revisão rápida das maneiras de utilizar células.

Podemos tanto utilizar o Range como o Cells, ou seja selecionar a célula “A2” pode ser:

Cells(1,2).select (linha 1 e coluna 2)
Ou
Range(“A2”).select

Você pode usar das duas formas para selecionar (.select) ou para pegar o valor da célula (.value), mas existe alguns detalhes que só é possível ora com a primeira forma ora com a segunda forma.

Exemplos:
É fácil selecionar um grupo de células com o range: Range(“A1:B2”).select
Com o cells podemos selecionar todas as células da planilha: Cells.Select
Ou apagar o conteúdo das células Cells.ClearContents

Entretanto algumas vezes nos deparamos com uma situação que nos exige copiar algum dado abaixo ou ao redor da célula selecionada!!!

Antes de prosseguirmos vamos colocar um exemplo para facilitar. Sempre que alguém clicar em uma célula, desejamos que o valor dessa célula seja copiado para célula à direita.

exemplo_uso_offset
Um caminho mais tortuoso é saber a coluna ativa e a linha ativa, e a partir disso (como sabemos a coluna) adicionar + 1 e colar o valor da célula atual

linha = activeCell.row

coluna = activeCell.column

Cells(linha, coluna + 1).Value = Cells(linha, coluna).Value

_________________________________________________________

Offset
Mas com o uso do offset esta tarefa é facilitada, pois essa propriedade nos permite movimentar ao redor da célula ativa ou de uma célula especifica.

Ou seja podemos utilizar como:
Movimentar a partir de célula especifica >> Range(“B2”).Offset(1,0).Select
Ou
Movimentar ao redor da célula ativa >> ActiveCell.Offset(1,0).Select

Modo de usar:
Na propriedade offset o primeiro número dentro dos parênteses representa as linhas que você irá movimentar. Número positivo significa quantas casas a para baixo, número negativo acima e o zero permanece no mesmo local

O segundo número dentro dos parênteses representa as colunas, positivo a direita, negativo à esquerda e o zero permanece na mesma coluna.

comoFuncionaOffset

Ou seja para movimentar o cursor uma célula para baixo:
ActiveCell .Offset(1,0).Select
Movimentar acima:
ActiveCell .Offset(-1,0).Select
Movimentar para direita:
ActiveCell.Offset(0,1).Select
Movimentar para esquerda:
ActiveCell.Offset(0,-1).Select

__________________________________________________________________________

Caso esteja iniciando com macros sugiro acessar os primeiros passos ->> clique aqui

Caso deseja ver mais utilidades com a propriedade offset – >> clique aqui

 

Segue Vídeo sobre Range, Cells e Offset

 

Para ajudar ainda mais, coloco abaixo a planilha Range, Cells e Offset gratuitamente.
Espero que lhe ajude!

download planilha excel vba

Habilitar Guia de Desenvolvimento

Como existem pessoas que já me perguntaram sobe a guia de desenvolvimento e portanto eu creio que seja melhor criar um guia rápido e assim posso mencionar em vídeos e posts toda vez que for necessário.

A vantagem de colocar essa Guia de Desenvolvimento é a praticidade, tanto para digitar seu código como para inserir objetos de formulário ou então pode alterar botões com atribuições de macro sem executar os códigos por engano.

Conforme a imagem abaixo é bem simples para habilitar: clicar em Arquivo > Opções > Avançado > Personalizar Faixa de Opções > marcar Desenvolvedor

 

hbilitar_guia_vba

 

Como Contar Linha Com Vba

Há várias maneiras de contar linha com vba, existe tantas que não lembro todas, e cada tipo de procedimento possui vantagens e desvantagens.

E neste artigo específico vou trazer duas maneiras:

 

Codigo 1 – contar linha a linha

>>CODIGO 1 – O problema do código abaixo é o tempo para verificar (dependendo da qtde) e complexidade, pois ele irá varrer linha a linha da coluna especificada

Sub Macro1()

varColuna = 1 ' Coluna que será verificado
varLinha = 1 ' Linha inicial que será verificado
varConteudo = 1
Do While varConteudo <> Empty 'continua a verificar se conteudo for diferente de vazio
   varLinha = varLinha + 1 'contador de linha
   varConteudo = Cells(varLinha, varColuna).Value 'grava o valor da celula
Loop
MsgBox "A qtde. de linhas é: " + CStr(varLinha - 1)

End Sub

 

Codigo 2 – Contar linha 2

‘>>CODIGO 2 O problema deste código abaixo que se tiver uma linha vazia no meio dos registros ele vai contar junto

Sub Contador()

numeroRegistros = Range("A65536").End(xlUp).Row
MsgBox "Número de Registros: " & numeroRegistros, vbOkOnly, "Número de registros em: " & now()

End Sub

‘Este ultimo código é visto pelo site msdn


 

E como havia dito existe outras maneira que você poerá ver aqui no site:

Ver última linha preenchida
Ultima célula alterada

Como Utilizar Matriz No Vba

Já precisei trabalhar muito com matriz no vba, matriz 4×4 e até 6×6.
Na época relutei muito até ver que não tinha outra alternativa senão usar matriz… Então segue um exemplo de codigo que usa matriz e assim ver que não é um monstro.
 .
Caso tenha outras dúvidas veja o artigo Declaracao-de-matriz

 .

Codigo Matriz No Vba

Sub Macro1()
Dim vetor(5) As String 'declaração de matriz com 6 valores

Sheets("Plan1").Select
Cells(2, 1).Select
linha = 2
conteudo = "vazio"
Do While conteudo <> ""  ' verifica  enquanto linha for diferente de vazia
   vetor(linha – 2) = Cells(linha, 1).Value 'vetor inicia-se com referencia zero
   linha = linha + 1 'contador de linha
   conteudo = Cells(linha, 1).Value 'grava o valor da linha atual
Loop
'apos gravar  os valores na matriz, vamos em outro sheet despejar tudo
'ou seja, melhor q ficar gravando varias variaveis
'ou ficar  utilizando a mesma variavel trocando de sheets

'agora vamos despejar os conteudos sem o while
Sheets("Plan2").Select 'na guia 2
Cells(2, 1).Value = vetor(0)
Cells(3, 1).Value = vetor(1)
Cells(4, 1).Value = vetor(2)
Cells(5, 1).Value = vetor(3)
Cells(6, 1).Value = vetor(4)
Cells(7, 1).Value = vetor(5)
'texto abaixo apenas para demonstrar as alterações
Cells(2, 4).Value = "VOCE ESTÁ NO PLAN2 COM OS VALORES COPIADOS"
ActiveWorkbook.Sheets("Plan1").Tab.ColorIndex = 3 'muda a cor do sheet1 (guia ou plan1)
ActiveWorkbook.Sheets("Plan2").Tab.ColorIndex = 25 'muda a cor do sheet2 (guia ou plan2)

End Sub

Declaração de matriz

MATRIZES

Um array (matriz) é uma lista de valores, onde cada valor do array é chamado elemento. Os arrays são criados na memória do computador e por isto possui um bom desempenho. (Não é necessário ficar copiando , trocando de tela e colando informações.) ou seja deixa a macro mais ágil.

Todos os arrays são indexados a partir de zero.

Exemplo:
Vetor(1) – refere-se a um elemento que está alocado (gravado) como número 1.
Exemplo(0) – refere-se ao primeiro elemento
ExVetor(3) – refere-se ao quarto elemento

MANEIRAS DE DECLARAR UM VETOR

Dim Vetor(4) As Integer –> Define um array com 5 elementos iniciados com zero
Dim Vetor() As Integer = {1, 2, 3, 4, 5} Define um array com 5 elementos e atribui valores a cada elemento
Redim Vetor(10) –> Redimensiona o array Vetor para 11 elementos

Exemplo de como funciona na pratica:
Vetor(elemento) -> Valor gravado
0     -> São Paulo
1     -> Rio de Janeiro
2     -> Belo Horizonte
3    -> Brasília
4     -> Porto Alegre
A declaração ficaria: Dim Vetor(5) as String

ARRAYS MULTIDIMENSIONAIS
100 | 200 | 300
250 | 180 | 140
160 | 80 | 135

Dim Vetor(2,2) para atribuir os valores para o array podemos fazer:
Dim values(,) As Integer = { {100, 200, 300}, {250, 180, 140} , {160, 80, 135}}

_______________________________________________________________
OBSERVAÇÕES:
Dim values1(9, 9) As Integer = Declara um array com 100 elementos
Dim values2(,) As Integer = Declara um array sem limites
ReDim values2(9, 9) = Define o tamanho do array

Usando Select Case no vba

Select Case (selecione caso ) é uma expressão lógica utilizada para execução de
um entre os diversos grupos de instruções presentes em um códi-
go. O determinante da execução é o valor da expressão utilizada.

Se você não entendeu todo o palavrão acima? Então em resumo é um IF com múltiplas perguntas.

Ao invés de você ficar usando Se (if) em cadeia para cada pergunta então use o “Selecione Caso”.

Outra vantagem é que o código fica mais rápido que usar o IF em cadeia.

Exemplo da estrutura “Selecione Caso” :

Public Function taxa()

Select Case varData
   Case Is <= 10
      msgbox "Select 1"
      'Se o valor da variável é menor ou igual ao dia 10, irá exibir mensagem Select 1
   Case Is <= 20
      msgbox "Select 2"
      'Se o valor da variável é menor ou igual a 20, irá exibir mensagem Select 2
   Case Else
      msgbox "Select 3"
     'Se o valor da variável for maior que 20, irá exibir mensagem Select 3
End Select

End Function

Não temos o costume de usar esta estrutura. Mas um dia certamente você irá precisar.

 

 

Estrutura de Repetição

Loops

Com as instruções de estrutura (também chamadas de estrutu-
ras de controle), podemos criar códigos no Visual Basic capazes de
tomar decisões e repetir ações.

Se precisarmos repetir o código, podemos utilizar o loop, o que per-
mitirá a execução de um grupo de instruções repetidamente. Alguns
loops repetem instruções até que uma condição seja False (Falsa),
ao passo que outros repetem as instruções até uma condição ser
True (Verdadeira). Também há loops que repetem instruções um nú-
mero específico de vezes ou em cada objeto de uma coleção.

Do… While
Para verificar se a condição é verdadeira ou falsa, utilizamos a
palavra-chave While. While era, a princípio, a instrução utilizada para
criar sistemas de loop em programas até que uma opção fosse dada
como True. Como loop, no entanto, é uma solução mais estruturada,
convencionou-se empregar While como uma “âncora” para a cha-
mada de True. A sintaxe da expressão é:

While condição
[código]
Loop


For… Next
A função For…Next utiliza um contador para executar instru-
ções um determinado número de vezes. Exemplo:

for i = 1 to 10
[codigo]
next i

Em que:
• counter é uma instrução obrigatória, empregada como um con-
tador dos loops que serão realizados. A variável não pode ser um
valor booleano nem uma matriz;
• start é o valor inicial de counter;
• end é o valor final de counter, o momento em que o loop será
interrompido;
• Step é o valor da alteração do contador sempre que passar pelo
loop. Se Step não for especificado, o padrão será 1 (um).
O exercício seguinte mostra um loop criado com a instrução
For…Next e capaz de avançar por dez células até ser interrompido.

Variáveis no VBA

Uma variável é um objeto criado pelo usuário no qual podemos
introduzir valores que serão utilizados em cálculos ou em outros ti-
pos de procedimentos.
Para criar uma variável em um programa VBA, no Editor do Visual
Basic, siga o menu Ferramentas > Opções > Editor. Em seguida,
selecione a opção Requerer declaração de variável e, logo após, cli-
que em OK.
A partir desse momento, a primeira linha de cada módulo passará
a se chamar ”Option Explicit” e será preciso declarar a variável a
criar mediante o seguinte código:

Dim varMinhaVariável as String

Esse código fará com que o VBA reconheça todas as variáveis
criadas, indicando, ao mesmo tempo, uma instrução que contenha
um erro de ortografi a ou de execução.

Tipos de variáveis

Para declarar uma variável no início de cada procedimento, deve-
se defi nir o tipo de variável, escrito apenas com letras maiúscu-
las. Existem, essencialmente, quatro tipos principais de variáveis:
String, Double, Date e Variante. É importante frisar que elas podem
conter diversas outras variáveis especializadas.

String
Para conjuntos com até 65.000 caracteres (texto). Utiliza-se esse
tipo de variável para conjuntos de caracteres, incluindo a defi nição
de repositórios locais (C:\. D:\) ou de rede (\\192.168.1.20, \\josejoa-
quim), nomes de arquivos (gastos.xls), endereços de células ($A$1$)
e todos os elementos de texto ou sobre os quais não efetuaremos
cálculo. É o equivalente VBA das strings que defi nem as proprieda-

des das células de uma planilha do Excel: não é possível fazer cál-
culos com células de texto, ao mesmo tempo em que não se pode
utilizar funções de texto em células numéricas.

Double
Variável aplicada em números com ou sem casas decimais. Double
é uma variável genérica, capaz de comportar muitas outras variáveis
especializadas, que serão vistas adiante.

Bytes
As variáveis Byte são armazenadas como números de 8 bits
(1 byte), sem sinal, únicos, e que variam, em valor, de 0 a 255. O tipo
de variável Byte é útil para conter dados binários (0 e 1).

Integer
As variáveis do tipo Integer são armazenadas como números
de 16 bits (2 bytes) com valor no intervalo de -32.768 a 32.767. O
caractere de declaração de tipo para Integer é o sinal de porcenta-
gem (%).
As variáveis Integer também podem ser usadas para representar
valores enumerados. Um valor enumerado pode guardar um conjun-
to fi nito de números inteiros exclusivos, cada um com um signifi ca-
do especial no contexto em que é usado. Valores enumerados ofere-
cem uma forma conveniente de seleção entre um número conhecido
de opções em um formulário. Por exemplo, preto = 0, branco = 1
e assim por diante. Pode-se defi nir constantes mediante a instrução
CONST para cada valor enumerado.

Long
As variáveis do tipo Long (inteiro longo) são armazenadas como nú-
meros de 32 bits (4 bytes) sinalizados, no intervalo de -2.147.483.648
a 2.147.483.647. O caractere de declaração de tipo para Long é o “e
comercial” (&).

Single
As variáveis do tipo Single (vírgula fl utuante de precisão simples)
são armazenadas como números de vírgula fl utuante com 32 bits
(4 bytes) e têm um valor no intervalo de -3,402823E38 a -1,401298E-
45 para valores negativos e de 1,401298E-45 a 3,402823E38 para
valores positivos. O caractere de declaração de tipo para Single

é o ponto de exclamação (!). Single é a última das strings usadas
para representar valores numéricos armazenados dentro da variá-
vel Double.

Date
Variável utilizada para a declaração de datas. As variáveis Date
são armazenadas como números de ponto fl utuante de 64 bits (8
bytes) responsáveis por representar as datas que variam de 1 de
janeiro do ano 100 a 31 de dezembro de 9999, abrangendo, também,
as horas de 0:00:00 a 23:59:59, segundo o modelo internacional de
24 horas.
Qualquer valor reconhecível e literal de data (não representado
de maneira exclusivamente numérica) pode ser atribuído a variáveis
Date. Os literais Date devem estar entre sinais (#), por exemplo, #1
de janeiro de 1993# ou #1 jan 93#.
As variáveis Date exibem as datas de acordo com o formato
reconhecido por seu computador, assim como as horas (12 ou 24
horas). Para mais informações sobre como operar a confi guração
de data e hora, leia o tópico Confi gurações de data e hora, nesse
mesmo capítulo.
As datas manipuladas pela variável estão localizadas, normalmen-
te, nas células das planilhas. É possível, portanto, copiar o conteúdo
das células para o interior da variável Date sem prejuízo nenhum no
desenrolar do código.

Variant
A variável Variant é utilizada para todas as variáveis não explici-
tamente declaradas como de algum outro tipo (usando instruções
como Dim, Private, Public ou Static). O tipo de dados Variant não
possui caractere de declaração.
Uma Variant é um tipo especial de variável que pode guardar
qualquer dado, exceto dados String de comprimento fi xo. Uma
Variant também pode conter os valores especiais Empty, Error,
Nothing e Null. É possível determinar ainda como os dados em uma
Variant são tratados mediante as funções VarType ou TypeName.
Os seus dados numéricos podem ser qualquer valor de número in-
teiro ou real no intervalo de -1,797693134862315E308 a -4,94066E-324
para valores negativos e de 4,94066E-324 a 1,797693134862315E308
para valores positivos. Geralmente, os dados numéricos Variant
são mantidos em seu tipo original no interior da variável.

A Variant pode ser utilizada em códigos que guardam uma gran-
de quantidade de cálculos a serem processados, pois essa variável é
capaz de trabalhar com mais de 4.000 cálculos por vez.

Como Selecionar Planilha Vba e arquivo excel

Como selecionar planilha vba? Como navegar entre planilhas? São as dúvidas que recebo com frequencia na maioria das pessoas que me escreve

Muitas pessoas esquecem que ao trabalhar com vários sheets (guias)  ou planilhas, é preciso sempre primeiro selecionar ou deixar ativa para depois poder copiar, colar e etc.

.

Segue Código Selecionar Planilha
.

'Ativa qual arquivo excel você vai trabalhar
Windows("nome do arquivo. extensao").Activate

'Selecionar_planilha, o sheet (guia)
Sheets("guia").Select

 

Segue demonstração abaixo

 

______________________________________________________

*Dúvidas sobre o vídeo:

>>Como habilitar a Guia Desenvolvedor ?
>>Primeiros Passos em VBA?