Condividi:        

Do Loop While, e mi sono incartato : )

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Do Loop While, e mi sono incartato : )

Postdi Alessandro999 » 17/03/15 11:21

Salve a tutti , avrei se possibile bisogno di qualche delucidazione sulle istruzioni Do while/loop, di seguito una macro che vi farà ridere :) , ho scritto questo accrocchio di macro all' interno di un modulo e dovrebbe controllare se in cella a1 è contenuta una data, il problema è che se c'è una data mi restituisce la msgbox con OK e fin qui va bene, ma se nella cella a1 non c'è una data mi restituisce perpetuamente la finestra msgbox "non è una data riprova" senza darmi la possibilità di digitare in cella a1 una nuova combinazione.

Se possibile come scrivereste voi una macro del genere, mi sarebbe utile a ragionare nella maniera corretta, perchè mi sembra di aver messo dentro troppe istruzioni.

Grazie mille

Codice: Seleziona tutto
Sub controlla()

Dim UNADATA As Variant

UNADATA = Range("a1").Value

If IsDate(UNADATA) Then GoTo corretto

If Not IsDate(UNADATA) Then

Do

MsgBox ("Non è una data riprova")

Range("a1").Value = ""

Loop Until IsDate(UNADATA)

End If

corretto:

MsgBox ("ok")

End Sub
 
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Sponsor
 

Re: Do Loop While, e mi sono incartato : )

Postdi ricky53 » 17/03/15 11:43

Ciao,
non conoscendo il tuo obiettivo è difficile poterti aiutare.

Se vuoi fare delle prove su come "funziona" il
"Do While ... / Loop"
oppure
"Do / Loop Until ..."
allora prova questi che ti ho scritto
Codice: Seleziona tutto
Sub Esempio_Ciclo_1()
    Dim I As Integer, mVar As String
   
    mVar = "SI"
    I = 1
    Do While mVar = "SI"
        Range("A1") = I
        I = I + 1
        If I > 200 Then
            MsgBox "Il ciclo è terminato"
            mVar = "NO"
        End If
    Loop
End Sub

Sub Esempio_Ciclo_2()
    Dim I As Integer, mVar As String
   
    mVar = "SI"
    I = 1
    Do
        Range("A1") = I
        I = I + 1
        If I > 200 Then
            MsgBox "Il ciclo 2 si è concluso"
            mVar = "NO"
        End If
    Loop Until mVar <> "SI"
End Sub


Comunque anche nella in rete troverai degli esempi validi.


Se vuoi controllare che in una cella vi sia una data allora NON occorre il "CICLO" ma in semplice "If" tipo il seguente
Codice: Seleziona tutto
Sub controlla()
    If IsDate(Range("A1").Value) Then
        MsgBox ("ok")
    Else
        Range("A1").Select
        MsgBox ("Non è una data riprova")
    End If
End Sub



Prova e fatti senitre
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Do Loop While, e mi sono incartato : )

Postdi Alessandro999 » 17/03/15 12:36

ricky53 ha scritto:Ciao,
non conoscendo il tuo obiettivo è difficile poterti aiutare.

Se vuoi fare delle prove su come "funziona" il
"Do While ... / Loop"
oppure
"Do / Loop Until ..."
allora prova questi che ti ho scritto
Codice: Seleziona tutto
Sub Esempio_Ciclo_1()
    Dim I As Integer, mVar As String
   
    mVar = "SI"
    I = 1
    Do While mVar = "SI"
        Range("A1") = I
        I = I + 1
        If I > 200 Then
            MsgBox "Il ciclo è terminato"
            mVar = "NO"
        End If
    Loop
End Sub

Sub Esempio_Ciclo_2()
    Dim I As Integer, mVar As String
   
    mVar = "SI"
    I = 1
    Do
        Range("A1") = I
        I = I + 1
        If I > 200 Then
            MsgBox "Il ciclo 2 si è concluso"
            mVar = "NO"
        End If
    Loop Until mVar <> "SI"
End Sub


Comunque anche nella in rete troverai degli esempi validi.


Se vuoi controllare che in una cella vi sia una data allora NON occorre il "CICLO" ma in semplice "If" tipo il seguente
Codice: Seleziona tutto
Sub controlla()
    If IsDate(Range("A1").Value) Then
        MsgBox ("ok")
    Else
        Range("A1").Select
        MsgBox ("Non è una data riprova")
    End If
End Sub



Prova e fatti senitre




Effettivamente con il secondo codice che hai postato usando l'istruzione IF è meglio, più pratico e sintetico,io purtroppo tendo sempre ad incasinare tutto :lol: Mentre per il primo codice ti metto quello che ho capito.... se ho capito :roll: ,mi potresti cortesemente confermarmi se il ragionamento seguente che faccio è giusto o se c'è qualcosa da correggere o aggiungere.


