[RESUELTO] Repetir un bucle do loop con 2 condiciones

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

[RESUELTO] Repetir un bucle do loop con 2 condiciones

Notapor marcosAoo » Lun Feb 08, 2016 5:16 pm

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
Última edición por SLV-es el Jue Feb 25, 2016 9:40 pm, editado 3 veces en total
Razón: Insertar etiquetas [CODE]
LibreOffice 6.2.4.2 Con LINUX MINT 19 Cinammon 64 Bits
marcosAoo
 
Mensajes: 25
Registrado: Mié Dic 31, 2014 7:22 am

Re: Repetir un bucle do loop con 2 condiciones

Notapor RMG » Lun Feb 08, 2016 5:54 pm

Hola,

Puedes usar un For Next.

For mTmp 5 To 50

bucle

Next

Saludos
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3689
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Repetir un bucle do loop con 2 condiciones

Notapor mauricio » Lun Feb 08, 2016 6:21 pm

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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 6075
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Repetir un bucle do loop con 2 condiciones

Notapor marcosAoo » Lun Feb 08, 2016 6:52 pm

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.
Última edición por SLV-es el Jue Feb 25, 2016 9:42 pm, editado 1 vez en total
Razón: Insertar etiquetas [CODE]
LibreOffice 6.2.4.2 Con LINUX MINT 19 Cinammon 64 Bits
marcosAoo
 
Mensajes: 25
Registrado: Mié Dic 31, 2014 7:22 am

Re: Repetir un bucle do loop con 2 condiciones

Notapor mauricio » Lun Feb 08, 2016 7:26 pm

Si consideras que la pregunta ha sido respondida, por favor, marca como resuelto el tema, gracias.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 6075
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado