capítulo bonus

20
Capítulo Bônus 1 Trabalhando com Cores Neste Capítulo X Especificando cores em seu código VBA X Usando funções de conversão do VBA X Convertendo cores em escala de cinza X Trabalhando com temas de documentos A ntes do Excel 2007, uma pasta de trabalho armazenava uma paleta de 56 cores. Claro, você podia modificar quaisquer ou todas aquelas cores, mas não havia forma de exceder o limite de 56 cores para uma pasta de trabalho. Mas as coisas mudaram com a introdução do Excel 2007. Agora você tem acesso a um número praticamente ilimitado de cores em uma pasta de trabalho – na verdade, o limite é de 16.777.216 cores, o que certamente se classifica como ilimitado no meu livro. Pinte o meu mundo Em VBA, você pode especificar uma cor como um valor decimal de cor, que é um número entre 0 e 16.777.215. Por exemplo, o comando VBA a seguir muda a cor de fundo da célula ativa para o marrom escuro: ActiveCell.Interior.Color = 5911168 Além disso, o VBA tem constantes pré-definidas para algumas cores comuns. Por exemplo, vbRed tem um valor de 255 (o valor decimal para vermelho puro) e vbGreen tem um valor de 65.280. Ninguém, obviamente, consegue memorizar quase 17 milhões de cores, e as constantes pré-definidas são bastante limitadas. A melhor forma de mudar uma cor é especificá-la em termos de seus componentes vermelho, verde e azul – o sistema de cores RGB. Capítulo bonus.indb 1 01/03/2013 16:48:41

Upload: darkangel2

Post on 28-Jan-2016

258 views

Category:

Documents


0 download

DESCRIPTION

b

TRANSCRIPT

Page 1: Capítulo Bonus

Capítulo Bônus 1

Trabalhando com CoresNeste Capítulo

X Especificando cores em seu código VBA

X Usando funções de conversão do VBA

X Convertendo cores em escala de cinza

X Trabalhando com temas de documentos

Antes do Excel 2007, uma pasta de trabalho armazenava uma paleta de 56 cores. Claro, você podia modificar quaisquer ou todas aquelas

cores, mas não havia forma de exceder o limite de 56 cores para uma pasta de trabalho. Mas as coisas mudaram com a introdução do Excel 2007. Agora você tem acesso a um número praticamente ilimitado de cores em uma pasta de trabalho – na verdade, o limite é de 16.777.216 cores, o que certamente se classifica como ilimitado no meu livro.

Pinte o meu mundo Em VBA, você pode especificar uma cor como um valor decimal de cor, que é um número entre 0 e 16.777.215. Por exemplo, o comando VBA a seguir muda a cor de fundo da célula ativa para o marrom escuro:

ActiveCell.Interior.Color = 5911168

Além disso, o VBA tem constantes pré-definidas para algumas cores comuns. Por exemplo, vbRed tem um valor de 255 (o valor decimal para vermelho puro) e vbGreen tem um valor de 65.280.

Ninguém, obviamente, consegue memorizar quase 17 milhões de cores, e as constantes pré-definidas são bastante limitadas. A melhor forma de mudar uma cor é especificá-la em termos de seus componentes vermelho, verde e azul – o sistema de cores RGB.

Capítulo bonus.indb 1 01/03/2013 16:48:41

Page 2: Capítulo Bonus

2 Programção em Excel VBA Para Leigos, 2ª EdiçãoCB

O sistema de cores RGBO sistema RGB combina vários níveis dessas três cores: vermelho, verde e azul. O valor de cada uma dessas cores pode variar de 0 a 255. Portanto, o número total de cores possíveis é 256 x 256 x 256 = 16.777.216.

✓Quando todos os três componentes de cor são 0, a cor é preto puro.

✓Quando todos os três componentes são 255, a cor é branco puro.

✓Quando todos os três são 128 (o ponto médio), a cor é cinza médio.

✓As demais 16.777.213 combinações possíveis desses três valores, representam outras cores, algumas das quais você já deve ter visto.

Para especificar uma cor usando o sistema RGB em VBA, use a função RGB. Essa função aceita três argumentos que representam os componentes vermelho, azul e verde de uma cor. A função retorna um valor decimal de cor entre 0 e 16.777.216.

Funciona da seguinte forma: O comando a seguir usa a função RGB para designar uma cor que é exatamente a mesma atribuída na seção anterior (aquele marrom escuro, com valor decimal de cor igual a 5.911.168):

ActiveCell.Interior.Color = RGB(128, 50, 90)

A Tabela 1-1 mostra os valores RGB e os códigos decimais de cor de algumas cores comuns.

