Nos queda por comentar una serie de estructuras de control muy parecidas entre ellas, por lo que lo haremos de foma conjunta. Muy pronto comprenderéis el motivo. Las estructuras son:
While – Wend
Do – While – Loop
Do – Until – Loop
Todas ellas son estructuras pensadas para realizar iteraciones hasta que se cumpla una condición; esa es su principal característica, la condición será cualquiera:
- encontrar una celda vacia (IsEmpty(ActiveCell)
- que se cumpla una condición (ActiveCell.value = «ENTORNO»)
- o cualquier otra
Los bucles while, correran mientras se cumplan la condicion, mientras que los until lo haran hasta que se cumpla la condición.
Con esta nuevas herramientas, vamos a ver como conseguiríamos encontrar un dato dentro de una hoja; aquí está la macro:
Dim x As String Dim found As Boolean Range("A2").Select ' indica la primera linea x = "test" 'indica la variable a buscar found = False 'inicializa la respuesta a false ' buscara hasta que se encuentre una celda en blanco Do Until IsEmpty(ActiveCell) Or found ' Comprueba si la celda contiene el valor buscado If ActiveCell.Value = x Then found = True Else 'si no encontrado, avanza celda y continua ActiveCell.Offset(1, 0).Select End If Loop ' Check for found. If found Then MsgBox "El valor se encuentra en " & ActiveCell.Address Else MsgBox "El valor no existe" End If
Como podéis ver, el bucle se inicia con la instrucción
Do Until IsEmpty(ActiveCell) Or found
o sea que realizará todas las instrucciones que hay hasta el loop mientras no se cumpla una de las dos condiciones que le hemos puesto.
Cuando el bucle termina, a continuación de la instrucción Loop, hacemos una comparación para averiguar si hemos salido porque hemos encontrado el texto, o porque hemos llegado al final de la lista
Esta pequeña macro, la podemos mejorar, y hacer que nos sirva para utilizarla en más sitios; para ello, empezaremos por hablar de lo que es una función. Hasta ahora, para escribir una macro, hemos estado utilizando la palabra Sub, que corresponde a Subrutina. Una subrutina,puede ser llamada desde cualquier sitio, pero no puede devolver parámetros a la orden que la llama, por el contrario, una función puede devolver un valor a quien la utiliza, además, en las macros no hemos estado utilizando parámetros, pero para ésta función, los necesitamos. Los parámetros son datos que se pasan a la función en la instrucción que los llama, vamos a ver como queda nuestra subrutina convertida en función.
Function buscar(x As String) As Boolean Dim found As Boolean found = False 'inicializa la respuesta a false ' buscara hasta que se encuentre una celda en blanco Do Until IsEmpty(ActiveCell) Or found ' Comprueba si la celda contiene el valor buscado If ActiveCell.Value = x Then found = True Else 'si no encontrado, avanza celda y continua ActiveCell.Offset(1, 0).Select End If Loop buscar = found End Function
Veamos las diferencias:
En la primera linea escribimos
Function buscar(x As String) As Boolean
Declaramos una función en ves de una Subrutina, que se llama buscar, y que espera un parámetro de tipo string que dentro de la función tendrá como nombre x. Por ultimo, le indicamos que devolverá un valor Booleano (Verdadero/Falso)
Retiramos de dentro de la función las linea
Dim x As String
porque la definición la estamos haciendo al definir el parámetro buscar(x As String).
También retiramos las lineas que nos seleccionaban el área de trabajo, y el valor de x; la primera, porque esperamos que la selección la hagan fuera, y la segunda, porque el valor de x nos lo pasaran por parámetro.
Por último, como nuestra función debe retornar Verdadero o Falso, retiramos las lineas que generan los mensajes, y nos limitamos a igualar el nombre de la función a la variable que contiene el resultado de la búsqueda:
buscar = found
Esto hará que la función devuelva el resultado encontrado.
Vamos a ver ahora como utilizaríamos esta función:
Sub trabajo() Range("A1:A20").Select If buscar("test") Then MsgBox "El valor se encuentra en " & ActiveCell.Address Else MsgBox "El valor no existe" End If End Sub
Esta vez hemos definido una macro (trabajo) que lo que hace es seleccionar un rango, y llamar a la función buscar con la string a buscar (test).
La llamada la hace dentro de la condición de un if porque la función devuelve un valor booleano y el if lo utilizará para lanzar el mensaje de verdadero o falso.
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.