Página 1 de 1

[RESUELTO] Repetir un bucle do loop con 2 condiciones

NotaPublicado: Lun Feb 08, 2016 5:16 pm
por marcosAoo
La estructura correcta es:
DO LOOP
'macro a repetir
Until/while = condicion a repetir

Lo que yo quisiera hacer es esto:
DO LOOP
'macro a repetir
Until/while = condicion a repetir or/and condicion a repetir

por ejemplo quiero mejorar una macro del manual de mauricio:
Código: Seleccionar todo   Expandir vistaContraer vista
Sub Matrices_Matrices2
Dim mDatos(3) As Variant
Dim mTmp As Variant
Dim co1 As Integer
Dim sCaracter As String
Dim sContra As String
Dim mTmp2 As integer 'modificacion solicitada por el manual

   'Llenamos los datos, observa como tenemos cuatro grupos, letras minúsculas, letras mayúsculas, números y caracteres especiales
   mDatos(0) = Array( "a", "b" ,"c" ,"d" ,"e" ,"f" ,"g" ,"h" ,"i" ,"j" ,"k" ,"l" ,"m","n","ñ","o","p","k","r","s","t","u","v","w","x","y","z")
   mDatos(1) = Array( "A" ,"B" ,"C" ,"D" ,"E" ,"F" ,"G" ,"H" ,"I" ,"J" ,"K" ,"L" ,"M","N","Ñ","O","P","Q","R","S","T","U","V","W","X","Y","Z")
   mDatos(2) = Array("1","2","3","4","5","6","7","8","9","0")
   mDatos(3) = Array( "\" ,"|" ,"!" ,"·" ,"$" ,"%" ,"&" ,"/" ,"(" ,")" ,"=" ,"?" ,"¿","¡","+","-","_",".",":",",",";","<",">","}","{","]","[")

   'Modificacion solicitada por el manual
DO
      mTmp2 = InputBox( "Seleccione por favor de ¿cuantos caracteres quieres la contraseña? entre 5 y 50 caracteres"
LOOP WHILE mTmp2 < 5
   'Nuestra contraseña sera de 10 caracteres
   For co1 = 1 To mTmp2
      'Seleccionamos aleatoriamente, UNO de los cuatro grupos
      mTmp = mDatos( CInt( Rnd() * 3 ) )
      'Seleccionamos aleatoriamente, UN elemento del grupo, observa como usamos la función Rnd y la multiplicamos por el índice superior del grupo seleccionado
      sCaracter = mTmp( CInt( Rnd() * UBound(mTmp) ) )
      'Vamos juntando los caracteres de la contraseña
      sContra = sContra & sCaracter
   Next
   'Mostramos la contraseña
   MsgBox "Tu contraseña es: " & sContra
   InputBox( "Copia de contraseña", "COPIAR", sContra )

End Sub


Si bien la macro anterior funciona la duda que tengo es en la linea:
Código: Seleccionar todo   Expandir vistaContraer vista
LOOP WHILE mTmp2 < 5

Quisiera que la linea anterior quedara asì:
Código: Seleccionar todo   Expandir vistaContraer vista
LOOP WHILE mTmp2 < 5 OR mTmp2 > 50

es decir que el ciclo se repita mientras la variable mTmp2 sea menor a 5 y mayor a 50, pero si inserto este codigo me da error:
Código: Seleccionar todo   Expandir vistaContraer vista
LOOP WHILE mTmp2 < 5 OR mTmp2 > 50

Re: Repetir un bucle do loop con 2 condiciones

NotaPublicado: Lun Feb 08, 2016 5:54 pm
por RMG
Hola,

Puedes usar un For Next.

For mTmp 5 To 50

bucle

Next

Saludos

Re: Repetir un bucle do loop con 2 condiciones

NotaPublicado: Lun Feb 08, 2016 6:21 pm
por mauricio
Si quieres un valor entre un número y otro... el mismo no puedes ser menor al primero Y al mismo tiempo mayor al segundo... no confundas Y (AND) con O (OR)...

Siempre es bueno mencionar que error obtienes...

TIP. Recuerda que la función InputBox, "siempre" devuelve una cadena de texto... no puedes comparar una cadena contra un número...

Saludos

Re: Repetir un bucle do loop con 2 condiciones

NotaPublicado: Lun Feb 08, 2016 6:52 pm
por marcosAoo
Gracias mauricio y RMG :bravo:

ya se soluciono el problema y la macro ya solucionada y funcionando al 100% es esta.
y el bucle se repetira siempre que el usuario intruduzca un valor inferior a 5 y mayor a 50
Código: Seleccionar todo   Expandir vistaContraer vista
Sub Matrices_Matrices2
Dim mDatos(3) As Variant
Dim mTmp As Variant
Dim co1 As Integer
Dim sCaracter As String
Dim sContra As String
Dim mTmp2 As integer 'modificacion solicitada por el manual

   'Llenamos los datos, observa como tenemos cuatro grupos, letras minúsculas, letras mayúsculas, números y caracteres especiales
   mDatos(0) = Array( "a", "b" ,"c" ,"d" ,"e" ,"f" ,"g" ,"h" ,"i" ,"j" ,"k" ,"l" ,"m","n","ñ","o","p","k","r","s","t","u","v","w","x","y","z")
   mDatos(1) = Array( "A" ,"B" ,"C" ,"D" ,"E" ,"F" ,"G" ,"H" ,"I" ,"J" ,"K" ,"L" ,"M","N","Ñ","O","P","Q","R","S","T","U","V","W","X","Y","Z")
   mDatos(2) = Array("1","2","3","4","5","6","7","8","9","0")
   mDatos(3) = Array( "\" ,"|" ,"!" ,"·" ,"$" ,"%" ,"&" ,"/" ,"(" ,")" ,"=" ,"?" ,"¿","¡","+","-","_",".",":",",",";","<",">","}","{","]","[")

   'Modificacion solicitada por el manual
   DO
      mTmp2 = InputBox( "Seleccione por favor de ¿cuantos caracteres quieres la contraseña? entre 5 y 50 caracteres"
   LOOP WHILE mTmp2 < 5 OR mTmp2 > 50
   'Nuestra contraseña sera de 10 caracteres
   For co1 = 1 To mTmp2
      'Seleccionamos aleatoriamente, UNO de los cuatro grupos
      mTmp = mDatos( CInt( Rnd() * 3 ) )
      'Seleccionamos aleatoriamente, UN elemento del grupo, observa como usamos la función Rnd y la multiplicamos por el índice superior del grupo seleccionado
      sCaracter = mTmp( CInt( Rnd() * UBound(mTmp) ) )
      'Vamos juntando los caracteres de la contraseña
      sContra = sContra & sCaracter
   Next
   'Mostramos la contraseña
   MsgBox "Tu contraseña es: " & sContra
   InputBox( "Copia de contraseña", "COPIAR", sContra )

End Sub


Gracias mauricio y RMG

Damos por solucionado y cerrado este tema.

Re: Repetir un bucle do loop con 2 condiciones

NotaPublicado: Lun Feb 08, 2016 7:26 pm
por mauricio
Si consideras que la pregunta ha sido respondida, por favor, marca como resuelto el tema, gracias.