Você está na página 1de 8

0159-Adicionando bordas a

um intervalo atravs
de Macro
Publicado em 15 de maio de 2013 por adilsonsoledade 1 Comentrio

Praticamente todos ns iniciamos o contato com macros atravs de cdigos pr-existentes e da


utilizao do gravador de macros.
Quando lanamos mo deste ltimo recurso, o cdigo obtido , geralmente enorme e possui muitas
linhas que so suprfluas.
Vamos partir de um exemplo utilizando um cdigo criado atravs do gravador de macros e
transform-lo num cdigo mais limpo para otimizarmos a aplicao de bordas a um intervalo.
O cdigo 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

No sei vocs, mas o cdigo me parece muito grande para realizar algo to simples quanto aplicar
uma formatao.
Para tentarmos reduzir o cdigo, importante entendermos como as bordas de clulas se apresentam
na estrutura de objetos do VBA.
Dentre as propriedades do objeto Range, existe uma coleo (Classe) denominada Borders.
Atravs de alteraes das propriedades dos elementos desta coleo que podemos aplicar cores,
espessura e estilo de linhas s bordas de um intervalo utilizando VBA.
Os elementos (itens) da coleo Borders e os seus respectivos valores numricos so:

xlDiagonalDown

xlDiagonalUp

xlEdgeLeft

xlEdgeTop

xlEdgeBottom

xlEdgeRight

10

xlInsideVertical

11

xlInsideHorizontal

12

Desta forma para exibirmos ou ocultarmos bordas, devemos acessar os elementos desta coleo e
aplicarmos as mudanas necessrias s suas propriedades.
Normalmente precisamos modificar as seguintes propriedades:
Estilo da linha (LineStyle)
Cor da linha (ColorIndex)
Espessura da linha (Weight)
Assim como a coleo Borders, a propriedade LineStyle pode apresentar uma srie de valores
definidos pelas constantes a seguir. Ao lado de cada uma est a descrio do tipo de linha que define.

Nome

Descrio

xlContinuous

Linha contnua

xlDash

Linha tracejada

xlDashDot

Traos e pontos alternados

xlDashDotDot

Trao seguido por dois pontos

xlDot

Linha pontilhada

xlDouble

Linha dupla

xlLineStyleNone

Sem linha

xlSlantDashDot

Traos inclinados

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


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

Nome

Descrio

xlHairline

Fio (a borda mais fina)

xlThin

Fina

xlMedium

Mdia

xlThick

Grossa

Aps compreendermos estes detalhes, vamos pensar em como otimizar o cdigo:


1. necessrio informar o intervalo a ser formatado;
2. necessrio percorrer uma srie de valores correspondentes coleo das bordas deste intervalo;
3. No queremos que apaream as bordas diagonais;
4. As bordas devem ser contnuas, na cor preta e de espessura fina.
Atendendo aos requisitos acima, chegamos segunda verso do cdigo:

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

'Define o loop para percorrer os item da coleo Borders

For k = 5 To 12

'S sero 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

possvel tambm utilizar um vetor que contm os valores correspondentes s de bordas que sero
coloridas:

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

'Vetor que contm os valores correspondentes s bordas a serem


formatadas
'Pode ser construdo utilizando-se os valores numricos 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 coleo 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

Comentrios:
Observem que agora fica bem mais fcil modificar qualquer parmetro (intervalo, cor, espessura,
etc), bastando modificar uma nica linha de cdigo.
Deixo para vocs o desafio de alterar a macro para que sejam formatas apenas as bordas que
contornam o intervalo, na cor vermelha e com espessura grossa.
Abraos!

PARA MESCLAR CELULAS:


Range("E1:E5").Merge PARA MESCLAR AS CELULAR E1 ATE E5
Range("E1:E5").UnMerge PARA TIRAR MESCLA DE E1 ATE E5

Você também pode gostar