Dunque il ciclo dovrebbe continuare fino a quando l'istruzione nella riga Do While non risulta vera, e posso fare partire il ciclo anche da un punto più alto modificando il valore numerico della variabile (I).


1) la cella dove scorre il ciclo è la A1 del foglio di calcolo

2) Da subito la variabile mVar contiene "SI"

3) la variabile (I) vale 1 e successivamente si incrementa in continuazione di un' unità

4) Fino al momento in cui (I) non supera 500 per cui l'istruzione If mi manda alla msgbox che mi indica che "il ciclo è terminato"

5) E poi mi cambia la variabile mVar in "NO"

6) finisce la IF

7) parte il Loop che mi spedisce alla riga Do While mVar = "SI", però questa volta mVar non coincide per cui segue End Sub


grazie mille x eventuale risposta
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Do Loop While, e mi sono incartato : )

Postdi ricky53 » 17/03/15 13:23

Ciao,
ho utilizzato la cella "A1" solo per fa vedere qualcosa a chi ha lanciato la macro altrimenti non avresti saputo cosa stava facendo la macro.
In sostanza l'utilizzo di "A1" NON serve a nulla a fini del funzionamento del CICLO.

il resto di quello che hai scritto va bene
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Do Loop While, e mi sono incartato : )

Postdi Alessandro999 » 17/03/15 15:03

OK maestro, mi interessava sapere se avevo compreso il funzionamento.

Un altra cosa se non disturbo, ho notato che ci sono vari tipi di Loop così ho provato a modificare la macro giusto per impratichirmi un po' ,... posso chiederti che differenze ci sono fra i cicli definiti con Do / Loop While e quelli definiti con Do / Loop Until , a me al momento sembra che facciano le stesse cose.... se sostituisco l'ultima riga con Loop While Not I > 500 concettualmente cosa cambia ? .... cioè gli dico di continuare il ciclo fin tanto che I non è superiore a 500, mentre con Until e come se gli dicessi vai avanti con i cicli fino a che I non supera 500. Al momento non cogliendo la differenza mi sembrano due modi diversi di dire la stessa cosa tipo : Puoi mangiare una mela se ne hai più di 10 e Se non hai almeno 10 mele non puoi mangiare una mela.


Codice: Seleziona tutto
Sub Esempio_Ciclo()

    Dim I As Integer
   
    I = 1
   
    Do
       
        Range("A1") = I
       
        I = I + 1
       
        If I > 500 Then
           
            MsgBox "il ciclo è terminato"
           
           End If
   
    Loop Until I > 500

End Sub



ciao : )
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Do Loop While, e mi sono incartato : )

Postdi ricky53 » 17/03/15 15:21

Ciao,
dai due esempi che ti avevo fatto io si può capire il differente utilizzo ma il funzionamento è concettualmente lo stesso ciclo fino a che qualcosa non è ... oppure, nell'altro caso, qualcosa è ...

Per esempio con
Codice: Seleziona tutto
Do While mVar = "SI"
gli abbiamo detto di "CICLARE" mentre mVar è uguale a "SI"

invece con
Codice: Seleziona tutto
Loop Until mVar <> "SI"
gli abbiamo detto "CICLARE" fino a che mVar diventa diversa da "SI"

In entrambi i casi: appena mVar sarà uguale a un altro qualunque valore il ciclo terminerà !!!


Oppure il caso 2 si può scrivere in quest'altro modo
Codice: Seleziona tutto
Sub Esempio_Ciclo_2()
    Dim I As Integer, mVar As String
   
    mVar = "NO"
    I = 1
    Do
        Range("A1") = I
        I = I + 1
        If I > 20 Then
            MsgBox "Il ciclo 2 si è concluso"
            mVar = "SI"
        End If
    Loop Until mVar = "SI"
End Sub


Il ciclo viene eseguito fino a che mVar non diventa uguale a "SI"
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Do Loop While, e mi sono incartato : )

Postdi Alessandro999 » 17/03/15 16:00

Capito Ricky !

Per oggi non ti disturbo più... buona serata e grazie ancora di tutte le spiegazioni.
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Do Loop While, e mi sono incartato : )

Postdi ricky53 » 17/03/15 16:40

Ciao,
nessun disturbo .. .condividiamo conoscenza.

Alla prossima.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia


Torna a Applicazioni Office Windows


Topic correlati a "Do Loop While, e mi sono incartato : )":


Chi c’è in linea

Visitano il forum: Nessuno e 91 ospiti