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

En internet hay  miles  páginas y  sitios web con ejemplos de código. Código en docenas de lenguajes. Java , Python,  SQL,  php , asp , Visual Basic , C, html.

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. 
Imagen 1

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

Entradas populares de este blog

Generador de señales en hoja de cálculo.

Copiar y pegar múltiples celdas en hoja de cálculo