Tabela 1-1 Exemplos de cores

Nome Componente vermelho

Componente verde

Componente azul

Valor da cor

Preto 0 0 0 0

Branco 255 255 255 16777215

Vermelho 255 0 0 255

Verde 0 255 0 65280

Azul 0 0 255 16711680

Amarelo 255 255 0 65535

Rosa 255 0 255 16711935

Turquesa 0 255 255 16776960

Marrom 153 51 0 13209

Índigo 51 51 153 10040115

Cinza 80% 51 51 51 3355443

Capítulo bonus.indb 2 01/03/2013 16:48:41

Page 3: Capítulo Bonus

Capítulo Bônus 1: Trabalhando com Cores 3CB

Convertendo coresSe você conhece os valores dos componentes vermelho, verde e azul de uma cor, então converter a cor em uma cor decimal é fácil. Apenas use a função RGB do VBA. Considere três variáveis (r, g e b), cada uma das quais representa um valor de componente de cor, entre 0 e 255. Para calcular o valor decimal da cor equivalente, use um comando deste tipo:

DecimalColor = RGB(r, g, b)

Para realizar essa conversão em uma fórmula de planilha, crie esta simples função wrapper VBA:

Function RGB2DECIMAL(R, G, B) As Long‘ Converts from RGB to decimal color RGB2DECIMAL = RGB(R, G, B)End Function

O seguinte exemplo da fórmula de planilha admite que os três valores de cor estão em A1:C1:

=RGB2DECIMAL(A1,B1,C1)

Converter uma cor decimal em seus componentes vermelho, verde e azul é um pouco mais complicado. Aqui está uma função que retorna uma matriz de três elementos:

Function DECIMAL2RGB(ColorVal) As Variant‘ Converts a color value to an RGB triplet‘ Returns a 3-element variant array

DECIMAL2RGB = Array(ColorVal \ 256 ^ 0 And 255, _ ColorVal \ 256 ^ 1 And 255, ColorVal \ 256 ^ 2 _ And 255)End Function

Para usar a função DECIMAL2RGB em uma fórmula de planilha, a fórmula deve ser inserida como uma fórmula de matriz de três células. Por exemplo, suponha que a célula A1 contenha um valor decimal de cor. Para converter aquele valor de cor em seus componentes RGB, selecione uma fila horizontal de três células e então insira a seguinte fórmula. Pressione Ctrl+Shift+Enter para transformá-la em uma fórmula de matriz, e não digite as chaves.

{=DECIMAL2RGB(A1)}

Se a fila de três células for vertical, você deverá transpor a matriz da seguinte forma:

{=TRANSPOSE(DECIMAL2RGB(A1))}

A Figura 1-1 mostra as funções DECIMAL2RGB e RGB2DECIMAL sendo postas em prática em uma planilha.

Capítulo bonus.indb 3 01/03/2013 16:48:41

Page 4: Capítulo Bonus

4 Programção em Excel VBA Para Leigos, 2ª EdiçãoCB

Na Internet: A pasta de trabalho mostrada na Figura 1-1 está disponível no site deste livro na Internet.

Mais sobre valores decimais de coresVocê deve estar curioso a respeito de como os 16.777.216 valores decimais de cores estão distribuídos. A cor 0 é preto e a cor 16.777.216 é branco, mas e as outras cores dentro desse intervalo?

Pense nos valores decimais de cor como sendo gerados por iterações For-Next aninhadas, como mostrado no seguinte código:

Sub GenerateColorValues() Dim Red As Long, Blue As Long, Green As Long Dim AllColors(0 To 16777215) As Long Dim ColorNum As Long ColorNum = 0 For Blue = 0 To 255 For Green = 0 To 255 For Red = 0 To 255 AllColors(ColorNum) = RGB(Red, Blue,Green) ColorNum = ColorNum + 1

NA IN

TERNET

Figura 1-1: Uma plani-

lha que usa as funções

DECI-MAL2RGB e RGB2DE-

CIMAL.

Capítulo bonus.indb 4 01/03/2013 16:48:41

Page 5: Capítulo Bonus

Capítulo Bônus 1: Trabalhando com Cores 5CB

Next Red Next Green Next Blue End Sub

Após a execução desse procedimento, os valores na matriz AllColors correspondem exatamente aos valores decimais de cores usados pelo Excel.

Entendendo a escala de cinzaQuando você cria planilhas e gráficos que irão ser impressos, é importante lembrar que nem todo mundo tem uma impressora colorida. E mesmo que seu gráfico seja impresso em uma impressora colorida, é possível que ele venha a ser fotocopiado, enviado por fax ou visto por algum daltônico (uma condição que afeta cerca de 8 porcento dos homens).

