La procedura bbSort lavora su stringhe, non su “data”
Per farle gestire le date bisogna fare alcuni interventi:
-definire una variabile noSort as Boolean a livello di modulo, usata per bloccare la bbSort durante la inizializzazione della form
-bisogna rimediare al fatto che, nella Transpose, il vba copi i valori non (anche) il tipo dati
In codice:
1) Riga Modificata con l’aggiunta di noSort:
- Codice: Seleziona tutto
Private sArr(), iSort As Long, noSort As Boolean 'MMMM
2) Procedura modificata:
- Codice: Seleziona tutto
Private Sub UserForm_Initialize() 'MMMMM
Dim sArr(), SRan As Range
'
noSort = True
'
Set DBBase = Sheets("film").Range("D8") '<<< L'inizio del database
DBLargh = 6 '<<< Quante colonne esaminare
Set oPos = Sheets("cerca").Range("D7") '<<< Dove scrivere i risultati filtrati
'
Set SRan = Range(DBBase, DBBase.End(xlDown).Offset(0, DBLargh - 1)) 'This is the Row Source
Me.OptionButton1 = True
'Set SRan = Range(Range("B2"), Range("B2").End(xlDown).End(xlToRight))
ReDim sArr(1 To SRan.Rows.Count, 1 To SRan.Columns.Count)
sArr = SRan.Value
sArr = bbSort(sArr)
Me.ListBox1.List = sArr
noSort = False
End Sub
3) Procedura modificata:
- Codice: Seleziona tutto
Function bbSort(ByVal lArr) As Variant 'MMMM
Dim tTmp
If noSort Or Me.TextBox1.Value = " " Then bbSort = lArr: Exit Function 'exit senza Sort
'Ripristina typenames:
For i = LBound(sArr) To UBound(sArr)
For j = LBound(sArr, 2) To UBound(sArr, 2)
lArr(j, i) = sArr(i, j)
Next j
Next i
'
On Error Resume Next
UB2 = UBound(lArr, 2)
On Error GoTo 0
If iSort < 50 And UB2 > 1 Then
lb0 = LBound(lArr)
For i = lb0 To UBound(lArr) - 1
For j = i + 1 To UBound(lArr)
If (lArr(i, lb0 + iSort)) > (lArr(j, lb0 + iSort)) Then 'eliminato UCase !!
For k = LBound(lArr, 2) To UBound(lArr, 2)
tTmp = lArr(j, k)
lArr(j, k) = lArr(i, k)
lArr(i, k) = tTmp
Next k
End If
Next j
Next i
End If
bbSort = lArr
End Function
Sinceramente e' diventato poco lineare, trattandosi di una realizzazione fatta per un utente, adattata per un altro, modificata per un altro, adattata per te... Insomma alla prossima revisione mi converrà ripensare tutto!