Bucle For-Next en Visual Basic 6 (vb6)
Bienvenidos a Ver Tutoriales.com, en esta ocasión voy a exponer el código de un bucle for next en visual basic 6 (vb6).
He recibido un par de correos diciendome en el post anterior que no expuse el código de visual basic 6 (vb6), es cierto, pasé por alto ese detalle suponiendo que no tendrían problema en adaptarlo, pero cierto es, que me equivoqué ya que no todos tenemos el mismo nivel, ni el mismo conocimiento. Y aquí estamos para ayudar, así que para que todos aprendamos…
Este breve artículo va dirigido a Roberto y Capuchón dos iniciados en Vb6 con muchas ganas de aprender y que me están siguiendo desde hace tiempo.
Bueno vamos al lio. Voy a exponer el código “base”:
For contador = inicio to fin [Step]
[exit for]
Next
Vamos a ver paso por paso que es cada elemento del bucle for:
– contador, es la variable de control, es donde se irá almacenando cada una de las vueltas del bucle,
– inicio, el valor inicial del bucle.
– fin, el valor donde ha de terminar
– step (opcional), el valor del sumatorio (puede ser negativo)
– exit for (opcional) para romper el flujo del bucle y salir directamente.
Con esto quedaría explicado el bucle tal y como hicimos en Flex. Aún así pondré un ejemplo con valores para dejarlo más claro:
For contador = 0 to 10 step 2
‘ hacemos cosas repitiendose
Next contador
En este caso utilizamos step por que vamos a ir de 2 en 2, si fuera de 1 en 1 no habría que ponerlo aunque no daría error al utilizarlo con 1. Cerramos con Next contador, que aunque tampoco hace falta poner el nombre de la variable de control del bucle, es aconsejable ponerla.
Espero que quede aclarada la duda. Tambien os pediría que si os surgen dudas con respecto al artículo que lo comenteis en vez de enviarme el correo, así nos ahorramos tiempo y tambien lo compartimos con todos.
Un saludo!
Comments
hola,soy nuevo en visual 6 no tengo muchos conosimientos en programacion pero lla llebo 2 meses seguidos intentando hacer un programa y me e estancado en algo que quisiera preguntar. para ver si me pueden ayudar
estoy haciendo mi propio reproductor de mp3 con buscador y lista de reproducion, no es nada nuevo pero lo importante es que lo estoy haciendo yo y eso me sube la moral.
por ahora solo quiero que me respondan aunque el saludo para poder saber si cuento con ustedes para darme una manito en mi programa
Hola Eddys!
Claro que sí, estamos para ayudar.
Dispara cuando quieras!
hola q tal soy estudiante de computacion e informatica de primer ciclo y necito saber mas sobre visual basic por favor necito todo el material relacionado con dicho programa por favor es urgente grasias
¿Algo en concreto? Visual Basic es amplísimo… si me dices sobre qué quieres programar quizás pueda orientarte.
Un saludo
Estimado, lamento tener que molestarte, pero nesecito solucionar cuanto antes este problema. Te ubico un poco.
Trabajo en VB6 y tengo un formulario con muchos txt en matriz. los cuales se marcan con una x o vacios. Al momento de actualizar (update) los datos la hace, pero con error, coloca a todos los campos de la tabla el mismo valor. Te dejo una muestra del codigo para que me deis una ayuda.
Private Sub ActualizaDetalle()
Dim a As Byte
For a = 0 To 59
cnn.Execute “UPDATE ORDENDETALLE set D = ‘” & TxtPD(a) & _
“‘, C = ‘” & TxtPC(a) & _
“‘, R = ‘” & TxtPR(a) & _
“‘, P = ‘” & TxtPP(a) & _
“‘ where NORDEN = ” & TxtNOrdenRep.Text & “”
Next a
End Sub
Desde ya muchas gracias.
Veamos, supongo que TxtPC(a) y las siguientes son las cajas, lo que no entiendo es para qué utilizas el index de cada caja de texto, es decir, si tienes un formulario con N cajas, todas las cajas deben de llevar el mismo nombre para que puedas acceder a ellas.
Ahora mismo con ese código pienso que tienes 4 cajas de texto, TxtPD, TxtPC, TxtPR y TxtPP, y ¿cada una de ellas tienen 60 elementos? si fuera así, tal y como lo tienes estarías guardando el último elemento de las cajas, ya que TxtNOrdenRep.text es invariable, por lo que estás haciendo 60 consultas “where NORDEN = ” TxtNOrdenRep.Text, así que siempre se cumplirá la misma condición para guardar las 60 y por tanto irá guardando una encima de la otra hasta llegar a la última.
Si me explicas mejor como lo tienes estructurado internamente y como quieres guardarlo te podré ayudar mejor.
Un saludo!
Antes que nada muy agradecido de que respondas y le pongas interes a mi problema. Te cuento, El sistema guarda 60 registros con el mismo numero de una Orden de Trabajo (NORDEN) y con 240 opciones divididas en 4 campos.
Estas opciones corresponden a partes de un automovil a ser reparado. Copio algunos registros desde la tabla real para ilustrar mejor la idea.
ID NORDEN DOMINIO ZONA PIEZA D C R P
122 2 GQN741 D D Paragolpe x x x
123 2 GQN741 D D Panel de frente
124 2 GQN741 D D Rejilla de Radiador x x x
125 2 GQN741 D D Guardabarro Der.
126 2 GQN741 D D Pasarueda Der.
y asi hasta llegar a las 60 piezas con las posible reparaciones.
El formulario tiene 5 matrices TxtPiezas,(TxtPD(0…59), TxtPC(0…59),TxtPR(0…59) , TxtPP(0…59).
El punto es. Con el sistema puedo guardar en la tabla sin problemas (tal cual el ejemplo anterior) pero en caso de un cambio algunas veces necesito borrar algunas cruces (quitar de la orden de trabajo la reparacion de una pieza), o agregar otras cruces (al momento de la reparacion surgen otras piezas a reparar). y ahi es donde comienza el problema cuando hago un update, me modifica todo y el resultado es nefasto. Te adjunto el codigo que utilizo para grabar en la tabla, quizas te ayuda un poco a entenderme mejor.
Private Sub GrabaDetalleOr()
Dim Item As String
Dim p As Byte
For p = 0 To 59
cnn.Execute “INSERT INTO ORDENDETALLE ” & “(NORDEN,DOMINIO,ZONA,PIEZA,D,C,R,P) VALUES(‘” & _
TxtNOrdenRep & “‘,'” & _
TxtDominio & “‘,'” & _
Left(TxtPieza(p), 1) & “‘,'” & _
TxtPieza(p) & “‘,'” & _
TxtPD(p) & “‘,'” & _
TxtPC(p) & “‘,'” & _
TxtPR(p) & “‘,'” & _
TxtPP(p) & “‘)”
Next p
End Sub
Otra vez muchas gracias!!!!!!!
Cuando realizas el update ¿qué es lo que te graba exactamente?
Una solución rápida sería “delete from ordendetalle where txtnordenrep = ” & norden
y luego GrabaDetalleOr()
No es lo más optimo pero se arreglaría, de todas maneras dime qué es lo que te guarda al hacer el update, qué te cambia?
De todas maneras pensando un poco más, creo que debias de haber separado las piezas en una tabla aparte y las relacionaras por el número de ordenes.
Ya me cuentas, solo doy posibilidades, no sé por donde llevas el proyecto 🙂
Las letras D,C,R,P corresponden a (Desarmar, Cambiar, Reparar, Pintar)
Cuando yo cargo por primera vez una orden para un vehiculo, el sistema genera En otra tabla (ORDENENCA) los datos del vehiculo y los costos. En una rutina siguiente agrega 60 registros nuevos en la tabla ORDENDETALLE,Marcando con una (x) las casillas correspondientes a la reparacion, y dejando en blanco las que no tienen reparacion. Recien ahi le damos ingreso al vehiculo al taller. Que pasa, en algunos casos luego de comenzar a reparar el auto, surgen cosas nuevas u otras no se reparan, lo que hace que el resultado de la reparcion difiera de la que grabamos en primera instancia.
Ahora si la pregunta era que resultado arroja la rutina (que esta mal realizada) es el siguiente.
Si yo borro un x (el error es. pone todos los campos de la tabla en blanco, cuando deberia solo corregir la que yo seleccione)
Si marco con una x una que estaba en blanco (el error es. pone todos los campos de la tabla con una x, cuando deberia solo corregir la que yo seleccione).
Si bien la posible solucion que me diste no es lo ideal, por el momento que que es la unica que veo viable, (eliminar todos los registros de la tabla y guardarlos nuevamente).
Nuevamente muy agradecido por tu dedicacion.
Según tu consulta de actualización:
UPDATE ORDENDETALLE set D = ‘” & TxtPD(a) & _
“‘, C = ‘” & TxtPC(a) & _
“‘, R = ‘” & TxtPR(a) & _
“‘, P = ‘” & TxtPP(a) & _
“‘ where NORDEN = ” & TxtNOrdenRep.Text & “”
Solo estás tomando NORDEN para definir que cambiar, en cambio deberías de tomar tambien algún campo más, si tienes -> ID NORDEN DOMINIO ZONA PIEZA D C R P
No puedes solo tomar Norden cuando esa orden la utilizas para diferentes zonas/piezas, tendrás que buscar otro campo que determine que quieres cambiar solo ese campo, lo que estás haciendo es poner el valor a todos los que sean de esa orden. De otra manera y con código:
“UPDATE ORDENDETALLE set D = ‘” & TxtPD(a) & _
“‘, C = ‘” & TxtPC(a) & _
“‘, R = ‘” & TxtPR(a) & _
“‘, P = ‘” & TxtPP(a) & _
“‘ where NORDEN = ” & TxtNOrdenRep.Text & “ and zona = ‘Paragolpe’”
Simplemente tienes que ser más específico.
No sé si me expliqué bien. Pero me cuentas 🙂
Excelente amigo!!!!! a funcionado a la perfeccion!!!! realmente ahora viendolo tal como lo escribiste era un problema realmente muy sencillo, no puedo creer que he estado varios dias con este problema tan simple.
No se como agrader tu tiempo, tu dedicacion y tan buena onda.
te dejo mi mail, para lo que pueda ayudarte. gustavocarranza[arroba]gmail.com
una vez mas muchas gracias!!!!!
De nada, 4 ojos ven más que 2.
Puedes twittearme, menearme o facebookearme para agradecermelo.
Te tomo en cuenta, es posible que podamos hablar, ya que veo que tienes conocimientos en vb6.
Un saludo!
hola! soy estudiante de preparatoria & estamos viendo visual basic D: lo cual para mi es super dificil no compredo muy bien eso y menos lo de los bucles t.t bueno el caso es qe ahora me dejaron hacer un programa que imprima en una caja de texto el cubo de los numeros del 1 al 20 pero no se muy bien como hacerlo, buenoo tego una idea de como empezar pero no se muy bienD: podrian ayudarme?(: por favor! gracias ñ.ñ’
Bueno, lo primero es saber qué es lo que tienes que hacer, en este caso, el cubo de los números del 1 al 20…
1 * 1 * 1
2 * 2 * 2
…
20 * 20 * 20
Entonces a partir de ahí empezamos a verlo para reducir el trabajo y programarlo de manera sencilla. Sabemos que debemos de repetir la operación de 1 a 20 por lo que usaremos un for next y que necesitamos multiplicar la variable del for next y multiplicarla a si misma por tres, primero damos el paso en lenguaje natural
Repito num = 1; desde 1 a 20
muestro = num * num * num;
fin repito
Creo que con eso ya lo tendrás claro, sino vuelveme a preguntar y vemos donde tienes las dudas.
Un saludo!
For I = 1 To I Step 1
lstordenes.AddItem I
Next I
End Sub
como le hago para k me ponga en una lista 1 2 3 4 ect
porfas
Buenas Hector
La metodología está bien, solo que has realizado el bucle con respecto al valor de I
Hacer I = 1 hasta I (que vale 0) avanza 1
añade un item con valor I
repite I
Como el hasta I vale 0, añadirá solo un valor, para que quede correcto tendrás que cambiar ese valor y poner las veces que quieras, por ejemplo:
For I = 1 To 4 Step 1
lstOrdenes.AddItem I
Next I
Con esto ya lo tendrías listo
hola mi nombre es adan y estudio la preparatoria en informatica y algunas veces me surge problemas para usar while wend y quisiera saber si me podrian dar una ayudadita. y por cierto muy excelentes sus explicaciones para resolver los problemas.
Buenas Adan
Lo que tienes que tener en cuenta es que el bucle while – wend, hace la pregunta antes de entrar en el bucle.
Mientras (ocurra esto)
secuencia de operaciones/funciones
repetir
No sé si te resuelve alguna duda, aunque si estás empezando a programar, te aconsejo que traduzcas a lenguaje natural, te resultará más sencillo entenderlo.
Un saludo!
hola buena tarde m puedes dar un ejemplo de for next pero bien estructurado es decir k m diga dim elefante 1 to 5 o algo x el stilo sk n se como va stoy studiando m dejaron investigar 1 ejemp pero no encuentro xfa gracias de ante mano jeje
En el ejemplo lo tenemos con la estructura básica. Lo que me estás comentando de Dim es declaración de variables. Si lo que quieres es copiar y pegar el código, solo tienes que añadir una linea más al segundo código propuesto. Por ejemplo:
Dim contador as integer
For contador = 0 to 10 step 2
msgbox “El valor de contador ahora es: ” & contador
Next contador
Espero que resuelva tu duda, sino aquí me tienes para continuar ayudándote 😉
mm ps muchas gracias me ayudo mucho y si no es molestia me puedes dar otro jeje x fa 😉
No sé que es lo que quieres que te deje. ¿Algún ejemplo más sobre el bucle en vb6?
¡Gracias! que forma más sencilla de explicarlo realmente fue muy fácil y rápido entenderlo. Te agradezco. Dtb!
Me alegro que te sirva 🙂 En realidad un Bucle For next en Vb6 es muy parecido a los diferentes lenguajes que existen.
Un saludo!
Hola que tal, me podrias ayudar lo que pasa que me dejaron de tarea hacer una aplicacion donde pueda comparar 20 numeros y me diga cual es el numero mayor y cual el menor, todo esto usando el for, porfavor ando atoradisimo
Buenos días Jossue, viendo que me estaba extendiendo mucho, he decidido escribirte un artículo para explicarlo:
http://www.vertutoriales.com/index.php/saber-si-un-numero-es-mayor-y-menor-de-una-lista/
Un saludo!
Bueno quisiera que me ayudara con este problema:
Elaborar un programa que imprima todos los números primos que se encuentran entre dos valores, así mismo imprimir la suma respectiva.Muy agradecido si lo respondiera…
Al ser una respuesta extensa, creé un nuevo tuto:
http://www.vertutoriales.com/index.php/saber-numeros-primos-entre-dos-valores-dados-metodologia/
Espero que te sirva. Un saludo!
hola muy buenos tus comentarios y kiero k me ayudes como hacer un programa que muestre los datos de un cliente y aparezcan en una lista plis te lo agradecere.
en este programa tenemos que agregarle msgbox,inputbox y no se como aser estoy confundida
hola sera que me podrian ayudar hacer un for , pero que me tire estos numeros 1 3 5 7 9 11 etc en celdas de excel . siempre y cuando programando en visual basic de excel.
Buenas, pues tal y como lo tienes aquí te valdría, solo poniendo que
for x = 1 to n step 2
//aquí el codigo de inserción en excel con el valor de x
next n
Amigo Buen dia.
Espero me explique.
Tengo una tabla elaborada y en la primera columna estan las claves (por ej BA001, MA001, MO001, BA002, MA002 ……….mo0100), Con Find encuentro las que comienza con “BA” y me dice por ejemplo que encontro 15, en la ventana que despliega. El asunto es que lo quiero llevar a otra tabla digamos de resumen donde nada mas estan los “BA”,uedo poner la que encontro primera ……….el problema es como le hago para pongas las “siguientes ” (Next) “BA”. For….. Next no me ha funcionada. Puede ayudarme ??
Te dejo la secuencia. Me repite el mismo.
For i = 1 To 30
i = 1 + i
Cells.Find(What:=”BA”, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
True, SearchFormat:=False).Activate
Cells.FindNext(After:=ActiveCell).Activate
Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(0, 5)).Select
Selection.Copy
Range(“AA5”).End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste Link:=True
Range(ActiveCell.Offset(0, 3), ActiveCell.Offset(0, 4)).Select
Selection.ClearContents
Range(“AA4”).Select
Next i
Por lo que estoy viendo, ¿estás utilizando VBA no? O en su caso estás accediendo a una tabla de Excel… veamos, no te puedo dar el código exacto ya que no entiendo exactamente lo que estás haciendo, pero una forma que podrías hacer sería la siguiente:
Para utilizar el bucle for-next deberás primero saber cuantos registros aparecen (comentas que te devuelve 15) Entiendo que es con Cells.Find(What:=”BA”), Así que el bucle sería for i = 0 to 15. A continuación estás poniendo un i = i + 1, esto no puedes utilizarlo o no debes utilizarlo, ya que el propio bucle for-next ya te incrementa 1 automáticamente en cada iteración.
Luego lo que deberás recorrer son los registros devueltos por esa búsqueda que estás utilizando con cells.findNext. Te dejo el ejemplo en pseudocódigo:
registrosConBA = cells.find(BA)
for x = 1 to TotalRegistrosConBa
guardaEnOtraTabla siguiente registrosConBA
next x
Espero que te ayude. Cualquier nueva consulta por aquí me tienes.
Un saludo!
hola en realidad me urge un concepto concreto de el ciclo for .. alguien puede ayudarme gracias
Si lanzas la pregunta… sobre el bucle for…