Quando o conteúdo é impresso em uma máquina sem tinta colorida, as cores são convertidas em escala de cinza. Às vezes você terá sorte e suas cores irão ficar bem distintas quando convertidas em escala de cinza. Outras vezes, você não terá tanta sorte. Por exemplo, as colunas em um gráfico podem ficar indistintas quando as cores são convertidas.

Toda escala de cinza tem componentes iguais de vermelho, verde e azul. Preto puro é RGB(0, 0, 0). Branco puro é RGB(255, 255, 255). Cinza neutro é RGB(128, 128, 128). Através desse sistema de cor, são produzidos 256 tons de cinza.

Para criar uma escala de cinza de 256 tons em uma fila de células, execute o seguinte procedimento. Ele colore o fundo das células no intervalo A1:A256, começando pelo preto e terminando no branco. Diminua o zoom da planilha para ver todo o intervalo.

Sub GenerateGrayScale() Dim r As Long For r = 0 To 255 Cells(r + 1, 1).Interior.Color = RGB(r, r, r) Next rEnd Sub

A Figura 1-2 mostra o resultado. Após diminuir a altura das linhas e alargar a coluna A, você fica com um bom gradiente, que vai desde o preto puro até o branco puro. Não sei o que você pode fazer com isso, mas fica muito bom.

Capítulo bonus.indb 5 01/03/2013 16:48:41

Page 6: Capítulo Bonus

6 Programção em Excel VBA Para Leigos, 2ª EdiçãoCB

Convertendo cores em cinzaE se você quiser converter cores em escala de cinza? Um método simples é fazer uma média dos componentes vermelho, verde e azul de uma cor e usar esse valor único para os componentes vermelho, verde e azul do seu equivalente na escala de cinza. Esse método, no entanto, não considera que diferentes cores são percebidas com diferentes níveis de brilhância. Por exemplo, o verde é visto com mais brilho do que o vermelho, e o vermelho é visto com mais brilho do que o azul.

Experimentos perceptuais chegaram à seguinte “receita” para converter um valor de cor RGB para um valor em escala de cinza (vá com moderação no sal):

✓ 28,7% do componente vermelho

✓ 58,9% do componente verde

✓ 11,4% do componente azul

Por exemplo, considere o valor de cor 16751001, um tom de violeta que corresponde ao RGB(153, 153, 255). Aplicando os fatores listados acima, os valores RGB são:

✓Vermelho: 28,7% x 153 = 44

✓Verde: 58,9% x 153 = 90

✓Azul: 11,4% x 255 = 29

A soma desses valores é 163. Assim, o valor RGB correspondente em escala de cinza para o valor de cor 16751001 é RGB(163, 163, 163).

Figura 1-2: Células

mostrando 256 tons de

cinza.

Capítulo bonus.indb 6 01/03/2013 16:48:41

Page 7: Capítulo Bonus

Capítulo Bônus 1: Trabalhando com Cores 7CBA seguir está uma função VBA que faz aquele cálculo para você. Esta função aceita um valor decimal de cor como argumento e retorna o valor correspondente em escala de cinza.

Function Grayscale(color) As Long Dim r As Long, g As Long, b As Long r = (color \ 256 ^ 0 And 255) * 0.287 g = (color \ 256 ^ 1 And 255) * 0.589 b = (color \ 256 ^ 2 And 255) * 0.114 Grayscale = RGB(r + g + b, r + g + b, r + g + b)End Function

Visualizando gráficos em escala de cinzaInfelizmente, o recurso “visualizar impressão” do Excel não faz conversão em escala de cinza. Por exemplo, se você tem uma impressora a laser em preto-e-branco, a visualização da sua impressão mostra cores, mas não a escala de cinza que é realmente produzida pela sua impressora.

A propósito, a aba Folha na caixa de diálogo Configurar Página (ela aparece ao clicar em Layout de Página dentro do grupo Configurar Página) tem uma opção denominada Preto e Branco. Quando marcada, seus gráficos são impressos em preto e branco de verdade – o que não é o mesmo que escala de cinza. As cores são convertidas em padrões que consistem em preto e branco (sem cinza). Note que esse recurso aplica-se apenas a gráficos e outros objetos de natureza gráfica. Quando imprimir no modo Preto e Branco, as cores das células são ignoradas.

Aqui está uma técnica que lhe permite ver como um gráfico incorporado fica quando é convertido em escala de cinza:

1. Selecione o gráfico.

2. Pressione Ctrl+C para copiar o gráfico no Clipboard.

3. Clique na célula e selecione Home a Clipboard a Colar a Figura(U).

