No es más que un conjunto de celdas que representan las semanas de nuestra vida.
En él he resaltado, la semana actual (resaltada en azul), la de nuestra jubilación en España (con 67 años resaltada en rosa) y la de nuestra muerte estimada (resaltada en rojo).
Si alguna vez os habéis preguntado que haríais si supieseis cuanto tiempo os queda de vida, solo tenéis que elegir vuestro país, vuestro sexo y poner la fecha de nacimiento (Ninguno de estos datos se almacena).
Como veis en mi caso aún me quedan algunas semanas de trabajo por delante.
Aunque es posible evaluar si una condición es verdadera con un bucle IF y con otro bucle IF evaluar si es falsa, este es un proceso poco práctico.
En todos los lenguajes de programación existe la estructura IF ELSE.
Se trata de un condicional IF, que en su parte ELSE incluye las instrucciones que se ejecutarán si no se cumple la condición. De esta forma es posible definir el funcionamiento del programa tanto si se cumple como si no se cumple la condición.
El código del ejemplo de hoy es este:
Option Explicit
Sub condicional()
'Declaramos una variable numerica
Dim numeroSecreto As Integer
Dim respuesta As Integer
'asignamos un valor por error a una variable con otro nombre
numeroSecreto = 4
respuesta = InputBox("dime un numero")
If numeroSecreto = respuesta Then
'mostramos mensaje
MsgBox ("Has acertado")
Else
'mostramos mensaje
MsgBox ("No has acertado")
End If
End Sub
Partimos del código del ejemplo que mostrábamos el último día.
En este ejemplo se va el vamos si hay número era igual a otro almacenar una variable y eso quedamos en instrucción.
Y a continuación en otro condicional evaluamos la condición contraria esto es si el valor almacenado era distinto al indicado.
El usar dos condiciones por separado, una y la inversa puede provocar que al crear la condición inversa nos equivoquemos y dejemos alguna posibilidad sin tener en cuenta.
Editar este inconveniente todos los lenguajes de programación e incluyendo un condicional if else if.
En la parte b en valoremos aquellas instrucciones que deben ejecutarse si se cumple la condición y en la parte él se las que deben ejecutarse si no se cumple la condición.
Para transformar el código anterior, lo único que tenemos que hacer es eliminar el ENF IF del primer bucle y la condición del segundo y sustituirlo por la instrucción ELSE.
El código queda como se muestra a continuación.
Debemos tener en cuenta que dentro de cualquier bloque de instrucciones es posible incluir cualquier instrucción.
Con la instrucción If then en VBA podremos decidir si ejecutar o no una instrucción.
Esto nos permite pasar de ejecutar linealmente cada línea de código a poder saltarnos algunas dependiendo de si se cumple la condición evaluada o no.
Este es el código del ejemplo de hoy.
a
a
Option Explicit
Sub condicional()
'Declaramos una variable numerica
Dim numeroSecreto As Integer
Dim respuesta As Integer
'asignamos un valor por error a una variable con otro nombre
numeroSecreto = 4
respuesta = InputBox("dime un numero")
If numeroSecreto = respuesta Then
'mostramos mensaje
MsgBox ("Has acertado")
End If
If numeroSecreto <> respuesta Then
'mostramos mensaje
MsgBox ("No has acertado")
End If
End Sub
Solicitamos un número al usuario e introduce un número incorrecto.
Tras la primera comparación, saltamos el primer mensaje.
Y procedemos a comprobar si el mensaje es distinto del valor de la variable.
If numeroSecreto <> respuesta Then
Como se cumple la condición mostramos el mensaje.
Repetimos la ejecución, pero en este caso el valor es igual al de la variable.
La primera comprobación es correcta.
If numeroSecreto = respuesta Then
Se muestra el primer mensaje.
Usando condicionales y bucles conseguiremos que nuestras macros puedan parecer tener algo de inteligencia, y podremos automatizar gran cantidad de tareas.
Uno de los peores errores que se pueden producir al usar la declaración implícita de variables es que el entorno de programación defina un tipo de variable distinta de la que el programador piensa que se está usando.
En el ejemplo de hoy se crea una variable de tipo texto cuando se esperaba la creación de una de tipo entero.
Al no obligar a la declaración específica de variables la variabilidad se crea en un momento de que el entorno de programación la detecta y que será sin embargo en este caso como le hemos asignado una cadena de texto la maniobra se crea como si fuese texto.
Esto que en principio no es un problema si tenemos claro que queremos que se valor según texto se puede convertir a un grave problema si creíamos que este valor iba a ser un número.
Imaginemos que la variable se crea cuando recogemos un dato del usuario y a este le hemos preguntado su edad sin usuario en lugar de escribir la con números lo hace con texto habremos general una variable de tipo texto.
Si por el contrario definimos específicamente la variable indicando el tipo de dato que queremos que contenga al crearla, sí amor asignarle otro tipo de dato el entorno de formación mostrará un error.
Este caso se debe aquella variables de tipo entera y hemos intentado indicar un valor de tipo texto.
Para quitarnos los olvidos a la hora de declarar las variables o que se declaren variables debido a errores ortográficos lo mejor es usar la directiva Option Explicit, en todas nuestras macros.
De esta forma siempre estaremos obrigados a definir el tipo de las variables.
En los lenguajes de programación existen dos formas de declarar variables.
La declaración explícita exige que sea el programador el que defina el nombre de la variable y el tipo de dato que puede almacenar.
El entorno de programación en caso de detectar el intento de usar una variable no definida generará un error.
Por otra parte existen lenguajes que permiten la declaración implícita de variables.
Esto es cuando el entorno de programación detecta el primer uso de una variable, comprueba qué valor se le ha asignado y crea la variable del tipo correspondiente.
VBA permite los dos modos de funcionamiento.
En VBA existe la instrucción Option Explicit para exigir la declaración explícita de variables.
En caso contrario visual Basic for Applications creará las variables a medida que las vaya encontrando.
Esto puede generar errores debido a fallos tipograficos como el que os mostramos en el ejemplo de hoy.
Siempre es recomendable utilizar la declaración explícita.
Esto nos dará un control total sobre las variables que usamos y el tipo de datos que almacenan.
El código del ejemplo es el siguiente:
Sub declaracionExplicitaVariables()
'Declaramos una variable numerica
Dim edad As Integer
'asignamos un valor por error a una variable con otro nombre
edade = 28
'mostramos el valor de la variable declarada
MsgBox (edad)
End Sub
Declaramos la variable edad
Asignamos el valor 28 a la variable
Mostramos el valor de la variable en pantalla
Ejecutamos la macro
Pero el valor mostrado no es el esperado.
Se muestra 0 cuando debería mostrarse 28.
Exigimos la declaración explícita de variables,
mediante la instrucción Option Explicit.
Y ejecutamos de nuevo la macro.
Ahora se muestra un error de compilación.
No se ha definido la variable.
Parece que se ha cometido un error tipográfico
al escribir el nombre de la variable edad.
Corregimos el error tipográfico.
Mediante copia y pega.
Y volvemos a ejecutar.
Ahora el resultado si es el esperado.
Sin la instrucción Option Explicit
VBA utiliza la definición implícita de variables, creando las variables que no han sido definidas, la primera vez que son usadas.
En VBA para Microsoft Excel también podemos referirnos a las celdas con el método Range y el nombre de celda que le hayamos asignado en Excel.
Es útil utilizar los nombres de celdas en lugar de las referencias, para referirse a ellas. Especialmente si en la hoja de cálculo es posible que se añadan o eliminen filas, columnas o celdas.
Este es el código que usaremos en el ejemplo de hoy:
Sub escribirEnCeldaConNombre()
'Escribimos en la celda amarillla
'que originalmente esta en B2
Range("B2").Value = "Celda Amarilla"
'Escribimos en la celda verde
'que originalmente esta en B4
'refiriendonos a ella por el nombre asignado
Range("celdaVerde").Value = "Celda Verde"
End Sub
Insertamos una fila y una columna desplazando las celdas resltadas en color de sus ubicaciones originales.
Y volvemos a ejecutar la macro.
Como resultado el código de la primera línea ya no hace referencia a la celda amarilla mientras que el de la segunda si que haciendo referencia a la celda verde.
En la primera instrucción haremos referencia a la celda mediante la combinación de la letra de la columna y el número de la fila.
Haremos lo mismo en la primera ejecución para la segunda celda.
Comenzamos pintando la celda B2 de amarillo y la celda B4 de verde para tener una referencia visual sobre ellas.
La primera ejecución el código en el cual usamos las referencias de celda para referirnos a ellas vemos que efectivamente podemos escribir los textos correspondientes en cada una de las celdas.
Para la segunda ejecución de la macro haremos una pequeña modificación en la segunda línea del código.
En la segunda instrucción usaremos el nombre que le hemos asignado a la celda.
Asignamos un nombre a la celda B4, que tenemos pintada de color verde.
La nueva ejecución produce el mismo resultado que la anterior.
Demuestra que en VBA es posible referirse a las celdas con nombre mediante su propio nombre en vez de hacerlo con la referencia.
Insertamos una fila y una columna desplazando las celdas resltadas en color de sus ubicaciones originales.
Y volvemos a ejecutar la macro.
Como resultado el código de la primera línea ya no hace referencia a la celda amarilla mientras que el de la segunda si que haciendo referencia a la celda verde.
Esta forma de referirnos a las cerdas en v va nos va a permitir mantener la referencia a la cerda a pesar de insertar o eliminar filas o columnas.
Es muy útil para usarlo cuando no está definido totalmente el formato de la hoja en la que vamos a trabajar.