Originariamente inviato da gotta
usando il secondo metodo nn è che potresti farmi un esempio scritto?perchè non ho capito bene
A pensarci bene, dovendo tener conto che finita la sequenza si deve ricominciare da capo, non era proprio semplicissimo, dovendo utilizzare variabili Static, ecc..

Ti posto la mia versione:

codice:
Function Random() As Integer
   Const N As Integer = 4  'ultimo numero generabile, intervallo (0...N)
   Static X(0 To N) As Integer   'il vettore con i numeri casuali
   Static pr As Integer    'l'indice progressivo del numero da restituire
   Dim i As Integer, j As Integer, s As Integer, v As Integer
   
   If pr = 0 Then
      'e' la prima chiamata o abbiamo esaurito i numeri: inizializziamo!
      For i = 0 To N
         X(i) = i    'memorizziamo in X() i numeri, per ora in ordine...
      Next
      Randomize Timer
      For v = 1 To 3    'numero di "smazzate" per mischiare per bene
         For i = 0 To N  'il numero d'ordine i lo scambiamo...
            j = Int(Rnd * (N + 1)) ' con quello j, scelto a caso
            s = X(i)
            X(i) = X(j)
            X(j) = s
         Next              'per tutti i numeri nel "mazzo"
      Next                 'ripetiamo per il numero di "smazzate"
      'OK, ora i numeri sono in ordine "casuale"
      Random = X(0)   'restituiamo il primo della lista
      pr = 1               'l'indice del prossimo da restituire
   Else
      'ci sono ancora numeri disponibili, semplicemente restituiamo quello d'indice pr
      Random = X(pr)
      pr = pr + 1    'aggiorniamo l'indice
      If pr > N Then
         'se abbiamo restituito l'ultimo, resettiamo pr per la successiva re-inizializzazione
         pr = 0
      End If
   End If
End Function
Spero che possa servirti, ciao !!!