4. Selecione a figura colada e vá para Ferramentas de Figura a Formatar a Ajustar a Cor e então escolha o modo de cor Escala de Cinza na seção Recolorir na galeria que aparece abaixo (veja a Figura 1-3).

Esses passos podem ser automatizados no macro a seguir. A função ShowChartAsGrayScale copia o gráfico ativo como uma figura e converte a figura em escala de cinza. Após determinar se as cores estão satisfatórias para uma impressão em escala de cinza, você pode deletar a figura.

Capítulo bonus.indb 7 01/03/2013 16:48:41

Page 8: Capítulo Bonus

8 Programção em Excel VBA Para Leigos, 2ª EdiçãoCB

Sub ShowChartAsGrayScale()‘ Copies the active chart as a grayscale picture‘ Embedded charts only If ActiveChart Is Nothing Then MsgBox “Select a chart.” Exit Sub End If ActiveChart.Parent.CopyPicture ActiveChart.Parent.TopLeftCell.Select ActiveSheet.Pictures.Paste ActiveSheet.Pictures(ActiveSheet.Pictures.Count). _ ShapeRange.PictureFormat.ColorType = _ msoPictureGrayscaleEnd Sub

Na Internet: Uma pasta de trabalho com esse exemplo está disponível no site deste livro na Internet.

Não passe por cima dos estilos de gráficos em escala de cinza que já vêm no programa. As escalas de cinza usadas nesses estilos são otimizadas para mostrar variações em elementos gráficos.

Experimentando com coresA Figura 1-4 mostra uma pasta de trabalho que eu criei que lida com cores. Se você está confuso sobre como o modelo RGB de cores funciona, dar uma olhada nesse modelo da pasta de trabalho com cores, irá provavelmente tornar tudo mais claro. Ou elá poderá lhe dar uma dor de cabeça.

NA IN

TERNET

Figura 1-3: Convertendo

uma figura de um gráfico

em escala de cinza.

DICA

Capítulo bonus.indb 8 01/03/2013 16:48:41

Page 9: Capítulo Bonus

Capítulo Bônus 1: Trabalhando com Cores 9CB

Essa pasta de trabalho contém três barras de rolagem verticais, cada uma das quais controla a cor de fundo de uma fila. Use essas barras de rolagem para especificar os componentes vermelho, verde e azul para uma cor com valores entre 0 e 255. Movendo-se as barras, várias áreas da planilha mudam:

✓As células acima das barras de rolagem (nas linhas 5 e 6) mostram os componentes de cor em hexadecimais (00-FF) e em decimais (0-255). Valores hexadecimais RGB de cores são normalmente usados ao se especificar cores para documentos em HTML.

✓As filas ao lado de cada barra de rolagem mudam de intensidade de acordo com a posição da barra (ou seja, o valor do componente de cor).

✓A fila abaixo das barras de rolagem demonstra a cor combinada e determinada pelos valores RGB que você especificou.

✓Uma célula mostra o valor decimal de cor.

✓Uma outra fila demonstra a aparência aproximada da cor quando convertida em escala de cinza.

✓As células na linha 26 mostram os valores HSL (Hue – matiz, Saturation – saturação, and - e Lightness – brilho) de cor correspondentes (HSL é um outro modelo de cor usado em alguns softwares).

Figura 1-4: Esta pasta

de trabalho demonstra

como as cores vermelho,

verde e azul se combinam

entre si.

Capítulo bonus.indb 9 01/03/2013 16:48:42

Page 10: Capítulo Bonus

10 Programção em Excel VBA Para Leigos, 2ª EdiçãoCB

Entendendo temas de documentosUm novo e importante recurso introduzido no Excel 2007 foi temas. Com um simples clique do mouse, você pode mudar toda a aparência de um documento. Um tema consiste em três componentes: cores, fontes e efeitos (para objetos gráficos). A lógica em usar, consiste no que eles podem ajudar os usuários a produzir documentos mais consistentes e visualmente melhores. Um tema se aplica a toda a pasta de trabalho, e somente à planilha ativa.

Sobre temas O Microsoft Office 2010 vem com cerca de 40 temas, e você pode baixar outros na Internet ou criar temas extras. A barra de ferramentas inclui várias galerias de estilo (por exemplo, a galeria de Estilos Gráficos). Os estilos disponíveis nessas galerias variam de acordo com o tema escolhido para o documento. Se você aplica um tema diferente no documento, este muda para adaptar-se às novas cores, fontes e efeitos do tema.

Se você ainda não explorou o maravilhoso mundo dos temas, abra a pasta de trabalho denominada “document theme demo.xlsx” no site deste livro na Web. Essa pasta de trabalho contém uma fila que mostra cada cor de tema, duas formas, texto (usando fontes de título e corpo de texto) e um gráfico. Selecione Page Layout a Themes a Themes Gallery para ver como a planilha muda de acordo com cada tema.

Os usuários também podem combinar os elementos dos temas entre si. Por exemplo, você pode usar as cores de um tema, as fontes de outro tema e os efeitos de um outro tema diferente. Além disso, você pode criar um novo grupo de cores ou fontes. Você pode salvar esses temas personalizados e os aplicar em outras pastas de trabalho.

O conceito de temas é baseado na ideia de que os usuários irão aplicar pouca ou nenhuma formatação ao documento. Se o usuário aplicar cores ou fontes que não fazem parte do tema atual, essa formatação não será modificada caso um novo tema seja aplicado ao documento. Portanto, ainda é muito fácil criar um documento feio com cores que não combinam e com muitas fontes diferentes.

NA IN

TERNET

LEMBRE-SE

Capítulo bonus.indb 10 01/03/2013 16:48:42

Page 11: Capítulo Bonus

Capítulo Bônus 1: Trabalhando com Cores 11CB

Entendendo as cores dos temasQuando um usuário aplica uma cor a uma célula ou objeto, a cor é selecionada em uma aba de controle como a mostrada na Figura 1-5. O controle mostra as 60 cores de tema (10 colunas e 6 linhas) mais 10 cores-padrão adicionais. Ao clicar na opção Mais Cores, aparece uma caixa de diálogo Cores, na qual você pode escolher qualquer das 16.777.216 cores disponíveis.

Figura 1-5: Um controle de seleção de cores.

As 60 cores de tema são identificadas por ToolTips pop up. Por exemplo, a cor na segunda linha da sexta coluna é carinhosamente chamada de “Accent 2, Lighter 80%” (Tom 2, 80% Mais claro).

A primeira linha de cada coluna de cores contém a cor “pura”. Abaixo de cada cor pura estão seis variações de “matiz e tonalidade” (tint and shade). A Figura 1-6 mostra as descrições de cor para os controles de seleção de cor.

Fundo 1 Texto 1 Fundo 2 Texto 2 Tom 1 Tom 2 Tom 3 Tom 4 Tom 5 Tom 6

5% Mais escuro

50% Mais claro

10% Mais escuro

80% Mais claro

80% Mais claro

80% Mais claro

80% Mais claro

80% Mais claro

80% Mais claro

80% Mais claro

15% Mais escuro

35% Mais claro

25% Mais escuro

80% Mais claro

60% Mais claro

60% Mais claro

60% Mais claro

60% Mais claro

60% Mais claro

60% Mais claro

25% Mais escuro

25% Mais claro

50% Mais escuro

80% Mais claro

40% Mais claro

40% Mais claro

40% Mais claro

40% Mais claro

40% Mais claro

40% Mais claro

35% Mais escuro

15% Mais claro

75% Mais escuro

25% Mais escuro

25% Mais escuro

25% Mais escuro

25% Mais escuro

25% Mais escuro

25% Mais escuro

25% Mais escuro

50% Mais escuro

5% Mais claro

90% Mais escuro

50% Mais escuro

50% Mais escuro

50% Mais escuro

50% Mais escuro

50% Mais escuro

50% Mais escuro

50% Mais escuro

Lembre-se de que esse são nomes genéricos de cores; eles permanecem iguais, mesmo que um tema diferente seja aplicado. Essas cores de tema consistem, na verdade, nas dez cores mostradas na primeira linha (quatro cores de texto/fundo e seis tons) e cada uma dessas dez cores têm variações de matiz e tonalidade.

Seria muito instrutivo gravar um macro quando você muda as cores de preenchimento e texto de uma fila. A seguir encontra-se um macro que eu gravei quando uma fila era selecionada. Para a cor de preenchimento, eu escolhi “Tom 2, 25% Mais escuro” (Accent 2, Darker 25%), e para a cor de texto, escolhi “Texto 2, 80% Mais claro” (Text 2, Lighter 80%).

Figura 1-6: Descrições

de cores para os

seletores de cor do

Excel.

Capítulo bonus.indb 11 01/03/2013 16:48:42

Page 12: Capítulo Bonus

12 Programção em Excel VBA Para Leigos, 2ª EdiçãoCB

Sub ChangeColors() With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent2 .TintAndShade = -0.249977111117893 End With With Selection.Font ‘(Text 2, Lighter 80%) .ThemeColor = xlThemeColorLight2 .TintAndShade = 0.799981688894314 End WithEnd Sub

