Problemas con el border

Hola fejoal, una vez más, fernando preguntando :), te cuento: resulta que quiero darle formato a un informe que creo a través de una macro. Para esto, cree una función para poder darle los bordes que necesito y la llamo con 4 variables de esta manera:
ActiveSheet.Range("B10:H10").Select
Set rango = ActiveSheet.Range("B10:H10")
tipox = xlMedium
bandera_1 = False
bandera_2 = True
Call orillas(rango, CStr(tipox), CBool(bandera_2), CBool(bandera_1))
de la funcion orillas, te envio solo una parte para que no sea muy largo:
Sub orillas(seleccion As Variant, tipox As String, bandera_2 As Boolean, bandera_1 As Boolean)
seleccion.Select
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = tipox
.ColorIndex = xlAutomatic
End With
If bandera_1 Then
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlNone
.Weight = tipox
.ColorIndex = xlAutomatic
End With
End If
El resto es similar para los demás lados (edgerigth, edgebottom, etc).
Aclaraciones: 1-rango es variant porque como range NO me funciono.. Y no supe porque, pero así se me arreglo.
2-Las banderas son para que cuando el rango seleccionado sea solo 1 linea no me ponga lineas horizontales entremedio (porque se cae)
3- Cuando pasa la variable tipox, me la pasa como número(no se porque pero me funciono al menos 1 vez sin problemas)
El problema es que ahora cuando corro la macro completa cuando llega al .weight=tipox se cae y me dice:
Imposible asignar la propiedad weight de la clase border.
¿Por qué?
Atentamente. Un frustrado fernando.

1 respuesta

Respuesta
1
El problema está en que fuerzas (dos veces) a que un atributo numérico sea de tipo carácter o texto.
XlMedium es lo mismo que colocar -4138, pero con Cstr() y luego al definir variables en sub Orillas() lo conviertes en texto y VBA no lo interpreta.
Por lo tanto tus macros funcionan si están así:
Sub oguz()
ActiveSheet.Range("B10:H10").Select
Set rango = ActiveSheet.Range("B10:H10")
tipox = xlMedium
bandera_1 = False
bandera_2 = True
Call orillas(rango, tipox, CBool(bandera_2), CBool(bandera_1))
End Sub
Sub orillas(seleccion As Variant, tipox, bandera_2 As Boolean, bandera_1 As Boolean)
seleccion.Select
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = tipox
.ColorIndex = xlAutomatic
End With
If bandera_1 Then
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlNone
.Weight = tipox
.ColorIndex = xlAutomatic
End With
End If
End Sub
Espero que te sea útil.
Un abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas