Tutoriales de VBASIC para Excel. Aprender a localizar recursos de programación de manera local. Objetos del interfaz, sus propiedades y valores.
Tiempo de lectura: 6 minutos
Nivel de Excel: Iniciado
Nivel de programación: Iniciado
Es un trabajo que me parece muy necesario. Enseñar a utilizar las herramientas de programación. Quisiera sumarme a la iniciativa y mostraros otra manera local de localizar recursos de programación en VBASIC que tenemos a nuestra disposición sin ni siquiera tener conexión a la red, es decir sin consumir recursos de ancho de banda para realizar las consultas más básicas que necesitemos. Es un tutorial de un solo post, con muchos tutoriales referentes a formato y funciones básicas, todos juntos. De esta manera usamos la red solo para consultas más avanzadas. Ahora veréis como.
En Microsoft los programas de la suite Office integran el concepto de Macro. Una acción programable que consiste en una o varias acciones juntas que podemos lanzar pulsando un botón o cuando ocurren determinadas condiciones.
Modificar propiedades
Si por ejemplo tenemos una duda de como se cambia de color una celda para hacerlo con código, pulsamos en el menú Ver, y en Macro pulsamos y volvemos a pulsar en Grabar Macro.
Nos ofrece un nombre de Macro tipo "Macro1" que irá aumentando de manera correlativa según grabamos Macros. Podemos decirle que el nombre de la Macro sea cambiar_color_celda y pulsamos en aceptar.
Desde este momento todas las acciones que realicemos en la aplicación se van a convertir en código que podemos ver , copiar y adaptar a nuestra aplicación. Desde un click, hasta una pulsación de tecla.
Por ejemplo, cambiar la celda de color.
Pulsamos en la celda que queremos modificar.
Pulsamos en Inicio, pulsamos sobre el cubo de color y seleccionamos el color que queramos.
Imagen 2
Pulsamos en Menú Ver-Macros-Detener Grabación.
Ahora pulsamos en Menú Ver-Macros. Pulsamos nuevamente en Ver Macros y tenemos el menú con las macros disponibles. Seleccionamos la Macro que hemos creado y pulsamos en Modificar.
Se abre la ventana de código VBASIC y ahí vemos como se programa la acción que andábamos buscando.
Ejemplo
Sub cambiar_color_celda()
'
' cambiar_color_celda Macro
'
'
Range("L7").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
De este código podemos deducir que nuestro objeto "celda" tiene la propiedad:
Range("L7").Interior.Color=65535.
Ahora podemos adaptar el código a nuestra hoja de trabajo para que se ejecute incluso si la celda ni la hoja están activas. Un detalle de codificar con código de Macros grabadas, es que todas las acciones las hace relativas a las selecciones que vamos haciendo.
Además las Macros Grabadas no definen variables, ni elementos avanzados como tablas, bucles while, funciones if/else, bucles for. Principalmente porque el Grabador de Macros no sabe lo que el usuario va a hacer en el siguiente instante, por lo que se trata de una cadena de eventos codificados uno detrás de otro en VBASIC.
Por lo tanto al ejecutar la Macro Grabada, las pantallas van cambiando y los objetos aparentemente se van clicando solos. Pues bien, con una línea de código resolvemos el problema y el interfaz se queda bastante quieto.
Sub cambio_color_celda()
' esta función cambia el color de una celda
Worksheets("Hoja1").Range("L7").Interior.Color = 65535
End Sub
Si las acciones se llevan a cabo en otra Hoja2, ejecutando desde un botón que hay en la Hoja1:
Sub cambio_color_celda()
' esta función cambia el color de una celda
Worksheets("Hoja2").Range("L7").Interior.Color = 65535
End Sub
Nota:
Generalmente las bases de datos no se ven. Los datos están en alguna parte guardados y no tienen por qué verse. Excel los muestra y para ello emplea mucha capacidad gráfica. Podemos trabajar sobre hojas diferentes a la que contiene el interfaz, ahorrando la representación de los cambios.
Excel no es una base de datos, sino una hoja de cálculo. Puede ser una base de información y almacenar datos como una base de datos, pero no tiene las herramientas de estructura que aplican en las bases de datos.
Por cierto, Aunque diga Worksheets en plural, si en otro libro abierto hay también una "Hoja1", no le aplica este código. Solamente aplica a la hoja con la que estamos trabajando y las hojas del libro. Si estoy trabajando en una Hoja1 podemos hacer cambios en una Hoja2 . Hay opciones para modificar celdas de otros libros.
Y podemos hacer tareas más complejas
Sub cambio_color_rango()
'esta función cambia el color de un rango de celdas
Dim celda As String
Dim a As Integer
For a = 1 To 20
celda = "L" & a
Worksheets("Hoja1").Range(celda).Interior.Color = 65535
Next
End Sub
La sub cambio_color_rango equivale a esta instrucción única
Worksheets("Hoja1").Range("L1:L20").Interior.Color = 65535
En Excel la propiedad Range hace referencia a un rango de celdas, que puede ser una o varias. Eso lo veréis si seleccionáis varias celdas juntas.
Modificar valor
Si lo que queremos es cambiar el valor de una celda, grabamos otra Macro, pinchamos en la celda J8, cambiamos manualmente el valor de la celda, escribiendo 2/1/2020 y leemos.
Sub cambia_valor_celda()
'
' cambia_valor_celda Macro
'
'
Range("J8").Select
ActiveCell.FormulaR1C1 = "2/1/2020"
Range("J9").Select
End Sub
De nuevo, eliminamos las selecciones, para que el interfaz no se mueva tanto y simplificamos la instrucción.
Worksheets("Hoja1").Range("J8").Value = "2/1/2020"
Si lo que queremos es asignar el valor de otra celda , o conjunto de celdas con una fórmula, creamos otra macro, y adaptamos el resultado a nuestro código. Hemos escrito la ecuación =A6*A3/A1 en la celda B6
Las letras R y C significan Row (fila) y Column (columna). Las fórmulas se referencian de manera relativa. Entonces RC[-1] es la celda que esta una fila y una columna antes que la nuestra. R[-3]C[-1] es la celda que está 3 filas antes y una columna antes que la nuestra.
Sub Macro20()
'macro para asignar fórmulas a celdas
Dim celda As String
Dim a As Integer
For a = 10 To 20
celda = "A" & a
Worksheets("Hoja1").Range(celda).Value = "=RC[-1]*R[-3]C[-1]/R[-5]C[-1]"
DoEvents
Next
End Sub
La celda debe tener formato general. Si escribimos una cadena "=A1*A1" en una celda con formato de texto, no obtenemos el cuadrado de A1 sino la cadena "=A1*A1"
Según hagáis Macros iréis aprendiendo el código. La programación es mucho más que saber los nombres y las propiedades de los objetos. Pero creo que si comenzamos sabiendo localmente como referenciarlos dentro del interfaz, ya es un paso de gigante. Y algunos Megabits/s de ahorro en las redes.
Estadísticas de eficiencia del post
Color
Clasificación
A+++
A++
A+
A
B
C
D
E
F
G
Eficiencia del post en términos de ancho de banda (texto enviado/código html empleado)
6,2%
Saber más sobre la eficiencia web



Comentarios
Publicar un comentario