Como você pode ver, cada cor é especificada em termos de uma propriedade ThemeColor e uma propriedade TintAndShade. A propriedade ThemeColor é bastante fácil de decifrar. Valores de propriedades são atribuídos através de constantes internas que correspondem ao número da coluna da tabela 10 x 6 de cores de tema. Por exemplo, xlThemeColorAccent2 tem um valor de 6. Mas e quanto à propriedade TintAndShade?

A Propriedade TintAndShade pode ter um valor entre -1 e +1. Um valor de -1 resulta em preto, e um valor de +1 resulta em branco. Um valor de propriedade TintAndShade igual a 0 dá a cor pura. Em outras palavras, conforme o valor de TintAndShade se torna mais negativo, a cor fica mais escura até se tornar preto puro. Conforme o valor de TintAndShade se torna mais positivo, a cor fica mais clara até se tornar branco puro. O valor TintAndShade corresponde ao nome da cor mostrado nos controles de seleção de cor.

Se a variação da cor é expressa como “Mais escura” (Darker), o valor da propriedade TintAndShade é negativo. Se a variação de cor é expressa como “Mais clara” (Lighter), o valor da propriedade TintAndShade é positivo.

A propósito, eu não sei por que os valores de TintAndShade têm um valor tão alto de precisão em macros gravados. É certamente desnecessário. Por exemplo, um valor de propriedade TintAndShade de -0.249977111117893 produz o mesmo resultado visual que um valor de propriedade TintAndShade igual a -0.25. É apenas um daqueles mistérios do VBA.

Capítulo bonus.indb 12 01/03/2013 16:48:42

Page 13: Capítulo Bonus

Capítulo Bônus 1: Trabalhando com Cores 13CB

Mostrando todas as cores de temaEu fiz um macro que mostra todas as 60 variações de cor em uma fila de células. Essas 60 cores são as que aparecem nos controles de seleção.

Sub ShowThemeColors()

Dim r As Long, c As Long

For r = 1 To 6

For c = 1 To 10

With Cells(r, c).Interior

.ThemeColor = c

Select Case c

Case 1 ‘Text/Background 1

Select Case r

Case 1: .TintAndShade = 0

Case 2: .TintAndShade = -0.05

Case 3: .TintAndShade = -0.15

Case 4: .TintAndShade = -0.25

Case 5: .TintAndShade = -0.35

Case 6: .TintAndShade = -0.5

End Select

Case 2 ‘Text/Background 2

Select Case r

Case 1: .TintAndShade = 0

Case 2: .TintAndShade = 0.5

Case 3: .TintAndShade = 0.35

Case 4: .TintAndShade = 0.25

Case 5: .TintAndShade = 0.15

Case 6: .TintAndShade = 0.05

End Select

Case 3 ‘Text/Background 3

Select Case r

Case 1: .TintAndShade = 0

Case 2: .TintAndShade = -0.1

Case 3: .TintAndShade = -0.25

Case 4: .TintAndShade = -0.5

Case 5: .TintAndShade = -0.75

Case 6: .TintAndShade = -0.9

End Select

Case Else ‘Text/Background 4, and Accent 1-6

Capítulo bonus.indb 13 01/03/2013 16:48:42

Page 14: Capítulo Bonus

14 Programção em Excel VBA Para Leigos, 2ª EdiçãoCB

Select Case r

Case 1: .TintAndShade = 0

Case 2: .TintAndShade = 0.8

Case 3: .TintAndShade = 0.6

Case 4: .TintAndShade = 0.4

Case 5: .TintAndShade = -0.25

Case 6: .TintAndShade = -0.5

End Select

End Select

Cells(r, c) = .TintAndShade

End With

Next c

Next r

End Sub

A Figura 1-7 mostra o resultado da execução do procedimento ShowThemeColors (é mais impactante em cores). Se você mudar para um tema diferente, as cores serão atualizadas para retratar aquelas do novo tema.

Esse exemplo está disponível no site deste livro na Internet.

Anteriormente neste capítulo, eu descrevi como mudar a cor de preenchimento de uma fila através da aplicação da propriedade Color do objeto Interior. Como observei, a função RGB do VBA torna esse trabalho mais fácil. Os dois comandos a seguir demonstram como mudar a cor de preenchimento de uma fila (os dois apresentam o mesmo resultado):

Figura 1-7: Um macro

VBA gerou essas cores

de tema.

NA IN

TERNET

Capítulo bonus.indb 14 01/03/2013 16:48:42

Page 15: Capítulo Bonus

Capítulo Bônus 1: Trabalhando com Cores 15CB

Range(“A1:F24”).Interior.Color = 5913728Range(“A1:F24”).Interior.Color = RGB(128, 60, 90)

