Visual Basic para Aplicaciones - sub anidados

Life is soft - evento anual de software empresarial
 
Vista:

sub anidados

Publicado por Pablo (77 intervenciones) el 02/04/2018 16:01:28
Buenas tardes,

Tengo un problema de concepto.

Tengo un sub, vamos a llamarlo padre, y lo que quiero hacer lo tengo dividido en varios subs que hacen el trabajo.

Si todo va bien, los sub se van ejecutando uno detrás de otro hasta el final.

Si no, es decir, si uno de ellos se va a Exit Sub, quiero que termine también el padre.

Ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sub Padre()
	Call uno
	Call dos
	Call tres
	Call cuatro
End Sub
Sub uno()
 
	Lo que sea
 
End Sub
Sub dos()
	If lo que sea Then
		Lo que sea
	Else
		Exit Sub
	End If
 
End Sub
Sub tres()
 
	Lo que sea
 
End Sub
Sub cuatro()
 
	Lo que sea
 
End Sub

Si Sub dos termina en Exit Sub, ¿Como puedo hacer que termine el Sub Padre y no continúe en Sub tres?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

sub anidados

Publicado por JuanC (565 intervenciones) el 02/04/2018 17:15:47
hay varias maneras, te doy un par...
-usando una variable global que indique el estado de cada Sub
-convirtiendo cada Sub-hijo en Function y retornar un valor indicando cómo fue el proceso
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

sub anidados

Publicado por Antoni Masana (498 intervenciones) el 03/04/2018 07:37:44
Te pongo un ejemplo de las dos opciones que te cuenta JuanC


Opción 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Dim Salir as Boolean
 
Sub Padre()
    Call uno
    Call dos: if Salir Then Exit Sub
    Call tres
    Call cuatro
End Sub
 
Sub uno()
	Lo que sea
End Sub
 
Sub dos()
    If lo que sea Then
        Lo que sea
        Salir=False
    Else
        Salir=True: Exit Sub
    End If
End Sub
 
Sub tres()
    Lo que sea
End Sub
 
Sub cuatro()
    Lo que sea
End Sub


Opción 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub Padre()
    Call uno
    If dos() Then Exit Sub
    Call tres
    Call cuatro
End Sub
 
Sub uno()
	Lo que sea
End Sub
 
Function dos()
    If lo que sea Then
        Lo que sea
        dos=False
    Else
        dos=True: Exit Sub
    End If
End Function
 
Sub tres()
    Lo que sea
End Sub
 
Sub cuatro()
    Lo que sea
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

sub anidados

Publicado por Pablo (77 intervenciones) el 03/04/2018 20:43:00
Muchas gracias a los dos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar