Passare da una sub a unaltra con Goto
Hai un problema con Excel? 
di Grograman (utente non iscritto) data: 29/01/2014 16:08:30
ma l'etichetta a cui rimandi deve far parte della medesima routine
Option Explicit
Sub pippo()
Dim i As Long
For i = 0 To 100
If i > 5 Then
Call pluto
Else
GoTo VIA
End If
'blablabla
VIA:
Next i
End Sub
Sub pluto()
'bla bla
End Sub
|
di Grograman (utente non iscritto) data: 29/01/2014 16:09:26
Per la cronaca... scritta così non ha alcun senso eh, è solo per far vedere come usare l'etichetta!
di rambo424 (utente non iscritto) data: 29/01/2014 16:20:03
appunto.. so che deve stare nella stessa routine..
il codice è più complesso di quello che ho riportato nell'esempio e proprio mi serve che se una condizione è verificata nella sub sottostante, il codice risalga a quella precedente! è proprio lì il problema!
di rambo424 (utente non iscritto) data: 29/01/2014 16:27:58
L'unica cosa che mi viene in mente è mandarlo in errore e fare una cosa del tipo:
sinceramente lo vorrei evitare perchè a questo punto non avrei più alcun errore di debug, quindi non credo sia una soluzione fattibile..
sub pippo
on error goto VIA
for i=0 to 100
call pluto
VIA:
next i
end sub
sub pluto
if i>5 then ok=5/0 'lo mando in errore e quindi vado su via
end sub |
di Grograman (utente non iscritto) data: 29/01/2014 16:32:42
No allora fai esempi più specifici anche perchè scritta come l'hai messa non si verificherà MAI la condizione di i>5 NON essendo i passata alla routine pluto.
E anche passandogliela ti si bloccherebbe ugualmente.
Specifica meglio cosa vuoi ottenere, possibilmente con un file di esempio, che un modo lo troviamo!
Sub pippo()
On Error GoTo VIA
For i = 0 To 100
Call pluto(i)
VIA:
Next i
End Sub
Sub pluto(ByVal i As Long)
If i > 5 Then ok = 5 / 0 'lo mando in errore e quindi vado su via
End Sub
|
di rambo424 data: 29/01/2014 16:40:17
Intanto grazie per l'interessamento :D
Ti ho scritto un file di esempio che semplifica abbastanza la struttura del mio codice: una serie di sub concatenate che spesso hanno parametri calcolate da funzioni.
Io voglio che se si verifica una condizione (che nel caso in esempio è quantità<50), il codice risalga alla prima funzione, e proceda con il next i.
Non vi soffermate sulla struttura logica dell'esempio, che ovviamente non ha senso, ma serve solo da esempio.
ps.: I valori che arrivano alla funzione cerca_prezzo sono fissi; in realtà vengono fuori da altre sub che fa il mio codice.
Sub test1()
For i = 0 To 100
Call test2
VIA:
Next i
End Sub
Sub test2()
quantità = 10
prezzo = 5
prezzo = cerca_prezzo(quantità, prezzo)
End Sub
Function cerca_prezzo(ByVal quantita, prezzo)
If quantita < 50 Then GoTo VIA 'e qui ovviamente scritta così non funge!!!
cerca_prezzo = quantita * prezzo
End Function
|
di Grograman (utente non iscritto) data: 29/01/2014 16:46:08
No non ci siamo!
Mi serve un FILE, non il codice ^_^
La soluzione potrebbe essere un banale controllo PRIMA di richiamare la routine, un ciclo while, una funzione ricorsiva, ma senza la REALE struttura di dati e codice, non sono in grado di trovarla!
di Grograman (utente non iscritto) data: 29/01/2014 16:48:21
O utilizzare una booleana pubblica:
Option Explicit
Public blnOk As Boolean
Sub test1()
Dim i As Long
For i = 0 To 100
Call test2
If blnOk Then GoTo VIA
VIA:
Next i
End Sub
Sub test2()
Dim quantità As Long, prezzo As Long
quantità = 60
prezzo = 5
prezzo = cerca_prezzo(quantità, prezzo)
End Sub
Function cerca_prezzo(ByVal quantita, prezzo)
If quantita < 50 Then blnOk = True 'e qui ovviamente scritta così non funge!!!
cerca_prezzo = quantita * prezzo
End Function
|
di rambo424 data: 29/01/2014 17:20:51
Allora:
la booleana public non riesce a intercettare il problema che si verifica a livello di sub.
quanto al banale controllo? che avevi in mente?
quanto al file di esempio, ti assicuro che la struttura è esattamente quella che ti ho riportato, una serie di nested sub e function; non posso inviarti il file originale per problemi di tutela della privacy
di patel data: 29/01/2014 18:29:28
un file di esempio è il file originale con dati fittizi
di rambo424 data: 29/01/2014 18:57:46
ragassuoli vi state fossilizzando sul file originale, ma non ne vedo la necessità.. sono una decina di moduli vi complicherei la vita inutilmente!
vi riporto un altro esempio, magari riesco a spiegarmi meglio:
Sub test1()
For i = 0 To 100
Call test2
Next i
End Sub
Sub test2()
quantità = 10
prezzo = 100
prezzo = cerca_prezzo(quantità, prezzo)
End Sub
Function cerca_prezzo(ByVal quantita, prezzo)
If quantita < 50 Then
' torna al next i -> parte che mi manca!!
cerca_prezzo = quantita * prezzo
End Function
|
di scossa data: 29/01/2014 21:16:19
GOTO??
Ho letto bene?
GOTO ??????
di Grograman (utente non iscritto) data: 29/01/2014 23:18:51
cit: " sono una decina di moduli vi complicherei la vita inutilmente!"
E' più probabile che la semplificheremmo noi a te
di Zer0Kelvin data: 02/02/2014 04:39:51
Ma siamo noi che ci stiamo fossilizzando o tu che insisti con una richiesta ASSURDA?
Vuoi Approfondire?