É importante entender que atribuir uma cor dessa forma não a torna uma cor de tema. Em outras palavras, se o usuário mudar para um novo tema, o intervalo A1:F24 não mudará de cor. Para mudar as cores de células de forma consistente com os temas, você será obrigado a usar a propriedade ThemeColor e (opcionalmente) a propriedade TintAndShade.

Capítulo bonus.indb 15 01/03/2013 16:48:42

Page 16: Capítulo Bonus

16 Programção em Excel VBA Para Leigos, 2ª EdiçãoCB

Capítulo bonus.indb 16 01/03/2013 16:48:42

Page 17: Capítulo Bonus

Capítulo Bônus 2

10 dicas sobre o que fazer e o que não fazer em VBA

Se você está lendo este capítulo bônus, você provavelmente já leu a maior parte do conteúdo deste livro e certamente está familiarizado com o

VBA do Excel. Este capítulo lhe dá algumas dicas que você deveria seguir quando começar a desenvolver suas próprias soluções em VBA. Estas dicas não são a solução para todos os seus problemas (de programação), mas segui-las pode ajudá-lo a evitar armadilhas sobre as quais outros tropeçaram.

Declare Todas as VariáveisVeja quão conveniente: Simplesmente comece a digitar seu código VBA sem ter que passar pela tediosa tarefa de declarar cada variável que você quer usar. Apesar do Excel permitir que você use variáveis não declaradas, fazer isso é procurar encrenca.

O primeiro mandamento da programação em VBA deveria ser: Deverás declarar todas as variáveis.

Se você não tem disciplina, adicione “Option Explicit” no início de seus módulos. Dessa forma, se incluir uma ou mais variáveis não declaradas seu código nem irá ser executado. Não declarar todas as variáveis tem apenas uma vantagem: você economiza uns segundos do seu tempo. Mas o uso de variáveis não declaradas, irá retornar para assombrá-lo qualquer dia desses. E eu garanto que levará mais do que alguns segundos para descobrir o problema.

Não Confunda Senhas com SegurançaVocê levou meses para criar um app de Excel genial, com alguns macros inacreditáveis. Você está pronto para revelá-lo ao mundo, mas não quer que outros vejam sua incrível programação macro. Apenas proteja o seu Projeto VBA com uma senha e você estará a salvo, certo? Errado.

Capítulo bonus.indb 17 01/03/2013 16:48:42

Page 18: Capítulo Bonus

18 Programção em Excel VBA Para Leigos, 2ª EdiçãoCB

Usar uma senha de VBA pode evitar que a maioria dos usuários eventuais veja o seu código. Mas se alguém realmente quiser vê-lo, dará um jeito de descobrir a senha.

Conclusão? Se você absolutamente,tiver que manter o seu código em segredo, o Excel não é a melhor escolha como essa plataforma de desenvolvimento.

Limpe o seu códigoApós se certificar de que o seu app está funcionando de forma satisfatória, você deverá limpá-lo. Alguns serviços de limpeza de códigos são os seguintes:

✓Certifique-se de que todas as variáveis estão declaradas.

✓Certifique-se de que a endentação de todas as linhas está correta para que a estrutura do código festeja visível.

✓Renomeie qualquer variável que não esteja nomeada de forma apropriada. Por exemplo, se você usar a variável MinhaVariável, há uma boa chance de que você consiga criar um nome mais descritivo para ela. Você irá agradecer mais tarde.

✓ Se você é como eu, seus módulos provavelmente possuem alguns procedimentos-teste que você escreveu enquanto tentava resolver algo. Eles já fizeram seu trabalho, portanto, delete-os.

✓Adicione comentários para que você entenda como o código funciona quando olhar para ele daqui a seis meses.

✓Certifique-se de que tudo está escrito de forma correta – especialmente textos em UserForms e caixas de diálogo.

✓Veja se não há códigos redundantes. Se você tem dois ou mais procedimentos que possuem blocos de código idênticos, procure criar um novo procedimento que controle os outros.

Não Coloque Tudo em Apenas um Procedimento

Quer fazer um programa ininteligível? Uma forma eficiente de construí-lo é colocar todo o seu código dentro de um grande procedimento. Se você vier a revisitar esse programa novamente e fazer mudanças nele, você estará fadado a cometer erros e introduzir alguns bons bugs ali.

Vê o problema? A solução são códigos modulares. Divida o seu programa em pedaços menores, em que cada pedaço é desenvolvido para realizar uma tarefa específica. Depois que adquirir esse hábito, descobrirá que fazer códigos livres de bugs é mais fácil do que parece.

Capítulo bonus.indb 18 01/03/2013 16:48:42

