salir de un bucle

18/03/2010 - 11:21 por Des As Tre | Informe spam
Saludos.
Utilizo la el siguiente formato para que se ejecute el siguiente valor de un bucle

Sub a()
for bucle = 1 to 721
si no pasa lo que quiero Goto etiqueta ' puntoA
if pasa ...then
haz lo que debes

end if
:etiqueta
next bucle
end Sub

Pero quiero conseguir que desde el ' puntoA se ejecute el siguiente valor de un bucle sin mandar
que vaya a la etiqueta.
Podeis decirme como?

Saludos y ... Excel entes vibraciones
Des As Tres No imprimas, ganemos un árbol... o tres hojinas
.

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
22/03/2010 - 03:29 | Informe spam
hola, Des !

(hasta donde puedo "ver"...) la razon esta de parte de ambos:
- mi parte, es hasta donde se cumpla lo que imagine del "cripticismo" de tu consulta
- tu parte, es a partir de donde inician divergencias de la imaginacion de mi parte :))

con relacion a la ejecucion condicionada de instrucciones (sin el uso de etiquetas), hay diversas variantes:

op1: al "cumplirse" una condicion, se omiten las siguientes...

if [not] condicion1 [= true o false] then
' instrucciones (incluso "nada")
elseif [not] condicion2 [= true o false] then
' instrucciones (incluso "nada")
elseif [not] condicion3 [= true o false] then
end if

op2: usando condiciones externas e internas (no tiene por que ser la misma)...

if [not] condicionexterna1 [= true o false] then
' instrucciones (incluso "nada")
if [not] condicioninterna1 [= true o false] then
' otras condiciones/instrucciones (incluso "nada")
end if
' otras condiciones/instrucciones (incluso "nada")
end if

opN: (depende de otrlas necesidades ?)

saludos,
hector.

__ OP __
Eres un puntilloso... pero tienes razon.
Dado que la pregunta creo que la hago clara, no me tomo demasiadas molestias en el resto del conjunto de descripciones.
Por descontado que tienes razon, pero si miras lo que pongo: si pasa...then, no esta especificado el que.
No indico que necesariamente lo que "pasa" tenga que ser lo que no pasaba en la linea anterior
Lo que estaba tratando de poner, disculpa mi forma informal de hacerlo, era (espero que ahora sea mas comprensible):
Sub a()
for bucle = 1 to 721
codigo
si no pasa lo que quiero Goto etiqueta ' puntoA
codigo
:etiqueta
next bucle
codigo
end Sub
y la misma pregunta expresada de otra forma.
como pasar al siguiente ciclo del bucle desde un punto [obviando todo el resto de instrucciones hasta el "Next" ], y sin utilizar la etiqueta?
Respuesta Responder a este mensaje
#7 Des As Tre
24/03/2010 - 10:56 | Informe spam
Hola Héctor. Gracias

Y ahora soltaría un taco( suavecito) y diría algo así como " Hay que ver que tío".
Lastima que las distancia no lo me permita, si no iría, incluso arriesgándome a que no lo aceptaras,
a invitarte a lo que fuera el caso.

Volviendo al tajo.

Las técnicas que comentas las utilizo con suma frecuencia. Y funcionan. ( si no meto la pata)
Lo que pretendo es que, en los casos en que lo que debo hacer cosas si se cumple una condición , ( o
si no se cumple) son tantas ( líneas) y la alternativa también tantas líneas, que no se ven en una
pantalla.

Para comodidad de programación, que no de ejecución, buscaba la forma de salir de esa secuencia del
bucle y , por ejemplo, crear dos bucles ( si fuera el caso).

Saludos y ... Excel entes vibraciones
Des As Tres No imprimas, ganemos un árbol... o tres hojinas
.
"Héctor Miguel" escribió en el mensaje
news:%
hola, Des !

(hasta donde puedo "ver"...) la razon esta de parte de ambos:
- mi parte, es hasta donde se cumpla lo que imagine del "cripticismo" de tu consulta
- tu parte, es a partir de donde inician divergencias de la imaginacion de mi parte :))

con relacion a la ejecucion condicionada de instrucciones (sin el uso de etiquetas), hay diversas


variantes:

op1: al "cumplirse" una condicion, se omiten las siguientes...

if [not] condicion1 [= true o false] then
' instrucciones (incluso "nada")
elseif [not] condicion2 [= true o false] then
' instrucciones (incluso "nada")
elseif [not] condicion3 [= true o false] then
end if

op2: usando condiciones externas e internas (no tiene por que ser la misma)...

if [not] condicionexterna1 [= true o false] then
' instrucciones (incluso "nada")
if [not] condicioninterna1 [= true o false] then
' otras condiciones/instrucciones (incluso "nada")
end if
' otras condiciones/instrucciones (incluso "nada")
end if

opN: (depende de otrlas necesidades ?)

saludos,
hector.

__ OP __
> Eres un puntilloso... pero tienes razon.
> Dado que la pregunta creo que la hago clara, no me tomo demasiadas molestias en el resto del


conjunto de descripciones.
> Por descontado que tienes razon, pero si miras lo que pongo: si pasa...then, no esta


especificado el que.
> No indico que necesariamente lo que "pasa" tenga que ser lo que no pasaba en la linea anterior
> Lo que estaba tratando de poner, disculpa mi forma informal de hacerlo, era (espero que ahora


sea mas comprensible):
> Sub a()
> for bucle = 1 to 721
> codigo
> si no pasa lo que quiero Goto etiqueta ' puntoA
> codigo
> :etiqueta
> next bucle
> codigo
> end Sub
> y la misma pregunta expresada de otra forma.
> como pasar al siguiente ciclo del bucle desde un punto [obviando todo el resto de instrucciones


hasta el "Next" ], y sin utilizar la etiqueta?


Respuesta Responder a este mensaje
#8 Héctor Miguel
24/03/2010 - 17:33 | Informe spam
hola, Des !

Las tecnicas que comentas las utilizo con suma frecuencia. Y funcionan. (si no meto la pata)
Lo que pretendo es que, en los casos en que lo que debo hacer cosas si se cumple una condicion, (o si no se cumple)
son tantas (lineas) y la alternativa tambien tantas lineas, que no se ven en una pantalla.
Para comodidad de programación, que no de ejecución, buscaba la forma de salir de esa secuencia del bucle
y, por ejemplo, crear dos bucles ( si fuera el caso)...



como te comentaba en el mensaje anterior...
con relacion a la ejecucion condicionada de instrucciones (sin el uso de etiquetas), hay diversas variantes:





otra alternativa (de entre varias mas) es construir una variable que determine (por anticipado) cual linea/opcion se ejecuta
suponiendo dos opciones de las que se pudieran escoger una, la otra, ambas o ninguna (hablamos de 4 alternativas)

dim cual_de_todas as byte
cual_de_todas = <se escogio la opcion 1>
cual_de_todas = cual_de_todas + <se escogio la opcion 2>
select case cual_de_todas
case 0 ' si NO se escogio ninguna ? '
case 1 ' si se escogio solo la opcion 1 '
case 2 ' si se escogio solo la opcion 2 '
case 3 ' se se escogieron las dos opciones '
end select

o puedes construir una secuencia "binaria" (unos y ceros segun n_opciones)

saludos,
hector.
Respuesta Responder a este mensaje
#9 Des As Tre
25/03/2010 - 16:32 | Informe spam
Hola Héctor. Gracias.
También la utilizo, aunque menos frecuentemente. Pero me has hecho plantear algo que no se me había
ocurrido hacer hasta ahora.

Puedo preguntarte ¿que es lo que hay detrás de la idea de : construir una secuencia "binaria" y
¿como desarrollarla?
Saludos y ... Excel entes vibraciones
Des As Tres No imprimas, ganemos un árbol... o tres hojinas
.
"Héctor Miguel" escribió en el mensaje
news:%23Y0VG$
hola, Des !

> Las tecnicas que comentas las utilizo con suma frecuencia. Y funcionan. (si no meto la pata)
> Lo que pretendo es que, en los casos en que lo que debo hacer cosas si se cumple una condicion,


(o si no se cumple)
> son tantas (lineas) y la alternativa tambien tantas lineas, que no se ven en una pantalla.
> Para comodidad de programación, que no de ejecución, buscaba la forma de salir de esa secuencia


del bucle
> y, por ejemplo, crear dos bucles ( si fuera el caso)...

como te comentaba en el mensaje anterior...
>> con relacion a la ejecucion condicionada de instrucciones (sin el uso de etiquetas), hay


diversas variantes:

otra alternativa (de entre varias mas) es construir una variable que determine (por anticipado)


cual linea/opcion se ejecuta
suponiendo dos opciones de las que se pudieran escoger una, la otra, ambas o ninguna (hablamos de


4 alternativas)

dim cual_de_todas as byte
cual_de_todas = <se escogio la opcion 1>
cual_de_todas = cual_de_todas + <se escogio la opcion 2>
select case cual_de_todas
case 0 ' si NO se escogio ninguna ? '
case 1 ' si se escogio solo la opcion 1 '
case 2 ' si se escogio solo la opcion 2 '
case 3 ' se se escogieron las dos opciones '
end select

o puedes construir una secuencia "binaria" (unos y ceros segun n_opciones)

saludos,
hector.


Respuesta Responder a este mensaje
#10 Héctor Miguel
25/03/2010 - 19:44 | Informe spam
hola, Des !

... que es lo que hay detras de la idea de: construir una secuencia "binaria" y como desarrollarla?



es (basicamente) lo mismo que la opcion del mensaje anterior (solo que desde una "optica" diferente)
por cierto, hay una omision en la "forma" descrita en el mensaje anterior, donde dice:
cual_de_todas = <se escogio la opcion 1>
cual_de_todas = cual_de_todas + <se escogio la opcion 2>




debio decir:
cual_de_todas = <se escogio la opcion 1>
cual_de_todas = cual_de_todas - 2 * <se escogio la opcion 2>

la opcion de secuencia binaria buscaria una cadena de texto en la estructura "select case...end select"
y la construccion de la secuencia binaria (similar a la "suma" de opciones en la estructura anterior) seria +/- asi:

dim cual_de_todas as string
cual_de_todas = iif(<se escogio la opcion 1>, 1, 0)
cual_de_todas = cual_de_todas & iif(<se escogio la opcion 2>, 1, 0)
select case cual_de_todas
case "00" ' ninguna
case "10" ' la opcion 1
case "01" ' la opcion 2
case "11" ' ambas opciones
end select

otras formas de contruccion (binaria, sumatoria o similares) dependerian de casos particulares (?)
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida