Microsoft Excel
Visual Basic para Aplicativos
RESUMO: O Objeto Range
Por Fernando de Carvalho Navarro
O Objeto Range
Este é, talvez, o objeto mais utilizado e necessário no Excel. É sobre as células e intervalos que você insere valores, efetua cálculos e aplica as mais variadas formatações. Genericamente, ele pode ser representado com a seguinte sintaxe:
Range(intervalo)
O objeto Range pode referenciar uma célula, um intervalo, vários intervalos ou todas as células da planilha. Você pode representar intervalos que estão na mesma planilha das seguintes formas: Range("A5") ' Célula A5
Range("H2:J13") ' Intervalo H2 até J13
Range("C5:C10,E5:E10,G5:G10") ' Três intervalos não adjacentes
Range("A1","C7").Select ' Intervalo A1 até C7
Range("J:K") ' Toda a coluna J até a coluna K
Range("3:3") ' Toda a linha 3
Range("Taxa") ' Intervalo nomeado “Taxa”
Quando as referências não estão na mesma planilha você precisa qualificar a sintaxe, incluindo o nome da planilha. A linha abaixo referencia o intervalo A5 até A15 da planilha “Plan1”:
Worksheets("Plan1").Range("A5:A15")
Você pode ir mais além, apontando para um intervalo que se encontra numa outra pasta de traba-lho que está aberta, como no exemplo:
Workbooks("Vendas.xlsx").Worksheets("Janeiro").Range("A1:C5")
Nota: Não é possível usar a sintaxe acima para apontar para intervalos em pastas de trabalho
fe-chadas.
Alternativamente você pode usar a propriedade Cells do objeto Range para fazer referência a intervalos. A sintaxe para uso da propriedade Cells é a seguinte:
Cells(linha, coluna)
Quando usada sem os argumentos, Cells refere-se a toda a planilha, caso contrário especifica uma única célula localizada pelo número de linha e coluna.
No exemplo a seguir, a sintaxe faz referência à célula C2 da planilha “Plan2”: Worksheets("Plan2").Cells(2, 3)
A próxima linha mostra uma referência a um intervalo de 100 células, partindo de A1 até J10, na planilha ativa:
Range(Cells(1, 1), Cells(10, 10))
No caso acima, a propriedade Cells foi usada para determinar o início e o final do intervalo refe-renciado pelo objeto Range.
A propriedade Cells também permite usar letras para especificar uma coluna fixa. No exemplo a seguir, se a variável linha contém o número 10, então a referência será para a célula que está na linha 10, coluna B, ou seja, a célula B10.
Cells(linha, "B")
Se você precisar de referências a intervalos que estão afastados de um determinado endereço por uma quantidade de linhas e colunas, use a propriedade Offset.
No exemplo a seguir a célula referenciada é a que está, a partir de A1, uma linha abaixo e duas colunas à direita, ou seja, a célula C2.
Range("A1").Offset(1, 2)
O próximo exemplo mostra uma referência a um intervalo deslocado, que está 2 linhas acima e 3 colunas à esquerda de D5. Observe os argumentos negativos. Neste caso, o intervalo de destino é A3 até C10.
Range("D5:F12").Offset(-2, -3)
A vantagem das propriedades Cells e Offset se torna evidente quando você usa variáveis ao invés dos números de linha e coluna, ou mesmo endereços fixos.
Quando você precisar de referência a colunas inteiras ou linhas inteiras, use expressões como nos exemplos abaixo:
Columns("A:D") Rows("2:5")
A propriedade Value do objeto Range é a que efetivamente se refere ao seu valor (conteúdo). Você poderá recuperar o conteúdo de uma célula ou atribuir um valor a uma célula ou intervalo. Veja os exemplos:
MsgBox Range("C5").Value ' Exibe o valor de C5 numa caixa de mensagem
Range("B7").Value = 1000 ' Atribui o valor 1000 à célula B7
Range("D2:D18") = 0 ' Atruibui zero a todas as células do intervalo
Como a propriedade Value é a propriedade padrão do objeto Range, você pode omiti-la durante a atribuição de valores. Na última linha dos exemplos acima, ela foi omitida.
A propriedade ActiveCell do objeto Range refere-se à célula ativa e é uma das propriedades mais úteis, uma vez que você pode aplicar atributos, valores ou deslocamentos à célula ativa, não importa qual seja. Veja os exemplos:
ActiveCell.Value = "Total" ' Atribui o texto “Total” à celula ativa
ActiveCell.Offset(1, 0) = 0 ' Atribui 0 à célula abaixo da célula ativa
Agora, com relação aos métodos (ações), o método Select do objeto Range é o mais usado. Ele permite selecionar uma célula, um intervalo, vários intervalos ou até a planilha inteira. Alguns exemplos:
Range("C1:C5").Select ' Seleciona o intervalo C1 até C5
ActiveCell.Offset(1, 0).Select ' Seleciona a célula abaixo da célula ativa
Antes de selecionar um intervalo que está em outra planilha é necessário ativar a outra planilha, senão o VBA reportará um erro.
Sheets("Plan2").Select ' Seleciona a planilha “Plan2”
Até agora você aprendeu algumas maneiras de representar intervalos no VBA, através do objeto
Range, das propriedades Value, ActiveCell, Cells, Offset, Rows e Columns e do método Se-lect. Veja a seguir uma lista maior que relaciona as principais propriedades e métodos do objeto
Range. Logo em seguida você verá muitos exemplos de aplicação dessas propriedades e métodos, que representam excelente fonte de aprendizado.
Propriedades para conteúdo e seleção
ActiveCell Retorna uma célula ativa (objeto Intervalo). Somente leitura.
Address Endereço da célula no estilo $A$1 (endereço absoluto).
Cells Retorna todas as células da planilha, ou uma única célula especificada por um índice de linha e de coluna.
ColumnWidth Retorna ou define a largura de uma ou mais colunas.
Columns Retorna uma ou mais colunas. Um índice especifica uma única coluna.
Count Retorna a contagem de células do intervalo. Somente leitura.
CutCopyMode Quando definido como False, cancela o modo Recortar/Copiar.
EntireColumn Especifica linhas inteiras usando o intervalo selecionado.
EntireRow Especifica linhas inteiras usando o intervalo selecionado.
Formula Contém uma fórmula usando endereços absolutos (estilo $A$1).
FormulaR1C1 Contém uma fórmula usando endereços relativos (estilo R1C1).
Locked Indica se a célula ou intervalo está travado (True) ou não (False).
Name Define ou retorna um nome para o intervalo especificado.
Offset Retorna um intervalo a partir de um deslocamento relativo ao intervalo original especificado. Os parâmetros indicam o número de linhas e colu-nas a deslocar. O deslocamento de linha pode ser para baixo (número positivo) ou para cima (número negativo). O deslocamento de coluna pode ser para a direita (número positivo) ou para a esquerda (número negativo).
Resize Retorna um intervalo redimensionado, conforme indicado por seus dois parâmetros: nº de linhas e nº de colunas. A origem do intervalo perma-nece no canto superior esquerdo.
RowHeight Retorna ou define a altura de uma ou mais linhas.
Rows Retorna uma ou mais linhas. Um índice especifica uma única linha.
Propriedades para formatação
BorderAround Define características para a borda de contorno do intervalo. Deve ser complementada com outras sub-propriedades. Veja complemento em “Propriedades específicas para bordas”, adiante.
Borders Define características para a borda individual especificada. Deve ser complementada com outras sub-propriedades. Veja complemento em “Propriedades específicas para bordas”, adiante.
Font Define características de texto. Deve ser complementada com outras sub-propriedades. Veja detalhes em “Propriedades específicas para fon-tes”.
HorizontalAlignment Alinhamento horizontal do conteúdo da célula.
Interior Interior (preenchimento) da célula. Veja detalhes em “Propriedades Específicas para o Interior de Células”.
Orientation Direção de escrita horizontal ou vertical do conteúdo da célula.
VerticalAlignment Alinhamento vertical do conteúdo da célula.
WrapText Determina se o texto terá retorno automático de linha na mesma célula (True) ou não (False).
Propriedades específicas para fontes
ColorIndex Índice da cor aplicada ao texto. Veja tabela de cores mais adiante.
Color Número inteiro que representa uma cor misturada. Use a função RGB para obter a cor.
FontStyle Caracteriza o tipo de ênfase: normal, negrito, itálico ou negrito itálico.
Name Nome da fonte. Depende das fontes instaladas no Windows.
Size Determina o tamanho do texto em pontos.
StrikeThrough Especifica se o texto será tachado (True) ou não (False).
Subscript Texto subscrito (True) ou não (False).
Superscript Texto sobrescrito (True) ou não (False).
Underline Determina o tipo de sublinhado a ser aplicado no texto.
Propriedades específicas para bordas
Color Número inteiro que representa uma cor misturada. Use a função RGB para obter a cor.
LineStyle Estilo de linha para a borda.
Weight Espessura da borda.
Propriedades específicas para interior de células
ColorIndex Índice da cor aplicada à borda. Veja tabela de cores mais adiante.
Color Número inteiro que representa uma cor misturada. Use a função RGB para obter a cor.
Pattern Estilo de padrão (textura) para preenchimento das células.
PatternColorIndex Índice da cor aplicada ao padrão. Veja tabela de cores mais adiante.
Métodos
Activate Ativa uma única célula no intervalo selecionado, sem desmarcá-lo.
AutoFit Altera a largura de colunas ou altura de linhas para o melhor ajuste.
Clear Limpa todo o intervalo selecionado: conteúdo e formato.
ClearContents Limpa todo o conteúdo do intervalo selecionado.
ClearFormats Limpa toda a formatação do intervalo selecionado.
ClearNotes Limpa todas as notas do intervalo especificado.
Copy Copia o objeto para a Área de Transferência ou para outro destino.
CurrentRegion Retorna todas as células numa área contínua adjacente à seleção atual.
Cut Recorta o objeto para a Área de Transferência ou para outro destino.
Delete Exclui células ou outros objetos.
Insert Insere células, linhas ou colunas, deslocando o local da inserção.
Paste Cola o conteúdo da Área de Transferência do Windows.
Range Retorna um objeto Intervalo, cujo endereço está especificado.
Select Seleciona uma ou mais células ou intervalos, retornando o objeto Célula Ativa (ActiveCell) ou a coleção Intervalo (Range).
TextNote Retorna ou define uma anotação para uma célula no intervalo.
Para uma explicação mais completa sobre essas propriedades e métodos (e outros não relaciona-dos aqui), acesse a ajuda do Visual Basic.
Exemplos de Aplicação
A seguir você verá uma série de exemplos de aplicação das propriedades e métodos vistos até aqui, com algumas possibilidades de variação em sua sintaxe. Para uma informação completa so-bre a palavra-chave, selecione-a com o mouse na listagem e pressione a tecla F1 para obter uma explicação detalhada.
Atribuição de valores
ActiveCell.Value = "Totais" ' Armazena o texto "Totais" na célula ativa
Range("A1").Value = 100 ' Atribui 100 à célula A1
Worksheets("Plan1").Range("A1").Value = 100 ' Atribui 100 à célula A1 em Plan1 ' A linha seguinte atribui o valor 100 à célula A1 da planilha Plan1 do arquivo Vendas.xlsx
Workbooks("Vendas.xlsx").Worksheets("Plan1").Range("A1").Value = 100
Referência Absoluta: Atribui 0 à célula da linha 4 e coluna 5:
Cells(4, 5).Value = 0 ' Forma matricial (linha, coluna)
Range("E4").Value = 0 ' Usando endereçamento
[E4] = 0 ' Forma abreviada
Referência Relativa: Atribui 0 à célula da linha 4, coluna 5, partindo do intervalo selecionado:
Selection.Cells(4, 5).Value = 0 ' Forma matricial
Selection(4, 5) = 0 ' Forma abreviada
Atribuição de fórmulas
Range("B2:B6").Select ' Seleciona um intervalo
Selection.Formula = 100 ' Insere o número 100 nas células
ActiveCell.Formula = 0 ' Coloca zero na célula ativa
ActiveCell.Offset(-1; 0).Formula = 1 ' Coloca 1 na célula acima da ativa
Selection.Formula = "=B1*5" ' Insere uma fórmula na seleção
Selection.FormulaR1C1 = "=R[-6]C[-1]*5" ' Insere uma fórmula na seleção, estilo R1C1
Recuperação do conteúdo de uma célula
No exemplo, a célula B2 contém a fórmula "=B1*5", resultando "R$ 5,00" (formato moeda). O valor é retornado numa variável qualquer, por exemplo, no caso Conteúdo.
Conteúdo = Range("B2").Formula ' Fórmula original: "=B1*5"
Conteúdo = Range("B2").FormulaR1C1 ' Fórmula na notação R1C1: "=L[-1]C*5"
Conteúdo = Range("B2").Text ' Conteúdo formatado: "R$5,00"
Conteúdo = Range("B2").Value ' Conteúdo não formatado: "5"
Conteúdo = Range("B2") ' Conteúdo não formatado: "5"
Selection.Formula = Selection.Value ' Converte fórmulas para valores
Range("B2").Formula = Range("B2").Value ' Converte fórmulas para valores
Seleção de intervalos
Range("A1").Select ' Forma normal de representação de intervalo
[A1].Select ' Forma simplificada
Range("A1:C5").Select ' Células adjacentes
[A1:C5].Select ' Células adjacentes (forma simplificada)
Range("A1", "D10").Select ' Seleciona o intervalo A1 até D10
[Tabela1].Select ' Seleção de intervalo nomeado
Range("A1:C5,G1:H5").Select ' Células não adjacentes
Cells(1, 4).Select ' Célula da linha 1, coluna 4
Cells(5, "H").Select ' Seleciona a célula da linha 5 e coluna H
Cells(6).Select ' Sexta célula da planilha
Selection.Cells(1, 4).Select ' Linha 1, coluna 4, no intervalo selecionado
Selection.Cells(6).Select ' 6ª célula dentro intervalo selecionado
Set Totais = Range("B2:E4") ' Atribui referência a um intervalo…
Totais.Cells(Totais.Cells.Count).Select ' …para selecionar sua última célula
Totais.Rows(2).Select ' Seleciona a 2ª. linha do intervalo
Totais.Cells(8).Select ' Seleciona a 8ª célula do intervalo
Totais.Columns(Totais.Columns.Count).Select ' Seleciona sua última coluna
Totais.Cells(1).EntireRow.Select ' Seleciona toda linha da 1ª. célula
Totais.EntireColumn.Select ' Colunas inteiras do intervalo
Totais.CurrentRegion.Select ' Região corrente de células com valor
[B2:E4].Select ' Seleciona o intervalo B2:E4…
Selection.Cells(Selection.Cells.Count).Select ' …e seleciona sua última célula
Columns(2).Select ' Seleciona a 2ª. coluna
Columns("B:D").Select ' Seleciona colunas B à D
ActiveSheet.UsedRange.Font.ColorIndex = 4 ' Texto verde no intervalo usado
Seleções úteis de intervalos, partindo da Célula Ativa
Seleciona da célula ativa até a última célula com valor, abaixo (como em Ctrl + Shift + ): Range(ActiveCell, ActiveCell.End(xlDown)).Select
Seleciona da célula ativa até a última célula com valor, acima (como em Ctrl + Shift + ): Range(ActiveCell, ActiveCell.End(xlUp)).Select
Seleciona da célula ativa até a última célula com valor, à direita (como em Ctrl + Shift + ): Range(ActiveCell, ActiveCell.End(xlToRight)).Select
Seleciona da célula ativa até a última célula com valor, à esquerda (como em Ctrl + Shift + ): Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
Seleciona a região corrente ao redor da célula ativa (como em Ctrl + Shift + .): ActiveCell.CurrentRegion.Select
Seleciona a última célula da coluna A (A65536 para Excel 2003 e A1048576 a partir do Excel 2007): Cells(Rows.Count, "A").Select
Seleciona a última célula com algum valor na coluna A: Cells(Rows.Count, "A").Select.End(xlUp).Select
Seleciona da célula A1 até a última célula com valor na planilha (como em Ctrl + End ): Range(Range("A1"), ActiveCell.SpecialCells(xlLastCell)).Select
Seleciona a coluna inteira onde se encontra a célula ativa (como em Ctrl + espaço ): ActiveCell.EntireColumn.Select
Activecell.EntireRow.Select
Seleciona a planilha toda, quando não há valores ao redor da célula ativa (como em Ctrl + T ): Cells.Select
Seleciona dois intervalos ao mesmo tempo: A1 até B10 e E1 até F10 (união): Union(Range("A1:B10"), Range("E1:F10")).Select
Seleciona o intervalo resultante da parte comum entre os intervalos A1:B10 e A5:H5 (intersecção): Intersect(Range("A1:B10"), Range("A5:H5").Select
Nota: Os exemplos acima podem também ser usados com o objeto Selection.
Alteração de intervalos selecionados
ActiveCell.Offset(1; 2).Activate ' Desce uma linha e avança duas colunas
ActiveCell.Offset(1; 2).Select ' Desce uma linha e avança duas colunas
Linha = ActiveCell.Row ' Obtém a linha da célula ativa
Coluna = ActiveCell.Column ' Obtém a coluna da célula ativa
ActiveCell.Offset(1; 1).Select ' Move a célula ativa 1 linha e 1 coluna
Range("A10").Offset(0, 0).Select ' Célula A10, sem deslocamento
Selection.Offset(2; -1).Activate ' Move a seleção de células
Set Totais = Range("B2:E4") ' Atribui referência a um intervalo
Totais.Offset(1, 0).Select ' Seleciona mesma área, 1 linha abaixo
Totais.Offset(0, Totais.Columns.Count).Select ' Seleciona mesma área, à direita
Totais.Resize(, 4).Select ' Inclui mais uma coluna no intervalo ' Expande o intervalo definido em uma célula, em todas as direções:
Totais.Offset(-1; -1).Resize(Totais.Rows.Count + 2; Totais.Columns.Count + 2).Select
' Seleciona toda a Região Corrente, com exceção da 1ª linha (cabeçalho)
Selection.CurrentRegion.Resize(Selection.CurrentRegion.Rows.Count – 1).Offset(1, 0).Select
Nomeação de células e intervalos
Range("B2:E4").Name = "Semestre1" ' Atribui o nome ao intervalo
Limpeza de células
Selection.ClearContents ' Limpa o conteúdo e mantém formatos na seleção
Range("F6").ClearContents ' Limpa o conteúdo e mantém formatos em F6
Cells.ClearContents ' Apaga todo o conteúdo da planilha
Range("A1:A20").Clear ' Limpa tudo de A1 até A20: conteúdo e formatos
ActiveCell.ClearFormats ' Limpa só formatos na célula ativa
Obtenção de endereços de intervalos
x = ActiveCell.Address ' Armazena o endereço na variável x
Movimentação de conteúdo (como criado originalmente pelo gravador de macros)
Range("D6").Select ' Seleciona o intervalo de origem
Selection.Cut ' Recorta
Range("F6").Select ' Seleciona o intervalo de destino
ActiveSheet.Paste ' Cola
Movimentação de conteúdo (forma simplificada)
Range("B3:B6").Cut Range("D3") ' Recorta B3:B6 e cola a partir de D3
Cópia de conteúdo (como criado originalmente pelo gravador de macros)
Range("D5").Select ' Seleciona o intervalo de origem
Selection.Copy ' Copia
Range("G3:I10").Select ' Seleciona o intervalo de destino
ActiveSheet.Paste ' Cola
Application.CutCopyMode = False ' Encerra a operação de múltiplas cópias
Cópia de conteúdo (forma simplificada)
Range("D5").Copy Range("G3:I10") ' Copia D5 e cola em G3 até I10
Range("D5") = Range("D20") ' Copia o conteúdo de D20 para D5
Inserção de linhas, colunas e células
Rows("1:3").Insert Shift:=xlDown ' Insere 3 linhas, desce as demais
Columns("D:D").Insert Shift:=xlToRight ' Insere 1 col., empurra para direita
Range("E14:F17").Insert Shift:=xlDown ' Insere células, empurra para baixo
Rows(4).Insert ' Insere 1 linha antes da linha 4
Selection.EntireColumn.Insert ' Insere 1 col. inteira antes da sel.
Exclusão de linhas, colunas e células
Columns("C:E").Select ' Seleciona colunas
Selection.Delete Shift:=xlToLeft ' Exclui, puxando as outras p/ esquerda
Rows("10:15").Delete Shift:=xlUp ' Exclui linhas, subindo as outras
Selection.Delete Shift:=xlUp ' Exclui células, subindo as demais
Selection.EntireRow.Delete ' Exclui linhas da seleção de células
[C1:D5].EntireColumn.Delete ' Exclui colunas da seleção de células
Formatação de linhas e colunas
Columns("E:E").ColumnWidth = 18 ' Estabelece nova largura para "E"
Cells.ColumnWidth = 10 ' Mesma largura para toda a planilha
[D1:D5].RowHeight = 18 ' Largura para as linhas 1 a 5
Selection.EntireRow.AutoFit ' Auto ajuste nas linhas da seleção
Columns("C:E").AutoFit ' Auto ajuste nas colunas C à E
Formatação de conteúdo
Range("A1:A100").Font.Name = "Arial" ' Formata A1 até A100 com Fonte Arial
[A1:A100].Font.Name = "Arial" ' Mesma coisa, usando notação simplificada
With Range("A1:A12") ' Para o intervalo A1:A12…
.Font.Bold = True ' Ligar o negrito
.Font.Size = 12 ' Tamanho 12 pontos
.Font.Color = vbBlue ' Cor azul
.Interior.Color = RGB(207, 222, 210) ' Preenchimento com cor misturada (RGB)
.Borders.ColorIndex = 11 ' Todas as bordas em azul escuro (cor 11)
.HorizontalAlignment = xlCenter ' Alinhamento horizontal centralizado
.NumberFormat = "#,##0.00" ' Formato num. com 2 decimais e sep. de milhar
End With
Range("A1:A12").ClearFormats ' Limpa toda a formatação aplicada
Anotações em células
ActiveCell.NoteText Text:="Nota de célula..." ' Atribui uma nota
Proteção de células
Activecell.Locked = True ' Trava a célula ativa contra edição
Cores no Visual Basic e Excel
Geralmente utilizadas pelas propriedades de fonte, bordas e padrões, as cores do Excel podem ser representadas por um índice numa tabela com 56 cores básicas, por um número que representa uma cor misturada, ou uma cor do tema presentemente selecionado.
Para trabalhar com um índice de cor, use a propriedade ColorIndex, onde você pode representar uma cor predefinida por um número de 0 a 56, sendo o valor 0 definido como “transparente” (sem cor alguma). Os índices com as cores mais comuns são os de número 1 a 16:
1 - Preto 17 33 49 2 - Branco 18 34 50 3 - Vermelho 19 35 51 4 - Verde 20 36 52 5 - Azul 21 37 53 6 - Amarelo 22 38 54 7 - Magenta 23 39 55 8 - Ciano 24 40 56 9 - Vermelho escuro 25 41 10 - Verde escuro 26 42 11 - Azul Escuro 27 43 12 - Amarelo escuro 28 44 13 - Roxo 29 45 14 - Azul Petróleo 30 46 15 - Cinza claro 31 47 16 - Cinza médio 32 48 Exemplo:
ActiveCell.Interior.ColorIndex = 9 ' Aplica fundo vermelho escuro à célula ativa
Você poderá usar algumas constantes predefinidas do Visual Basic para estabelecer a cor, pela propriedade Color. Existem as seguintes constantes para as cores mais comuns: vbBlack (Preto),
vbRed (Vermelho), vbGreen (Verde), vbYellow (Amarelo), vbBlue (Azul), vbMagenta (Magenta),
vbCyan (Ciano) e vbWhite (Branco). Exemplo:
ActiveCell.Interior.Color = vbYellow ' Aplica fundo amarelo à célula ativa
Para trabalhar com uma cor misturada, use a propriedade Color, onde uma cor é representada por um número inteiro. Por exemplo, o valor de cor de 2150015 representa um verde limão. Como é difícil trabalhar direto com esses números inteiros, o mais prático é usar a função RGB, que converte as tonalidades de Vermelho (Red), Verde (Green) e Azul (Blue) para o inteiro correspon-dente:
RGB(Vermelho, Verde, Azul)
Os três parâmetros representam intensidades que variam de 0 (preto) até 255 (cor totalmente ligada). Veja os seguintes exemplos:
ActiveCell.Interior.Color = 2150015 ' Aplica fundo verde-limão à célula ativa
Range("B5").Interior.Color = RGB(255, 0, 0) ' Interior de B5 em vermelho
Range("D1:D12").Font.Color = RGB(45, 118, 87) ' Cor da fonte para o intervalo D1:D12
A partir da versão 2007, o conceito de Temas é usado em todos os aplicativos do Microsoft Office. Existem constantes predefinidas de cores também para as cores do tema em uso:
xlThemeColorAccent1 xlThemeColorDark1 xlThemeColorAccent2 xlThemeColorDark2 xlThemeColorAccent3 xlThemeColorFollowedHyperlink xlThemeColorAccent4 xlThemeColorHyperlink xlThemeColorAccent5 xlThemeColorLight1 xlThemeColorAccent6 xlThemeColorLight2