Page 19: Capítulo Bonus

Capítulo Bônus 2: 10 dicas sobre o que fazer e o que não fazer em VBA 19CB

Considere Usar Outros SoftwaresO Excel é um programa surpreendentemente versátil, mas não é adequado para tudo. Quando você está pronto para começar um novo projeto, tire um tempo e leve em consideração todas as suas opções. Parafraseando um antigo ditado: “Quando tudo o que você conhece é o VBA do Excel, tudo se parece com um macro do VBA.”

Não Presuma que Todo Mundo Habilite Macros

Como você sabe, o Excel permite que o usuário abra uma pasta de trabalho com seus macros desativados s. Na verdade, é quase como se os designers das versões recentes do Excel quisessem encorajar os usuários a desabilitar macros.

É claro que habilitar os macros quando você abre uma pasta de trabalho de uma fonte desconhecida não é uma boa ideia.. Então você precisa conhecer os seus usuários. Em alguns ambientes corporativos, todos os macros do Microsoft Office encontram-se desabilitados, e o usuário não tem poder de escolha sobre o assunto.

Uma coisa a levar em consideração é adicionar uma assinatura digital às pastas de trabalho que você distribui a outrem. Dessa forma, o usuário pode ter certeza de que as pastas realmente vieram de você e não foram alteradas. Consulte o sistema de Ajuda para mais informações sobre assinaturas digitais.

Tenha como hábito fazer experimentosQuando eu trabalho com um projeto no Excel em larga escala, eu geralmente passo um bom tempo fazendo pequenos “experimentos” no VBA. Por exemplo, se estou tentando saber a respeito de um novo objeto, método ou propriedade, eu apenas escrevo um procedimento Sub simples e brinco com ele até que eu esteja certo de que tenha um entendimento detalhado sobre como ele funciona – e seus problemas em potencial.

Desenvolver experimentos simples é quase sempre muito mais eficiente do que incorporar uma nova ideia ao seu código já existente sem o entendimento que esses experimentos lhe trazem.

Capítulo bonus.indb 19 01/03/2013 16:48:42

Page 20: Capítulo Bonus

20 Programção em Excel VBA Para Leigos, 2ª EdiçãoCB

Não presuma que o seu código irá funcionar em outras versões do Excel

Atualmente, pelo menos cinco versões diferentes do Excel estão em uso ao redor do mundo. Quando você cria um app para Excel, você não tem garantia nenhuma de que ele irá funcionar perfeitamente em versões mais novas ou antigas. Em alguns casos, as incompatibilidades serão óbvias (por exemplo, se seu código se refere à célula XDY877322, você já sabe qe não irá funcionar em versões anteriores ao Excel 2007, pois tais versões usavam uma grade de planilha menor). Mas você também irá encontrar que as coisas que deveriam funcionar em uma versão mais nova não funcionam.

O Excel inclui um verificador de compatibilidade muito útil (Clique no Botão do Microsoft Office a Preparar a Executar Verificador de Compatibilidade), mas ele somente verifica a pasta de trabalho e ignora o código VBA. A única forma de ter certeza de que seu aplicativo funciona em versões diferentes daquela onde você o criou é testá-lo em outras versões.

Sempre tenha em mente seus usuáriosOs apps de Excel se dividem em duas grandes categorias: aqueles que você desenvolve para si mesmo e aqueles que você desenvolve para outros usarem. Se você desenvolve aplicativos para outros, seu trabalho é muito mais difícil, pois você não pode fazer os mesmos tipos de hipóteses. Por exemplo, você pode ser mais relaxado ao lidar com erros se você é o único usuário. Se um erro aparece, você terá uma boa ideia sobre onde procurar para arrumá-lo. Se outra pessoa estiver usando seu app e o mesmo erro aparece, ela não terá a mesma sorte. E ao trabalhar com seu próprio aplicativo, você normalmente consegue se virar sem instruções.

Você precisa entender o nível de habilidade daqueles que irão usar suas pastas de trabalho e tentar antecipar os problemas que eles possam vir a ter. Tente se colocar no lugar de um novo usuário do seu aplicativo e identifique todas as áreas que possam causar confusão ou problemas.

Não se esqueça dos backupsNada é mais desencorajador do que uma falha no disco rígido sem um backup. Se você não estiver trabalhando em um projeto importante, faça a si mesmo uma pergunta simples: se o meu computador morrer hoje à noite, o que irei perder? Se a sua resposta é mais do que algumas horas de trabalho, então você deve dar uma boa olhada no seu processo de backup de dados. Você tem um processo de backup de dados, não?

Capítulo bonus.indb 20 01/03/2013 16:48:42