Ho letto la procedura interessata dal malfunzionamento e, secondo me, la soluzione che ti ho suggerita ieri sera, relativamente alla dichiarazione di listaestratti come array, è irisolutiva, perchè, come pensavo il tuo problema è determinato dall'istruzione
tmp = Str$(Estrazione[indice) ; la conversione in stringa, nel tuo caso, non fornisce sempre valori di lunghezza uguale. A parte ciò puoi gestire sia l'array
Estrazione che il nuovo array
listaestratti senza pensare alla posizione dell'ultimo numero estratto nell'array:
Public Sub Numeri_MouseUp() 'accende o spegne i numeri estratti
Dim i, j As Byte 'le immancabili variabili indice :)
With Last
If .background = Colorenonestratti Then 'accende un numero
.background = Colorestratti
Estrazione.Add(.Value) 'aggiunge l'ultimo numero estratto
tmp = Str$(Estrazione[Estrazione.max])
listaestratti = listaestratti & " " & tmp
Else
.background = Colorenonestratti 'spegne un numero
i = 0
While Not bTrovato
If Estrazione[i] = .value
tmp = Estrazione[i]
For j = i To Estrazione.Max - 1
Estrazione[j] = Estrazione[j + 1] '...lo si toglie scalando i successivi
Next
Endif
Inc i
Wend
i = 0
While Not bTrovato
If listaestratti[i] = tmp
For j = i To listaestratti.max - 1
listaestratti[j] = listaestratti[j + 1]
Next
listaestratti.Remove(listaestratti.Max) 'elimina l'ultimo numero dalla lista perché ormai doppio
bTrovato = True
Endif
Inc i
Wend
Endif
' If .Value = Estrazione[Estrazione.Max] Then 'se è l'ultimo estratto...
' tmp = Str$(Estrazione[Estrazione.max])
' listaestratti = Left$(listaestratti, Len(listaestratti) - (Len(tmp) + 1)) '...e lo cancella dall'elenco
' If .value <> Estrazione[Estrazione.max] Then 'se invece si cancella un numero che non è l'ultimo...
' For i = 0 To Estrazione.Max '...lo si cerca...
' If Estrazione[i] = .value Then '...e quando trovato...
' For j = i + 1 To Estrazione.Max
' Estrazione[i] = Estrazione[j] '...lo si toglie scalando i successivi
' Next
' Break 'quando è stato trovato non serve continuare
' Endif
' Next
' tmp = Str$(.value) 'cerchiamo il numero nell'elenco...
' j = InStr(listaestratti, tmp)
' listaestratti = Left$(listaestratti, j - 1) & " " & Right$(listaestratti, Len(listaestratti) - j - Len(tmp)) '...e lo togliamo
' Endif
' Estrazione.Remove(Estrazione.Max) 'elimina l'ultimo numero dalla lista...
Endif
End With
Progestratti.text = "Numeri estratti: " & listaestratti 'visualizza l'elenco dei numeri...
totest.text = "Tot. estratti: " & Str$(Estrazione.max + 1) '...e quanti ne sono stati estratti
If Estrazione.Count = 0 Then 'nel caso si siano tolti tutti i numeri senza usare Azzera
Ultimo.Value = 0
Progestratti.text = "Numeri estratti: "
Else
Ultimo.Value = Estrazione[Estrazione.Max] 'visulizza l'ultimo numero estratto
End If
End
Io non ho provato il codice che ho buttato giù, ma penso che sia corretto; comunque, verificalo tu.