Discussione:
Problema con GOTO
(troppo vecchio per rispondere)
Davide
2006-11-16 10:32:02 UTC
Permalink
Capitolo 4 salto condizionato GoTo.
Perchè non mi funziona il salto condizionato?

While ActiveCell.Value <> ""
ActiveCell.Offset(i, 0).Select
Select Case ActiveCell.Value

Case Is = "A"

Case Is = "B"

Case Is = "C"

GoTo Pippo

Case Is = "D"

End Select
Wend

Pippo

In pratica al verificarsi della condizione "C" la mia intenzione era quella
di uscire dal ciclo e continuare, ma non funziona mi da errore.
Come si gestisce il salto condizionato in VBA?
Grazie per la lezione, ciao Davide.
eliano
2006-11-16 10:48:01 UTC
Permalink
Post by Davide
Capitolo 4 salto condizionato GoTo.
Perchè non mi funziona il salto condizionato?
While ActiveCell.Value <> ""
ActiveCell.Offset(i, 0).Select
Select Case ActiveCell.Value
Case Is = "A"
Case Is = "B"
Case Is = "C"
GoTo Pippo
Case Is = "D"
End Select
Wend
Pippo
In pratica al verificarsi della condizione "C" la mia intenzione era quella
di uscire dal ciclo e continuare, ma non funziona mi da errore.
Come si gestisce il salto condizionato in VBA?
Grazie per la lezione, ciao Davide.
Ciao Davide, ma qui normalmente non si impartiscono lezioni, ma si danno
consigli.
Il primo che ti do è: specifica sempre il tipo di errore, altrimenti nella
maggioranza dei casi potrrebbe risultare impossibile risalire alla causa.
Il secondo è: non scrivere mai direttamente nel post macro o parti di macro,
ma copia esattamente la macro che ti da errore; la mia bassa esperienza mi
dice che in certi casi un dimensionamento (dim) sbagliato può essere loa
causa di un malfunzionamento.
Detto questo, il Tag di un Goto dovrebbe essere seguito da due punti (:), cioè
goto pippococo
.....
pippococo:
.....
ma non credo (a parte il riferimento al poeta che saluto) che dipenda da
questo, visto che il messaggio in questi casi è abbastanza chiaro.
Coraggio Davide, riprova.
Eliano
Mauro Gamberini
2006-11-16 10:55:02 UTC
Permalink
Post by Davide
Capitolo 4 salto condizionato GoTo.
Perchè non mi funziona il salto condizionato?
E' decisamente meglio:

Public Sub a()

Dim miaVariabile As String
miaVariabile = Foglio1.Range("A1").Value

Select Case miaVariabile

Case Is = "Pluto"
.............

Case Is = "Pippo"
Call b

Case Is .........

End Select

End Sub

Public Sub b()
' Il codice da eseguire se il Select Case è = a Pippo
End Sub
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Post by Davide
While ActiveCell.Value <> ""
ActiveCell.Offset(i, 0).Select
Select Case ActiveCell.Value
Case Is = "A"
Case Is = "B"
Case Is = "C"
GoTo Pippo
Case Is = "D"
End Select
Wend
Pippo
In pratica al verificarsi della condizione "C" la mia intenzione era quella
di uscire dal ciclo e continuare, ma non funziona mi da errore.
Come si gestisce il salto condizionato in VBA?
Grazie per la lezione, ciao Davide.
Davide
2006-11-16 12:36:03 UTC
Permalink
Post by Mauro Gamberini
Post by Davide
Capitolo 4 salto condizionato GoTo.
Perchè non mi funziona il salto condizionato?
Public Sub a()
Dim miaVariabile As String
miaVariabile = Foglio1.Range("A1").Value
Select Case miaVariabile
Case Is = "Pluto"
.............
Case Is = "Pippo"
Call b
Case Is .........
End Select
End Sub
Public Sub b()
' Il codice da eseguire se il Select Case è = a Pippo
End Sub
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Post by Davide
While ActiveCell.Value <> ""
ActiveCell.Offset(i, 0).Select
Select Case ActiveCell.Value
Case Is = "A"
Case Is = "B"
Case Is = "C"
GoTo Pippo
Case Is = "D"
End Select
Wend
Pippo
In pratica al verificarsi della condizione "C" la mia intenzione era quella
di uscire dal ciclo e continuare, ma non funziona mi da errore.
Come si gestisce il salto condizionato in VBA?
Grazie per la lezione, ciao Davide.
Grazie ragazzi, ma non si tratta di intercettare un errore.
In pratica volevo solo verificare se all'interno di un ciclo while si poteva
uscire prima che il ciclo si concludesse.
con l'istruzione
While ActiveCell.Value <> ""
entro dentro il ciclo fino a quando le celle hanno dati (e qui tutto ok).
Però io pensavo di interrompere il ciclo prima della fine naturale, per
esempio quando dentro la cella trovo C.
Quindi ho impostato un select case e con case is=c pensavo di utilizzare un
salto per andare direttamente fuori del ciclo While.
Forse ho sbagliato ad utilizzare Goto ma ho provato anche con Exit While ma
non funziona. Riporto il codice sperando di essere stato chiaro

Range("tab_temp").Select
ActiveCell.Offset(2, 0).Select

While ActiveCell.Value <> ""
ActiveCell.Offset(i, 0).Select
Select Case ActiveCell.Value

Case Is = "A"
Me.opt1.Value = 1

Case Is = "B"
Me.opt2.Value = 1

Case Is = "C" (se il valore della cella è un C allora io voglio uscire
per proseguire normalmente il programma, non è un errore)
Me.opt3.Value = 1

Goto Pippo (ERRORE DI COMPILAZIONE
ETTICHETTA NON DEFINITA)

Case Is = "D"
Me.opt4.Value = 1

Wend

Pippo

While ActiveCell.Value <> ""
i = 0
Me.lstordini.AddItem ActiveCell.Value & (" ") &
ActiveCell.Offset(0, 1).Value
Me.lstordini.List(i, 1) = ActiveCell.Offset(0, 1).Value
ActiveCell.Offset(1, 0).Select
i = i + 1
Wend



Worksheets("Foglio1").Select
Application.Goto reference:="tab_temp"
Selection.ClearContents

Me.cmdimporta.Enabled = True
Me.cmdaggiungi.Enabled = False
campione = (campione + 1)
Me.txtcampione.Text = campione

End Sub
cucchiaino
2006-11-16 12:47:15 UTC
Permalink
Post by Davide
In pratica volevo solo verificare se all'interno di un ciclo while si poteva
uscire prima che il ciclo si concludesse.
con l'istruzione
While ActiveCell.Value <> ""
entro dentro il ciclo fino a quando le celle hanno dati (e qui tutto ok).
Però io pensavo di interrompere il ciclo prima della fine naturale, per
esempio quando dentro la cella trovo C.
Un esempio:
-------------------------------
Sub c()
Dim si As Boolean

Do While ActiveCell.Value <> ""
If ActiveCell.Value = "C" Then
si = True
Exit Do
End If
.Offset(i, 0).Select
Loop

If not si Then
'se nessuna "C" è stata trovata
exit sub
End If

'qui la routine continua

End Sub


()---cucchiaino
eliano
2006-11-16 14:58:02 UTC
Permalink
"Davide" ha scritto:
[cut]
Post by Davide
Goto Pippo (ERRORE DI COMPILAZIONE
ETTICHETTA NON DEFINITA)
[cut]

Ciao Davide.
A parte le varie considerazioni risolutive per le quali mi sembri ben
servito, se questo era l'errore, cioè "Etichetta non definita", significa che
non riesce ad effettuare il salto all'etichetta Pippo perchè mancano i due
punti che definiscono Pippo come etichetta, cioè il punto di arrivo del Goto.
Eliano
cucchiaino
2006-11-16 12:43:02 UTC
Permalink
Scriveva Davide giovedì, 16/11/2006:

Ciao Davide.
Post by Davide
Capitolo 4 salto condizionato GoTo.
Stai seguendo un libro?
Se si, ci sarà scritto che è il GoTo è fortemente sconsigliato!
Post by Davide
Perchè non mi funziona il salto condizionato?
While ActiveCell.Value <> ""
ActiveCell.Offset(i, 0).Select
Select Case ActiveCell.Value
Case Is = "A"
Case Is = "B"
Case Is = "C"
GoTo Pippo
Case Is = "D"
End Select
Wend
Pippo
come ti diceca Eliano, l'etichetta Pippo deve essere
seguita dai due punti
-------
Post by Davide
Wend
Pippo:
-------

Con il codice che hai scritto, se non trova nessuna cella con "C"
in quella colonna, la routine sotto l'etichetta Pippo verrà
eseguita comunque!
Post by Davide
In pratica al verificarsi della condizione "C" la mia intenzione era quella
di uscire dal ciclo e continuare, ma non funziona mi da errore.
devi considerare anche il caso in cui "C" non esiste in nessuna cella
cosa devi fare in questo caso?
Post by Davide
Come si gestisce il salto condizionato in VBA?
un esempio te l'ha indicato Mauro e mille altri esempi si potrebbero
elencare


Se spieghi qual'è l'obiettivo del tuo codice è molto probabile che
ti arrivino soluzioni diverse dalla tua e più mirate allo scopo.


ciao

