Oppure

Loading
06/03 23:22
Carlo
Postato originariamente da maurizio74:

Ciao Carlo,

sembra funzionare tutto solamente che esce e mi chiude il form come mai???
ho provato a mettere stop e return al posto di end ma poi lo blocca...

grazie


Come già ti avevo anticipato in un post precedente end in VBA termina la macro e i valori restano visibili sul foglio Excel. In VB6 end termina il programma e i valori scritti sulle text non sono più consultabili.
Visto che l'end è all'interno di una funzione ricorsiva e che viene attivato dal risultato di una funzione che viene lanciata solo quando dimensione è uguale a uno, aggirare il problema non è banale.

La prima idea che mi è venuta in mente è dichiarare una variabile booleana pubblica:
Dim fatto As Boolean
poi quando dimensione è uguale a uno lanciare la funzione che imposta fatto.
Fatto evita di eseguire la ricorsione mentre viene completato il ciclo.
Sub permutazioni(vettore() As Variant, dimensione As Long, n As Long)

    Dim i As Long
    If fatto Then Exit Sub ' termina la ricorsione
      
    If dimensione = 1 Then
        fatto = risultato(vettore) ' memorizzo in fatto il valore booleano ritornato
        Exit Sub
    End If

    For i = 1 To dimensione
        Call permutazioni(vettore(), dimensione - 1, n)
        If dimensione Mod 2 = 1 Then
            Call Scambio(vettore(), 1, dimensione)
        Else
            Call Scambio(vettore(), i, dimensione)
        End If
    Next

End Sub


Sicuramente scrivendo il codice da zero, l'approcio sarebbe molto diverso, ma visto che mi sono riproposto di rendere il codice VB6 più simile possibile all'Excel, direi che va bene così.
Sono molto contento di come hai completato il codice partendo dagli esempi.
Ultima modifica effettuata da Carlo 06/03 23:32
in programmazione tutto è permesso
07/03 8:46
maurizio74
Ciao Carlo,

onestamente ne avevo provate parecchie ma questa della variabile booleana proprio no....

diciamo che funziona tutto o quasi nel senso che nel mio progetto

quando premo canc o quando premo nuovamente il tasto solve, il programma non riparte.
ho provato a mettere command1.setfocus ma non va...

ti allego l'exe

Grazie 6 stato prezioso per la mia poca esperienza...
Ultima modifica effettuata da maurizio74 07/03 13:49
aaa
07/03 16:39
Carlo
Postato originariamente da maurizio74:
quando premo canc o quando premo nuovamente il tasto solve, il programma non riparte.


Devi azzerare la variabile booleana, se non lo fai quando ripremi solve, il ciclo si completa senza permutazioni..

Private Sub Command1_Click()

    command1.SetFocus
    Dim i As Long
    Dim arr(1 To 5) As Variant

    fatto = False
    
    For i = 1 To 5
        arr(i) = i
    Next
    
    Call permutazioni(arr, 5, 5)
    
End Sub
Ultima modifica effettuata da Carlo 07/03 16:42
in programmazione tutto è permesso
07/03 17:25
maurizio74
Ciao Carlo,


grazie ancore per le tue delucidazioni adesso funziona tutto!!!

infatti io avevo messo command1.setfocus

ma giustamente come hai indicato tu, non avevo azzerato con:

fatto = False...

Grazie ancora e alla prossima:k::k::k:
aaa
07/03 18:50
Carlo
Postato originariamente da maurizio74:
infatti io avevo messo command1.setfocus


command1.setfocus, serve per dare lo stato attivo (fuoco) a command1 (il bottone solve)

Considerato che il bottone quando lo clicchi prende il fuoco, command1.setfocus messo lì, non serve a nulla. :rofl:
Ultima modifica effettuata da Carlo 07/03 18:51
in programmazione tutto è permesso
07/03 18:59
maurizio74
Ok... visto che è superfluo lo toglieremo...
Grazie ancora....
aaa