[RESUELTO] Repetir un bucle do loop con 2 condiciones

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
marcosAoo
Mensajes: 25
Registrado: Mié Dic 31, 2014 7:22 am

[RESUELTO] Repetir un bucle do loop con 2 condiciones

Mensaje 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

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

LOOP WHILE mTmp2 < 5
Quisiera que la linea anterior quedara asì:

Código: Seleccionar todo

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

 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
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Repetir un bucle do loop con 2 condiciones

Mensaje por RMG »

Hola,

Puedes usar un For Next.

For mTmp 5 To 50

bucle

Next

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Repetir un bucle do loop con 2 condiciones

Mensaje 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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
marcosAoo
Mensajes: 25
Registrado: Mié Dic 31, 2014 7:22 am

Re: Repetir un bucle do loop con 2 condiciones

Mensaje 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

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Repetir un bucle do loop con 2 condiciones

Mensaje por mauricio »

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
Responder