Bordes con macro

Recurro a ustedes una vez mas. Tengo una simple macro que dibuja bordes negros en el exterior y grises en el interior ( un formato que uso muy habitualmente ) Funciona correctamente salvo en la ocasión en que solo tenga seleccionada una sola celda:

Sub Bordes()
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
On Error GoTo salto:
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 15
End With
salto:
On Error GoTo salir:
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 15
End With
salir:
End Sub

¿Será posible evitar este error?

1 Respuesta

Respuesta
1

Y cuál es el error, si tienes seleccionada una celda, te pone el borde exterior de negro, ¿qué es lo que necesitarías?
Saludos. DAM

Hola dAm y gracias por tu respuesta. Me olvidé de aclarar el error. Al tener solo una celda seleccionada sale un mensaje que dice: "Run-time error '1004': Unable to set the LineStyle property of the Border class". Es cierto que solo debo hacer un click en el botón de "end" de este msgbox para cerrarlo y que me quede el borde exterior en negro, pero la verdad es que es algo molesto y me interesaría saber como solucionarlo para ampliar mis conocimientos (que no son muchos en este tema).

Gracias nuevamente.

Si yo selecciono una sola celda, no me pone error.

¿Tiene algo de especial la celda cuando la seleccionas?

Si le presionas "Debug" al mensaje de error, ¿qué línea de VBa se pone de amarillo?

¿Qué versión de excel tienes?

Hola DAM, gracias por ocuparte. La línea señalada es (la que está en negrita):

Sub Bordes()
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
On Error GoTo salto:
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 15
End With
salto:
On Error GoTo salir:
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 15
End With
salir:
End Sub

Por eso le agregué el "on error". Es un formato que uso muy a menudo, motivo por el cual grabé la macro, y las celdas no tienen nada en particular. El error sale siempre inclusive con un libro en blanco.

La versión de Excel que estoy usando es la 2003.

Se me ocurre que quizás con una sentencia "si" lo podría solucionar. En la macro esto sería: "si" solo hay seleccionada una celda ( no se si es posible indicar esto ), llamaría a una macro para los bordes de una sola celda y "si no" llamaría a la otra.

Saludos.

Prueba esta:

Sub miBordes()
With Selection
    .Borders(xlEdgeLeft).LineStyle = xlContinuous
    .Borders(xlEdgeLeft).Weight = xlMedium
    .Borders(xlEdgeLeft).ColorIndex = xlAutomatic
    .Borders(xlEdgeTop).LineStyle = xlContinuous
    .Borders(xlEdgeTop).Weight = xlMedium
    .Borders(xlEdgeTop).ColorIndex = xlAutomatic
    .Borders(xlEdgeBottom).LineStyle = xlContinuous
    .Borders(xlEdgeBottom).Weight = xlMedium
    .Borders(xlEdgeBottom).ColorIndex = xlAutomatic
    .Borders(xlEdgeRight).LineStyle = xlContinuous
    .Borders(xlEdgeRight).Weight = xlMedium
    .Borders(xlEdgeRight).ColorIndex = xlAutomatic
End With
If Selection.Count > 1 Then
    With Selection
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).Weight = xlThin
        .Borders(xlInsideHorizontal).ColorIndex = 15
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideVertical).Weight = xlThin
        .Borders(xlInsideVertical).ColorIndex = 15
    End With
End If
End Sub

Saludos.DAM
Si es lo que necesitas.

DAM, muchas gracias por ocuparte y por tu ayuda. Tuve que hacerle algunas modificaciones porque seguía dando el error. Con lo que le agregué funciona perfectamente. Copio la macro final por si a algún otro le sirve:

Sub miBordes()
On Error GoTo abajo:
With Selection
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeLeft).Weight = xlMedium
.Borders(xlEdgeLeft).ColorIndex = xlAutomatic
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeTop).Weight = xlMedium
.Borders(xlEdgeTop).ColorIndex = xlAutomatic
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeBottom).ColorIndex = xlAutomatic
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeRight).Weight = xlMedium
.Borders(xlEdgeRight).ColorIndex = xlAutomatic
End With
abajo:
If Selection.Count > 1 Then
With Selection
On Error GoTo 1:
.Borders(xlInsideHorizontal).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).Weight = xlThin
.Borders(xlInsideHorizontal).ColorIndex = 15
1:
On Error GoTo salir:
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideVertical).ColorIndex = 15
End With
End If
salir:
End Sub

Un saludo para todos y muchas gracias nuevamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas