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
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
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
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
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:
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.
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.
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!
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:
Como Utilizar Matriz No Vba
.
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?