Aprende VBA para Access

Ejemplo complejo de bucles: calcular la primitiva en VBA

¡Prueba gratis durante 10 días

nuestros 1244 cursos !

Prueba gratis Mostrar modalidades de suscripción
Vamos a ver un ejemplo complejo de trabajar con bucles. Iremos haciendo paso a paso un formulario para calcular de una manera aleatoria los seis números de la primitiva, teniendo en cuenta que no nos sirven repetidos y que queremos que los saque ordenados.

Transcripción

Vamos a ver un ejemplo complejo y completo de cómo trabajar con matrices. Nosotros lo que vamos a querer hacer es que nos rellene la primitiva. O sea, que nos calcule 6 números al azar entre el 1 y el 49 y el primer paso será solamente eso, que nos lo calcule. Después también tendremos que ir viendo que no queremos que me salgan repetidos Y también que me salgan ordenados. Por eso, he ido poniendo aquí los tres botones para ir haciéndolo por partes. Y nos vamos al diseño. Al primer botón lo he llamado "primi1" para ir diferenciándolos. Lo primero que voy a hacer, entonces, en este caso, es para ver la primitiva 1. Le he dicho que sólo quiero ver este procedimiento para no liarnos, para centrarnos en lo que tenemos que ver. Entonces, me he declarado una variable que he llamado "conta" y me he declarado una matriz que he llamado "primitiva". Le he dicho que tiene 6 posiciones, como empieza por 0 le tengo que decir 5. O sea que va hasta la posición 5. Le tengo que decir "Randomize" para que inicialice el generador de números aleatorios. Le digo, desde que "conta" es igual a 0 hasta que llegue a 5, o sea, se recorrerán todas las posiciones que tiene esta matriz, le digo que la posición "conta", o sea, la posición 0, después 1, después 2. ¿Qué quiero que sea igual? A un número al azar. Eso lo hago con la función "Rnd" pero me calcula números al azar ente 0 y 1. Por eso le tengo que multiplicar por 48 y después sumarle 1. ¿Por qué no lo multiplico directamente por 49? Muy sencillo, porque si yo tengo un número al azar entre 0 y 1 puede ser 0,00... O sea, un número muy pequeño. Aunque lo multiplique por 48, seguirá siendo cero coma algo y cuando le quite la parte decimal, se queda como cero. Y yo no quiero eso, yo quiero que sea entre 0 y 49. Por eso lo tengo que multiplicar siempre por uno menos del tope y después sumarle 1. Una vez que tengo rellena la matriz, lo que hago es que voy volcando los valores de la matriz en el formulario. Para ello, el campo "num1", ¿a qué es igual? A la posición de la matriz 0. El "num2" es igual a la posición 1 y así sucesivamente. Si probamos esto. Cuando pinchamos en el primer botón, vemos que ya no salen los números entre el 1 y el 49. Nos pueden salir repetidos, como por ejemplo aquí nos salen dos 5 y nos salen desordenados. Entonces, lo siguiente que vamos a hacer, voy a ir al paso 2. Entonces ahora, aquí ya en el paso 2, lo vamos a complicar un poquito más. Ahora ya me he declarado más variables, "i", "inte", "conta" y la primitiva. Esto ahora mismo lo voy a borrar. Le digo "conta = 0", "inte = 0" y "i = 0". Le digo que mientras "i" sea igual a 0, quiero que "conta = 0", aunque ya se lo había dicho antes. Ahora veremos porqué se lo vuelvo a decir. Y "inte = 1" Porque yo lo que quiero es que entre la primera vez pero en principio solo voy a querer que lo haga una vez, por eso, nada más entrar le cambio y "inte", que para mí es la abreviatura de interruptor, le digo que sea igual a 1. Esta parte es exactamente igual, lo mismo que antes. O sea, lo que va haciendo es irlo rellenando. Y ahora le digo, otra vez, que "conta" es igual a 0, ¿por qué? Porque ahora lo que voy a hacer va a ser recorrer la matriz pero con dos variables distintas. La voy a recorrer, tanto con al variable "i" como con la variable "conta" Entonces, con la variable "conta", me voy a situar en la primera posición. Mientras que con la variable "i", me voy a situar en la segunda. Y lo que voy a ir haciendo es irlo comparándolo. Para verlo mejor, vamos a ver un momento en el Excel cómo lo haríamos. Entonces, abrimos el Excel y aquí nosotros tenemos 6 posiciones. Para visualizar mejor, las coloco aquí. Y entonces, lo que voy a hacer es situar "conta" aquí y en esta segunda, lo que hago es que sitúo "i". Y lo que voy haciendo es, voy a ir moviendo esta "i" a la siguiente celda y comparo con lo que haya en "conta". En el momento que sean iguales, "inte" es otra vez 0, con lo cual vuelve a rellenar todos los datos. Entonces se va moviendo, va moviendo "i", lo va comparando, lo va moviendo a la siguiente. Una vez que llega aquí, "conta" ya no está aquí, "conta" ahora se mueve aquí. Y la "i" vuelve a empezar, ya es, si nos fijamos en el bucle, la posición de "conta +1" Empieza aquí y vuelve a hacer lo mismo. Se va moviendo hacia acá y va comparando. Si nos volvemos a nuestro código, lo vemos cómo, con el bucle de fuera, vamos moviendo "conta" y dentro de ese bucle de fuera, se va moviendo con la "i", va a ir controlando si es igual. Si en algún momento es igual como vemos, si "primitiva(conta) = i", "inte = 0". Con lo cual, lo que hace es que vuelve aquí, al principio del bucle "Do While" y volvería a rellenar los datos hasta que no haya ningún valor repetido. En el momento que no lo haya, ya hacemos como antes, volcamos los valores en el formulario. Vamos a comprobarlo. Entonces ahora ya, en el paso 2, ya vemos que no me aparecen repetidos, me aparecen todavía desordenados pero ya no me aparecen repetidos. Ahora, el último que tenemos. Vamos a ir al paso 3, al de "primitiva" Entonces, le decimos otra vez que "Al hacer clic" y tenemos una complicación más, cuando salimos del bucle, en el cual los hemos rellenado, como vemos, todo esto es igual, tenemos ahora otra parte, en el cual, yo vuelvo a comparar las dos opciones que tenemos, o sea, volvemos a comparar tanto con la variable "conta" como con la "i" y lo que hago es, para ordenar, le comparo que si una es mayor que otra. Para ello, siempre voy a necesitar una tercera posición, para eso tengo la variable "aux" que me he declarado, en este caso. Entonces, aquí le digo que si son iguales quiero guardar la posición "conta" en "aux", la posición "i" en la posición "conta" y "aux" en la variable "i". O sea, al fin y al cabo, yo lo que quiero es cambiar un valor por otro pero si lo hiciera directamente, se eliminaría uno. Por eso necesito un tercer valor que es "aux", donde guardar de una manera temporal uno de los valores para después poder cambiarlo por el otro. Ahora ya así, si nos cambiamos de vista, aquí en la "primitiva" ya me lo rellena todo, me lo pone perfectamente en orden y sin repetir. Quiero que veáis que lo hemos hecho paso a paso entre otras cosas, para que veáis que no se puede hacer todo desde un principio, hay que ir solucionando problemas poco a poco hasta poder llegar al final. Este ejemplo es un poquito complejo pero a la vez, yo creo, es muy interesante para entender cómo funcionan tanto los bucles como las matrices.

Aprende VBA para Access

Aprende las bases de la programación Visual Basic necesarias para aplicarla en Access y poder crear bases de datos más funcionales de las que el software te ofrece por defecto.

2:07 horas (34 Videos)
Actualmente no hay comentarios.
 

Este curso video2brain está disponible como descarga y para ser visualizado online. ¡Pero no hace falta que decidas entre las dos opciones! Al comprar el curso, disfrutarás de ambas posibilidades.

La descarga te permite ver las lecciones sin estar conectado/a a internet y supone una navegación fácil y ágil entre capítulo y capítulo. Si vas a trabajar en diferentes ordenadores o si no quieres descargarte el curso completo, entra en la web con tus datos de acceso y disfruta directamente de tus vídeos online. Te deseamos que disfrutes de este curso y te resulte de mucha utilidad.

Estamos a tu disposición si tienes cualquier tipo de duda o pregunta.