Otra inútil macro de excel… Realmente, su única misión es generarnos en la hoja un cuadrado cuyos lados se van haciendo mas pequeños en cada pasada, y las líneas que lo dibujan van cambiando de color de forma aleatoria. Pero, en un curso de macros, siempre tenemos la excusa de hacer algunas de estas «cosas», porque «asi se practica el lenguaje».

Esta es la imagen que obtendremos, más o menos, y además lo podemos hacer con muy poco esfuerzo; al final del artículo, tenéis la macro utilizada, y en las próximas líneas, intentaré explicar como funciona.
Las prímeras líneas, se dedican a definir las variables que vamos a utilizar, hasta que establecemos el tamaño del dibujo, eso lo hacemos cargando valores a las variables alto y ancho; esos valores, son el número de celdas iniciales (de ancho y de alto), osea que no os paseis intentando indicarle mas celdas de las que tiene excel de ancho y de alto, porque no se filtra nada , y dará error. También os digo que el proceso no está hecho para ir rápido, por lo que si dejais la hoja excel a la vista mientras que se ejecuta la macro, iréis viendo aparecer el dibujo.
Las siguientes líneas, se limitan a borrar cualquier cosa que haya en la hoja, a seleccionarla por completo, para cambiar la altura y anchura de las celdas, y, por último dejamos seleccionada una celda (la 1,1 aunque dá lo mismo la que sea), para desactivar la selección de la hoja entera que habíamos hecho.
Ahora ya estamos apunto para empezar a dibujar,
While alto > 0 And ancho > 0
offsetHor = 1
offsetVer = 0
colorCelda = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
linea ancho, offsetHor, offsetVer, colorCelda
ancho = ancho - 1
offsetHor = 0
offsetVer = 1
Quien hace realmente la labor de escribir en la celda es la rutina línea
Sub linea(numero, offsetHor, offsetVer, color)
For a = 1 To numero
ActiveCell.Interior.color = color
ActiveCell.Offset(offsetVer, offsetHor).Select
DoEvents
Next a
aunque lo hace sin saber absolutamente nada, recibe una celda activa, el número de celdas que ha de colorear, el color que ha de usar, y dos offsets, uno vertical y otro horizontal que aplica cada vez que colorea una celda.
Es la rutina externa que va controlando los colores, generándolos de forma aleatoria, indicando por medio de los offset la dirección en la que se dibujara la línea, y el ancho o alto de la línea, a la vez que les va restando uno, cada vez que dibuja una línea.
El bucle, y el dibujo, finaliza cuando el ancho o el alto alcance cero, ya que significa que ha llegado al centro del dibujo.
A continuación tenéis la macro. Espero que haya quedado un poco claro….
Sub cuadrados()
Dim alto As Integer
Dim ancho As Integer
Dim offsetHor As Integer
Dim offsetVer As Integer
Dim a As Integer
Dim colorCelda As Long
alto = 200
ancho = 200
ActiveSheet.Cells.ClearContents
ActiveSheet.Cells.ClearFormats
Cells.Select
Selection.ColumnWidth = 0.2
Selection.RowHeight = 2
Cells(1, 1).Select
While alto > 0 And ancho > 0
offsetHor = 1
offsetVer = 0
colorCelda = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
linea ancho, offsetHor, offsetVer, colorCelda
ancho = ancho - 1
offsetHor = 0
offsetVer = 1
colorCelda = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
linea alto, offsetHor, offsetVer, colorCelda
alto = alto - 1
offsetHor = -1
offsetVer = 0
colorCelda = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
linea ancho, offsetHor, offsetVer, colorCelda
ancho = ancho - 1
offsetHor = 0
offsetVer = -1
colorCelda = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
linea alto, offsetHor, offsetVer, colorCelda
alto = alto - 1
DoEvents
Wend
End Sub
Sub linea(numero, offsetHor, offsetVer, color)
For a = 1 To numero
ActiveCell.Interior.color = color
ActiveCell.Offset(offsetVer, offsetHor).Select
DoEvents
Next a
End Sub
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.
16 comentarios
Es interesante. Con ejemplos chorras, se aprende el lenguaje. Luego, se aplica al día a día.
Gracias,esa era la intención….
AYUDA
COMO PUEDO COLOCAR EL TEXTO DE UN CAMPO DE ACCESS CON TRAMAS. SOLO DEBE ESTAR SOMBREADO EL TEXTO NO TODO EL CAMPO
Si hablas de celdas de Excel, por lo que yo se, se cambia el fondo a nivel de celda, no de texto….
AYUDA
COMO PUEDO COLOCAR EL TEXTO DE UN CAMPO DE ACCESS CON TRAMAS. SOLO DEBE ESTAR SOMBREADO EL TEXTO NO TODO EL CAMPO