Evitar la saturación de la pila de llamadas
Publicado por SebasSBM (20 intervenciones) el 30/08/2007 17:31:43
He creado un programa tan largo que he tenido que dividir el procedimiento en varios procedimientos, y los he enlazado usando "Call" al final de cada instrucción.
Option Explicit
Private Borrar(1 To 36) As Variant, BorrarA As Variant ' El valor de estas variables es un número aleatorio del 1 al 81. Los valores de estas variables no se repiten entre sí.
[...]
Public Sub Blanquear()
[...]
Call Cuadrar
End Sub
Public Sub Cuadrar()
For Each BorrarA In Borrar
Line1: If BorrarA = 1 And BorrarA = 2 Or BorrarA = 1 And BorrarA = 3 Or BorrarA = 1 And BorrarA = 4 Or BorrarA = 1 And BorrarA = 5 Or BorrarA = 1 And BorrarA = 6 Or BorrarA = 1 And BorrarA = 7 _ Or BorrarA = 1 And BorrarA = 8 Or BorrarA = 1 And BorrarA = 9 Or BorrarA = 2 And BorrarA = 3 _ Or BorrarA = 2 And BorrarA = 4 Or BorrarA = 2 And BorrarA = 5 Or BorrarA = 2 And BorrarA = 6 _
Or BorrarA = 2 And BorrarA = 7 Or BorrarA = 2 And BorrarA = 8 Or BorrarA = 2 And BorrarA = 9 _ Or BorrarA = 3 And BorrarA = 4 Or BorrarA = 3 And BorrarA = 5 Or BorrarA = 3 And BorrarA = 6 _
Or BorrarA = 3 And BorrarA = 7 Or BorrarA = 3 And BorrarA = 8 Or BorrarA = 3 And BorrarA = 9 _
Or BorrarA = 4 And BorrarA = 5 Or BorrarA = 4 And BorrarA = 6 Or BorrarA = 4 And BorrarA = 7 _
Or BorrarA = 4 And BorrarA = 8 Or BorrarA = 4 And BorrarA = 9 Or BorrarA = 5 And BorrarA = 6 _
Or BorrarA = 5 And BorrarA = 7 Or BorrarA = 5 And BorrarA = 8 Or BorrarA = 5 And BorrarA = 9 _
Or BorrarA = 6 And BorrarA = 7 Or BorrarA = 6 And BorrarA = 8 Or _
BorrarA = 6 And BorrarA = 9 Or BorrarA = 7 And BorrarA = 8 Or BorrarA = 7 And BorrarA = 9 Or_ BorrarA = 8 And BorrarA = 9 Then GoTo Line2 Else Blanquear ' Así me aseguro que alguna de las coincidencias anteriores se cumpla, ya que el procedimiento "Blanquear asigna aleatoriamente los valores de las variables de la matriz Borrar.
Line2: If...(similar a la línea 1, con otros valores) Then GoTo Line3 Else Blanquear
Line3:[...] 'la última línea de todas llama a otro procedimiento si las condiciones If..Then(similares a las anteriores), se cumplen.
Next
[...]
End Sub
[...]
En la pila de llamadas me aparecen múltiples llamadas a estos dos procedimientos alternativamente. ¿Cómo puedo evitar esto? Existe alguna forma de llamar a otro procedimiento anulando la llamada del procedimiento que se está ejecutando actualmente?
Option Explicit
Private Borrar(1 To 36) As Variant, BorrarA As Variant ' El valor de estas variables es un número aleatorio del 1 al 81. Los valores de estas variables no se repiten entre sí.
[...]
Public Sub Blanquear()
[...]
Call Cuadrar
End Sub
Public Sub Cuadrar()
For Each BorrarA In Borrar
Line1: If BorrarA = 1 And BorrarA = 2 Or BorrarA = 1 And BorrarA = 3 Or BorrarA = 1 And BorrarA = 4 Or BorrarA = 1 And BorrarA = 5 Or BorrarA = 1 And BorrarA = 6 Or BorrarA = 1 And BorrarA = 7 _ Or BorrarA = 1 And BorrarA = 8 Or BorrarA = 1 And BorrarA = 9 Or BorrarA = 2 And BorrarA = 3 _ Or BorrarA = 2 And BorrarA = 4 Or BorrarA = 2 And BorrarA = 5 Or BorrarA = 2 And BorrarA = 6 _
Or BorrarA = 2 And BorrarA = 7 Or BorrarA = 2 And BorrarA = 8 Or BorrarA = 2 And BorrarA = 9 _ Or BorrarA = 3 And BorrarA = 4 Or BorrarA = 3 And BorrarA = 5 Or BorrarA = 3 And BorrarA = 6 _
Or BorrarA = 3 And BorrarA = 7 Or BorrarA = 3 And BorrarA = 8 Or BorrarA = 3 And BorrarA = 9 _
Or BorrarA = 4 And BorrarA = 5 Or BorrarA = 4 And BorrarA = 6 Or BorrarA = 4 And BorrarA = 7 _
Or BorrarA = 4 And BorrarA = 8 Or BorrarA = 4 And BorrarA = 9 Or BorrarA = 5 And BorrarA = 6 _
Or BorrarA = 5 And BorrarA = 7 Or BorrarA = 5 And BorrarA = 8 Or BorrarA = 5 And BorrarA = 9 _
Or BorrarA = 6 And BorrarA = 7 Or BorrarA = 6 And BorrarA = 8 Or _
BorrarA = 6 And BorrarA = 9 Or BorrarA = 7 And BorrarA = 8 Or BorrarA = 7 And BorrarA = 9 Or_ BorrarA = 8 And BorrarA = 9 Then GoTo Line2 Else Blanquear ' Así me aseguro que alguna de las coincidencias anteriores se cumpla, ya que el procedimiento "Blanquear asigna aleatoriamente los valores de las variables de la matriz Borrar.
Line2: If...(similar a la línea 1, con otros valores) Then GoTo Line3 Else Blanquear
Line3:[...] 'la última línea de todas llama a otro procedimiento si las condiciones If..Then(similares a las anteriores), se cumplen.
Next
[...]
End Sub
[...]
En la pila de llamadas me aparecen múltiples llamadas a estos dos procedimientos alternativamente. ¿Cómo puedo evitar esto? Existe alguna forma de llamar a otro procedimiento anulando la llamada del procedimiento que se está ejecutando actualmente?
Valora esta pregunta
0