Ejecutar macro repetidamente más de 20 veces

Tengo un programilla hecho para llevar la planificación de un hotel. Para que lo entendáis rápidamente a partir de "n" reservas se asigna automáticamente una habitación en función de unas prioridades.
Bien, la pregunta es, para hacer esto ejecuto la macro hasta que no quedan reservas o hasta que no quedan habitaciones. Esto puede ocurrir muy tarde, es decir que pueda que necesite ejecutar la macro 100 veces. Pregunta: ¿Cómo lo hago? ¿Por lo que veo sólo la puedo ejecutar hasta 20 veces pero más no?

1 respuesta

Respuesta
1
¿Por qué dices que solo la pues ejecutar 20 veces?, alucinante.
Buenas,
porque es así lo dice. Cuando la ejecuto, poniendo una condición que un determinado valor sea nulo en un informe, a la que llega a la ejecución 20 da errores y aparece un cuadro de diálogo diciendo que una macro puede llamase a sí misma un máximo de 20 veces!
¿Cómo lo ves? ¿Tienes alguna pista?
Gracias
Puedes pegar el código que usas para ejecutar la macro y pasa el código de la macro, para ello pincha con el botón derecho sobre la macro y le dices 'gurdar como: módulo' abres el módulo y pegas el código.
Si utilizas el docmd. Runmacro "macro", 100 funciona perfectamente.
OK,
te lo adjunto!
__________________________________
Function Proc__PLANNING()
On Error GoTo Proc__PLANNING_Err
DoCmd. Close acForm, "planning_dates"
DoCmd. Close acReport, "apartaments_assignacio0"
DoCmd. DeleteObject acTable, "apartaments_assignacio0"
DoCmd.OpenQuery "aparts_disponibles0", acViewNormal, acEdit
DoCmd.DeleteObject acTable, "apartaments_assignacio00"
DoCmd.OpenQuery "aparts_disponibles001", acViewNormal, acEdit
DoCmd.DeleteObject acTable, "apartaments_assignacio000"
DoCmd.OpenQuery "aparts_disponibles001b", acViewNormal, acEdit
DoCmd.OpenQuery "aparts_disponibles001c", acViewNormal, acEdit
DoCmd.DeleteObject acTable, "apartaments_assignacio"
DoCmd.OpenQuery "aparts_disponibles001d", acViewNormal, acEdit
DoCmd.DeleteObject acTable, "apartaments_assignacio001"
DoCmd.OpenQuery "aparts_disponibles002", acViewNormal, acEdit
DoCmd.OpenQuery "aparts_disponibles003", acViewNormal, acEdit
DoCmd.OpenQuery "pre 001 tancar aparts", acViewNormal, acEdit
DoCmd.OpenQuery "pre 002 a graella", acViewNormal, acEdit
DoCmd.OpenQuery "pre 003 a graella - neteja", acViewNormal, acEdit
DoCmd.OpenReport "apartaments_assignacio0", acViewPreview, "", "", acHidden
DoCmd.RunMacro "0 planning", , "[Reports]![apartaments_assignacio0]![detall]<>''"
Beep
MsgBox "finalitzat", vbInformation, ""
DoCmd.OpenForm "planning_dates", acNormal, "", "", , acNormal
DoCmd.OpenReport "reserves assignades", acViewPreview, "", "", acNormal
Proc__PLANNING_Exit:
Exit Function
Proc__PLANNING_Err:
MsgBox Error$
Resume Proc__PLANNING_Exit
End Function
Si defines una nueva macro (MacroX) así:
----
DoCmd. DeleteObject acTable, "apartaments_assignacio0"
DoCmd. OpenQuery "aparts_disponibles0", acViewNormal, acEdit
DoCmd.DeleteObject acTable, "apartaments_assignacio00"
DoCmd. OpenQuery "aparts_disponibles001", acViewNormal, acEdit
DoCmd.DeleteObject acTable, "apartaments_assignacio000"
DoCmd. OpenQuery "aparts_disponibles001b", acViewNormal, acEdit
DoCmd. OpenQuery "aparts_disponibles001c", acViewNormal, acEdit
DoCmd.DeleteObject acTable, "apartaments_assignacio"
DoCmd. OpenQuery "aparts_disponibles001d", acViewNormal, acEdit
DoCmd.DeleteObject acTable, "apartaments_assignacio001"
DoCmd. OpenQuery "aparts_disponibles002", acViewNormal, acEdit
DoCmd. OpenQuery "aparts_disponibles003", acViewNormal, acEdit
DoCmd. OpenQuery "pre 001 tancar aparts", acViewNormal, acEdit
DoCmd. OpenQuery "pre 002 a graella", acViewNormal, acEdit
DoCmd. OpenQuery "pre 003 a graella - neteja", acViewNormal, acEdit
----
Creas un botón y en el código de 'al hacer click' pones: A esta macro la llamamos macrox, después tienes campo [Reports]! [apartaments_assignacio0]![detall], prueba algo así dentro del código del botón:
Dim i as integer
Bucle:
i=i+1
docmd.runmacro "macrox"
if i>200 then 'en lugar de 200 pon lo que quieras, es pora que no se meta en un bucle infinito
Msgbox "la macro se ha ejecutado 200 veces"
exit sub
endif
if dcount("detall","apartaments_assignacio0","detall>''")> then goto bucle.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas