Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Ayuda con Condiciones

Estas en el tema de Ayuda con Condiciones en el foro de Visual Basic clásico en Foros del Web. buenas, me encargaron de taraea un programilla en excel que realizara sto: introducir un valor entre 1 y 10, y que no permita letras, en ...
  #1 (permalink)  
Antiguo 03/10/2010, 18:55
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 5 meses
Puntos: 0
Sonrisa Ayuda con Condiciones

buenas, me encargaron de taraea un programilla en excel que realizara sto:
introducir un valor entre 1 y 10, y que no permita letras,
en caso de que algo este mal salga una ventanita diciendo el error.

bueno eso ya lo hize solamente me falta que cuando salga el mensaje mostrando el error y darle aceptar me redirecione al inputbox,
alguien me puede ayudar.




Sub ejemplo()
'
' ejemplo Macro
' ejemplo
'
' Acceso directo: Ctrl+Mayús+U
'

x = InputBox("escribe un numero")

If Not IsNumeric(x) Then
x = MsgBox("Ingresa Solo Numeros", 1 + 48)
End If

If x >= 1 And x <= 10 Then

Range("A1").Select
ActiveCell.FormulaR1C1 = x

Else
x = MsgBox("Escoje un numero entre el 1 y el 10 ", 1 + 48)


End If



End Sub

gracias de antemano
  #2 (permalink)  
Antiguo 03/10/2010, 23:35
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 4 meses
Puntos: 53
Respuesta: Ayuda con Condiciones

Hola, para hacer lo que pides es suficiente con que pongas un Goto por ejemplo así:

Sub ejemplo()
'
' ejemplo Macro
' ejemplo
'
' Acceso directo: Ctrl+Mayús+U
'
Arriba:

x = InputBox("escribe un numero")

If Not IsNumeric(x) Then
x = MsgBox("Ingresa Solo Numeros", 1 + 48)
Goto Arriba
End If

If x >= 1 And x <= 10 Then

Range("A1").Select
ActiveCell.FormulaR1C1 = x

Else
x = MsgBox("Escoje un numero entre el 1 y el 10 ", 1 + 48)
Goto Arriba
End If

End Sub


Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 04/10/2010, 00:17
Avatar de Gakex  
Fecha de Ingreso: enero-2009
Mensajes: 137
Antigüedad: 15 años, 2 meses
Puntos: 4
De acuerdo Respuesta: Ayuda con Condiciones

Lo que debes hacer es utilizar la recursivida, es decir que la funcion se llame a si misma, en este caso cuando encuentre un error se llamara a si misma para empesar de nuevo y se llamara a si misma las veces que sea necesario hasta recibir un valor permitido.


Sub ejemplo()
'
' ejemplo Macro
' ejemplo
'
' Acceso directo: Ctrl+Mayús+U
'

x = InputBox("escribe un numero")

If Not IsNumeric(x) Then
x = MsgBox("Ingresa Solo Numeros", 1 + 48)
call ejemplo
End If

If x >= 1 And x <= 10 Then
Range("A1").Select
ActiveCell.FormulaR1C1 = x
Else
x = MsgBox("Escoje un numero entre el 1 y el 10 ", 1 + 48)
call ejemplo
End If

End Sub
  #4 (permalink)  
Antiguo 04/10/2010, 05:30
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Ayuda con Condiciones

muchas gracias si me sirvio eso,
pero ahora no me deja salir,
tendre ke poner una condicion, donde diga que si no pongo nada no me regrese al principio
if x= ""???
  #5 (permalink)  
Antiguo 04/10/2010, 05:47
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 4 meses
Puntos: 53
Respuesta: Ayuda con Condiciones

Indica el nuevo código porque si lo has hecho bien, creo que debería funcionar, aunque no se cual de las dos opciones has utilizado puesto que no haces referencia a ninguna respuesta.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #6 (permalink)  
Antiguo 04/10/2010, 11:57
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Ayuda con Condiciones

perdon se me olvidaba, aquie esta el codigo nuevo use la solucion de call

Sub ejemplo()
'
' ejemplo Macro
' ejemplo
'
' Acceso directo: Ctrl+Mayús+U
'
x = InputBox("escribe un numero")

If Not IsNumeric(x) Then
x = MsgBox("Ingresa Solo Numeros", 1 + 48)
Call ejemplo

End If

If x >= 1 And x <= 10 Then

Range("A1").Select
ActiveCell.FormulaR1C1 = x

Else
x = MsgBox("Escoje un numero entre el 1 y el 10 ", 1 + 48)
Call ejemplo

End If



End Sub


ya funciona perfecto, lo unico es que si no escribes nada en el inputbox(ninguna letra ni numero) no te deja salir hasta que pongas algo ahi, como podria hacerle??
yo pensaba que era algo de if x= "", pero no se que mas sigue
  #7 (permalink)  
Antiguo 05/10/2010, 01:44
Avatar de Gakex  
Fecha de Ingreso: enero-2009
Mensajes: 137
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Ayuda con Condiciones

Como dije la recurcividad es algo miu util como retro alimentacion en un sistema, y se puede utilizar de muchas maneras y para diferentes fines, en este caso para adquirir valores validos, esto quiere decir que solo dejara de ejecutarse hasta recibir un valor aceptado, entonces en este caso debes agregar un escape.

vas bien con tu idea que pones al ultimo...
primero piensale, piensale
no creo que sea necesario decirte la respuesta porque veo que manejas bien las condiciones if y else.

Postea el codigo final saludos.
  #8 (permalink)  
Antiguo 05/10/2010, 05:30
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Ayuda con Condiciones

bueno si tengo una idea pero no se como se ecriba el comando para que se cierre, o se deja solo??

if x=""

end if


y lo de las comillas no estoy seguro si este bien eso??
  #9 (permalink)  
Antiguo 05/10/2010, 05:48
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 4 meses
Puntos: 53
Respuesta: Ayuda con Condiciones

Hola:

No se si tienes alguna razón especial para no utilizar el GOTO personalmente pienso que las funciones recursivas deben utilizarse con mucho cuidado porque tienden a agotar el espacio de pila y a meterse en bucles complicados.

Si estás empezando, creo que con el GOTO lo vas a ver mucho mas claro.

Te dejo tu ejemplo corregido para que veas como funciona.


Código:
Sub ejemplo()
Arriba:
  x = InputBox("escribe un numero")
  ' Si es nulo, salimos de la rutina
  If x = "" Then Exit Sub
  
  ' Si no es un número avisamos y volvemos arriba
  If Not IsNumeric(x) Then
    MsgBox "Ingresa Solo Numeros", 1 + 48
    GoTo Arriba
  End If

  ' Si está entre 1 y 10 aplicamos el valor
  If x >= 1 And x <= 10 Then
    Range("A1").Select
    ActiveCell.FormulaR1C1 = x
  Else
   ' En caso contrario avisamos y volvemos arriba
   MsgBox "Escoje un numero entre el 1 y el 10 ", 1 + 48
   GoTo Arriba
  End If

End Sub
Como puedes ver el MsgBox no tiene porque devolver un valor como tu hacías si sólo hay una opción y no deseamos condicionarla.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #10 (permalink)  
Antiguo 05/10/2010, 17:47
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Ayuda con Condiciones

ok muchas gracias, si voy empezando con esto no sabia casi nada de esto me tube que meter a investigar.
no habia puesto lo de GOTO porque la primera vez que lo habia puesto no me abia funcionado, no se porque, pero ahora si me funciono y mejor me quedo con esa solucion.

ahora si ya quedo listo, muchas gracias, lo tenia que hacer de la manera mas simple posible porque lo tengo que esplicar a mis compañeros en clase y ellos tampoco saben muy bien de esto.
muchas gracias
  #11 (permalink)  
Antiguo 05/10/2010, 18:18
Avatar de Gakex  
Fecha de Ingreso: enero-2009
Mensajes: 137
Antigüedad: 15 años, 2 meses
Puntos: 4
De acuerdo Respuesta: Ayuda con Condiciones

Lo que dice erbuson es verda, pero se aplica cuando la funcion se repite sin fin o sin una condicion de salida o escape, entonces se genera un desbordamiento, generalmente cuando esta mal diseñada la función marca error.

Pero en tu caso supongo que no se tiene que repetir infinidad de veces.

Te dejo el codigo corregido para que tambien se los muestres a tus compañeros y aprendan como hacer algo, de dos formas diferentes, talvez lo ocupen mas adelante.
Código:
Sub ejemplo()

  x = InputBox("escribe un numero")
  ' Si es nulo, salimos de la función
  If x = "" Then Exit Sub
  
  ' Si no es un número avisamos del error y reiniciamos la función
  If Not IsNumeric(x) Then
    MsgBox "Ingresa Solo Numeros", 1 + 48
    call ejemplo
  End If

  ' Si está entre 1 y 10 aplicamos el valor
  If x >= 1 And x <= 10 Then
    Range("A1").Select
    ActiveCell.FormulaR1C1 = x
  Else
   ' En caso contrario avisamos del error y reiniciamos la función
   MsgBox "Escoje un numero entre el 1 y el 10 ", 1 + 48
   call ejemplo
  End If

End Sub
Tambien es muy buen ejemplo el que te dio erbuson.
saludos.
  #12 (permalink)  
Antiguo 05/10/2010, 18:22
 
Fecha de Ingreso: octubre-2010
Mensajes: 6
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Ayuda con Condiciones

si, comoquiera les enseñare lso dos para que los conoscan,
gracias
  #13 (permalink)  
Antiguo 06/10/2010, 00:02
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 4 meses
Puntos: 53
Respuesta: Ayuda con Condiciones

Hola amigo Gakex, si pruebas tu Sub con el siguiente escenario, veras que tiene un problema:

Sub ejemplo()

x = InputBox("escribe un numero")
' Si es nulo, salimos de la función
If x = "" Then Exit Sub

' Si no es un número avisamos del error y reiniciamos la función
If Not IsNumeric(x) Then
MsgBox "Ingresa Solo Numeros", 1 + 48
call ejemplo
End If

' Si está entre 1 y 10 aplicamos el valor
If x >= 1 And x <= 10 Then
Range("A1").Select
ActiveCell.FormulaR1C1 = x
Else
' En caso contrario avisamos del error y reiniciamos la función
MsgBox "Escoje un numero entre el 1 y el 10 ", 1 + 48
call ejemplo
End If

End Sub


Supongamos que el usuario en primer lugar teclea una letra, la función devuelve el aviso de error y llama a ejemplo, pero no olvidemos que cuando termina con esta segunda llamada la primera continua donde se había quedado por lo que efectúa la siguiente comparación avisando de que escoja un numero entre 1 y 10 y vuelve a llamar a ejemplo con lo cual para salir de la misma debes cancelar distintas veces la pregunta.

Como comentaba en mi mensaje las llamadas a SUB recursivas deben controlarse mucho y tener muy claro que funcionaran.

Un saludo
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...

Etiquetas: condiciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:16.