()---cucchiaino
Davide
2006-11-16 12:59:01 UTC
Permalink
Post by cucchiaino
Ciao Davide.
Post by Davide
Capitolo 4 salto condizionato GoTo.
Stai seguendo un libro?
Se si, ci sarà scritto che è il GoTo è fortemente sconsigliato!
Post by Davide
Perchè non mi funziona il salto condizionato?
While ActiveCell.Value <> ""
ActiveCell.Offset(i, 0).Select
Select Case ActiveCell.Value
Case Is = "A"
Case Is = "B"
Case Is = "C"
GoTo Pippo
Case Is = "D"
End Select
Wend
Pippo
come ti diceca Eliano, l'etichetta Pippo deve essere
seguita dai due punti
-------
Post by Davide
Wend
-------
Con il codice che hai scritto, se non trova nessuna cella con "C"
in quella colonna, la routine sotto l'etichetta Pippo verrà
eseguita comunque!
Post by Davide
In pratica al verificarsi della condizione "C" la mia intenzione era quella
di uscire dal ciclo e continuare, ma non funziona mi da errore.
devi considerare anche il caso in cui "C" non esiste in nessuna cella
cosa devi fare in questo caso?
Post by Davide
Come si gestisce il salto condizionato in VBA?
un esempio te l'ha indicato Mauro e mille altri esempi si potrebbero
elencare
Se spieghi qual'è l'obiettivo del tuo codice è molto probabile che
ti arrivino soluzioni diverse dalla tua e più mirate allo scopo.
ciao
()---cucchiaino
Ciao,
Scusate forse è colpa mia che non riesco a spiegarmi visto la mia scarsa
conoscenza di excel.
l'esempio che ho riportato la lettera C esiste (la metto io) quello che
voglio capire è se esiste la possibilità di uscire da un ciclo While prima
che si concluda.
Sulla mia tab ho inserito lettera da A a M quindi con select case verifico
le lettere . quello che voglio sapere è se è possibile uscire da while per
esempio quando trovo C, oppure devo aspettare per forza di trovare una cella
vuota.
Io ho scelto goto ma probabilmente è sbagliato.
Quindi quando troco C posso uscire da un ciclo While oppure no?
Grazie mille Davide
Davide
2006-11-16 13:48:02 UTC
Permalink
Scusami tanto cucchiaino, non avevo letto il tuo primo messaggio.
Con il tuo suggerimento ora funziona ma non ho capito la differenza fra
while e Do while.

Grazie mille Davide.
Maurizio Borrelli
2006-11-18 02:45:20 UTC
Permalink
Post by Davide
Scusami tanto cucchiaino, non avevo letto il tuo primo messaggio.
Con il tuo suggerimento ora funziona ma non ho capito la differenza fra
while e Do while.
Ciao Davide.

Perche' tentare di capire *prima* di leggere la guida? ;)

----------
*Istruzione While...Wend*
While condizione
[istruzioni]
Wend
Suggerimento L'istruzione Do...Loop consente un'esecuzione dei cicli
più strutturata e flessibile.
----------
*Istruzione Do...Loop*
Do [{While | Until} condizione]
[istruzioni]
[Exit Do]
[istruzioni]
Loop
In alternativa, è possibile utilizzare la seguente sintassi equivalente:
Do
[istruzioni]
[Exit Do]
[istruzioni]
Loop [{While | Until} condizione]
----------

La chiave del discorso sta nella parola "strutturata". Come
"programmazione strutturata".

*structured programming* n. Programming that produces programs with
clean flow, clear design, and a degree of modularity or hierarchical
structure. _See also_ modular programming, object-oriented programming.
_Compare_ spaghetti code.
*spaghetti code* n. Code that results in convoluted program flow,
usually because of excessive or inappropriate use of GOTO or JUMP
statements. _See also_ GOTO statement, jump instruction.
(Microsoft Computer Dictionary, Fifth Edition)

*programmazione strutturata* sost. Il programmare (lo stile di
programmazione) che produce (per mezzo del quale si ottengono) programmi
dal flusso pulito, dalla progettazione chiara, e con un certo grado di
modularita' e struttura gerarchica. _Vedi anche_ programmazione
modulare, programmazione orientata agli oggetti. _Confronta_
programmazione a spaghetti.
*programmazione a spaghetti* sost. Codice col quale si ottiene un flusso
convoluto del programma, solitamente a causa dell'uso improprio o
eccessivo di istruzioni GOTO o JUMP (vai a, salta).
(Traduzione mia)

--
Ciao :o)
Maurizio Borrelli, Microsoft Office Access MVP
-------- http://mvp.support.microsoft.com/
?SPQR(C)
X RIO - Risorse in italiano per gli utenti di office
-------- http://www.riolab.org/

Continua a leggere su narkive:
Loading...