Loop

Hola, quisiera hacer una función a priori sencilla por lo que he visto, aunque con mi nula experiencia imposible para mi salvo que me digan qué poner exactamente:
Lo que desearía es hacer que excel recargue la página las veces necesarias hasta llegar un momento en el que un casillero (el F3 concretamente) marque TRUE en lugar de FALSE. [Ese casillero F3 marca True sólo si otros tantos lo hacen al mismo tiempo y éstos, lo hacen a su vez siempre y cuando ciertas circunstancias determinadas por el azar o no se produzcan.] Estos datos entre corchetes no tienen interés en principio, pero bueno.
El caso es que no se qué pasos seguir para hacer nada de VBA en absoluto o cómo hacer loops o nada por el estilo. Si puedes ayudarme, explicándome paso a paso y con pelos y señales (coloca el cursor sobre la casilla F3 donde tienes puesto FALSE... En herramientas selecciona macro...)... Te lo agradeceré infinito y más.
Un abrazo!

1 respuesta

Respuesta
1
Lo que no entiendo es a que te referís con "recargue la página"; lo que calculo que estás buscando se puede hacer con el evento Calculate
En el editor VBA, selecciona la hoja donde quieras que pase esto y luego en la parte de código va algo como
Private Sub Worksheet_Calculate()
If Range("F3").Value = True Then
'TU CODIGO
End If
End Sub
Lo de "'TU CÓDIGO" me falta...
Si F3 es True, entonces quisiera que dejara de recargar la página, pero si saliera False (que es lo más probable) querría que recargara la página otra vez y otra y otra... hasta dar True. El caso es que en lo de "recargar" la página (u hoja excel) yo me refiero a lo que pasa cada vez que cambias cualquier cosa en excel teniendo algún casillero con un aleatorizador (tipo "=RANDBETWEEN(1;5)"), en el que cada vez te daría un número distinto. Con la tabla que he hecho, para que F3 me de True, tienen que coincidir algunas variables aleatorias (que deben ser así). El caso es que necesito que me aleatorice todo una y otra vez hasta dar con la coincidencia que busco, que se representará como "True" en F3.
Gracias por la ayuda!
Me explico:
F3 da un valor TRUE o FALSE. El valor que da, depende de muchas otras casillas cuyos valores posibles son también o TRUE o FALSE, siendo que F3 da TRUE sólo si todas esas otras dan TRUE; si una o varias de esas otras casillas da FALSE, entonces F3 también dará FALSE.
Cada una de esas otras casillas atiende a circunstancias aleatorias, por ejemplo: la casilla A1 da TRUE si los números obtenidos en las casillas A2 y A3 mediante RANDBETWEEN(1;15) son diferentes, pero si resulta que son iguales, entonces da FALSE y por lo tanto, F3 también dará false. Así se comportan el resto de las casillas de TRUE/FALSE, por lo tanto, la probabilidad de que todas den TRUE es baja (pero existe). Al recargar la página (refrescar, renovar... como quieras, vamos, lo que se consigue al darle a la TECLA F9) varias veces, eventualmente se produce la coincidencia y F3 puede dar TRUE. Pero lograr eso es muy costoso, ya que se debe presionar F9 muchísimas veces. Lo que yo te pido es un modo para automatizar esa función del F9 de modo que no pare de hacerlo hasta que el resultado del casillero F3 sea TRUE.
Gracias, espero que puedas ayudarme...
Insisto que no entiendo el tema "recargue la página"; el modo de cálculo es manual o automatico; recibís info vía DLL o por que tema estaría cambiando la información; ya que si no hay nada que cambie la hoja por que va a cambiar (ej/ tu función RANDBETWEN... va a cambiar si recalculas la info y/o si ingresas un dato; en caso contrario aunque sea aleatorio, una vez que calcula un valor permanece "invariable")
Ahora si creo que lo entendí perfecto; el código que deberías poner es:
Private Sub Worksheet_Calculate()
If Range("F3").Value = False Then
ActiveSheet.Calculate
End If
End Sub
Ojo pues entrará en un loop hasta que realmente pase lo que quieres y si por alguna razón esto no ocurre (ej que tengas un valor "fijo" en False, entonces quedará en un loop "infinito" (fíjate que lo que hago es mandar a recalcular (el equivalente a presionar F9) hasta q
Saludos y espero que ahora si sea lo que quieres
Gustavo
Muchas gracias. El código que necesitaba era ese. Aunque para poder hacer lo mio lo he modificado algo, poniendo lo siguiente:
Private Sub Worksheet_Calculate()
Do
ActiveSheet.Calculate
Loop Until Range("F3").Value = True
End Sub
Y con eso he logrado lo que quería, y estupendamente además. Muchísimas gracias, has sido de grandísima ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas