0159-Adicionando bordas a um intervalo através de Macro

Praticamente todos nós iniciamos o contato com macros através de códigos pré-existentes e da utilização do gravador de macros.
Quando lançamos mão deste último recurso, o código obtido é, geralmente enorme e possui muitas linhas que são supérfluas.
Vamos partir de um exemplo utilizando um código criado através do gravador de macros e transformá-lo num código mais limpo para otimizarmos a aplicação de bordas a um intervalo.
O código a seguir foi obtido acionando o gravador de macros e, em seguida, aplicando bordas simples nos contornos e na parte interior do intervalo A1:D10.

Sub AplicandoBordas_V01()
'
' AplicandoBordas_V01 Macro
'
'
Range("A1:D10").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
End Sub

Não sei vocês, mas o código me parece muito grande para realizar algo tão simples quanto aplicar uma formatação.
Para tentarmos reduzir o código, é importante entendermos como as bordas de células se apresentam na estrutura de objetos do VBA.
Dentre as propriedades do objeto Range, existe uma coleção (Classe) denominada Borders.
Através de alterações das propriedades dos elementos desta coleção é que podemos aplicar cores, espessura e estilo de linhas às bordas de um intervalo utilizando VBA.
Os elementos (itens) da coleção Borders e os seus respectivos valores numéricos são:

xlDiagonalDown 5
xlDiagonalUp 6
xlEdgeLeft 7
xlEdgeTop 8
xlEdgeBottom 9
xlEdgeRight 10
xlInsideVertical 11
xlInsideHorizontal 12

Desta forma para exibirmos ou ocultarmos bordas, devemos acessar os elementos desta coleção e aplicarmos as mudanças necessárias às suas propriedades.
Normalmente precisamos modificar as seguintes propriedades:
Estilo da linha (LineStyle)
Cor da linha (ColorIndex)
Espessura da linha (Weight)

Assim como a coleção Borders, a propriedade LineStyle pode apresentar uma série de valores definidos pelas constantes a seguir. Ao lado de cada uma está a descrição do tipo de linha que define.

Nome Descrição
xlContinuous Linha contínua
xlDash Linha tracejada
xlDashDot Traços e pontos alternados
xlDashDotDot Traço seguido por dois pontos
xlDot Linha pontilhada
xlDouble Linha dupla
xlLineStyleNone Sem linha
xlSlantDashDot Traços inclinados

Para uma análise detalhada sobre ColorIndex visite o post: http://wp.me/p1uYv4-gC

A espessura (Weight) pode assumir os valores a seguir:

Nome Descrição
xlHairline Fio (a borda mais fina)
xlThin Fina
xlMedium Média
xlThick Grossa

Após compreendermos estes detalhes, vamos pensar em como otimizar o código:
1. É necessário informar o intervalo a ser formatado;
2. É necessário percorrer uma série de valores correspondentes à coleção das bordas deste intervalo;
3. Não queremos que apareçam as bordas diagonais;
4. As bordas devem ser contínuas, na cor preta e de espessura fina.

Atendendo aos requisitos acima, chegamos à segunda versão do código:

Sub AplicandoBordas_V02()
'Define o intervalo cujas bordas serão formatadas
Set rg = ActiveSheet.[A1:D10]

'Define o loop para percorrer os item da coleção Borders
For k = 5 To 12
    
    'Só serão formatados os itens de valor maior que 6
    'excluindo desta forma xlDiagonalDown (5) e
    'xlDiagonalUp (6)
    
    If k > 6 Then
        With rg.Borders.Item(k)
        
        'Define o estilo de linha
        .LineStyle = xlContinuos
        
        'Define a cor da linha
        .ColorIndex = 0
        
        'Define a espessura da linha
        .Weight = xlThin
        End With
    End If
Next k

End Sub

É possível também utilizar um vetor que contém os valores correspondentes às de bordas que serão coloridas:

Sub AplicandoBordas_V03()
'Define o intervalo cujas bordas serão formatadas
Set rg = ActiveSheet.[A1:D10]

'Vetor que contém os valores correspondentes às bordas a serem formatadas
'Pode ser construído utilizando-se os valores numéricos das constantes:
'Bordas = Array(7, 8, 9, 10, 11, 12)

Bordas = Array(xlEdgeLeft, xlEdgeTop, xlEdgeBottom, xlEdgeRight, xlInsideVertical, _
xlInsideHorizontal)

'Define o loop para percorrer os item da coleção Borders
For k = LBound(Bordas) To UBound(Bordas)
    
        With rg.Borders.Item(Bordas(k))
        
        'Define o estilo de linha
        .LineStyle = xlContinuos
        
        'Define a cor da linha
        .ColorIndex = 0
        
        'Define a espessura da linha
        .Weight = xlThin
        End With
Next k

End Sub

Comentários:
Observem que agora fica bem mais fácil modificar qualquer parâmetro (intervalo, cor, espessura, etc), bastando modificar uma única linha de código.
Deixo para vocês o desafio de alterar a macro para que sejam formatas apenas as bordas que contornam o intervalo, na cor vermelha e com espessura grossa.

Abraços!

Anúncios

In Excel We Trust

Marcado com: , , , , ,
Publicado em Nível: Avançado
Um comentário em “0159-Adicionando bordas a um intervalo através de Macro
  1. rao* disse:

    Texto muito útil, respondeu minhas dúvidas! Obrigado!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: