Ho provato a modificare la Function modificando LBound con Ubound e
viceversa ma senza risultato.
Option Explicit
*******************
Private Sub CommandButton4_Click()
Me.ListBox1.List = BoobleSort(Me.ListBox1.List, 3)
End Sub
*************************
Private Sub UserForm_Initialize()
Dim v(2, 8)
v(0, 0) = ""
v(0, 1) = ""
Me.ListBox1.List = v
CommandButton4_Click
****************************
Function BoobleSort(ByRef ArrB As Variant, Optional colSort As Long = 0)
Dim i As Long, a As Long, v
Dim f As Long
Dim ArrA
Debug.Print LBound(ArrB)
ArrA = ArrB
For i = 0 To UBound(ArrA) - 1
For a = i To UBound(ArrA)
If ArrA(i, colSort) > ArrA(a, colSort) Then
For f = 0 To UBound(ArrA, 2)
v = ArrA(i, f)
ArrA(i, f) = ArrA(a, f)
ArrA(a, f) = v
Next
End If
Next
Next
BoobleSort = ArrA
End Function
Grazie 1000
--
Distinti saluti
Giorgio
> Questo post rilasciatomi gentilmente da Roberto mi ordina la ListBox1 in
> ordine crescente
> Come fare per ordinare in ordine decrescente'
>
> Ho provato a modificare la Function modificando LBound con Ubound e
> viceversa ma senza risultato.
>
basta modificare > con < ...
ecco comunque la funzione con l'aggiunta di un parametro
che indica se ordinare in modo crescente o decrescente
nell'esempio qui sotto cliccando successivamente sul
commandbutton1 si otterrà l'ordinamento
crescente/decrescente in base alla prima colonna
ad ogni click ...
Option Explicit
'una listbox
'2 commandbutton
Private Sub CommandButton1_Click()
'al primo click ordine crescente
'al secondo decrescente
Static bSort As Boolean
bSort = bSort Xor True
Me.ListBox1.List = BoobleSort(Me.ListBox1.List, , bSort)
End Sub
Private Sub CommandButton2_Click()
Me.ListBox1.List = BoobleSort(Me.ListBox1.List, 1)
End Sub
Private Sub UserForm_Initialize()
Dim v(2, 1)
v(0, 0) = "roberto"
v(0, 1) = 1
v(1, 0) = "nur"
v(1, 1) = 2
v(2, 0) = "bruno"
v(2, 1) = 3
Me.ListBox1.List = v
End Sub
Function BoobleSort( _
ByRef ArrB As Variant, _
Optional ByVal colSort As Long = 0, _
Optional ByVal bSort As Boolean)
Dim i As Long, a As Long, v
Dim f As Long
Dim arrA
Debug.Print LBound(ArrB)
arrA = ArrB
For i = 0 To UBound(arrA) - 1
For a = i To UBound(arrA)
If bSort Then
If arrA(i, colSort) > arrA(a, colSort) Then
For f = 0 To UBound(arrA, 2)
v = arrA(i, f)
arrA(i, f) = arrA(a, f)
arrA(a, f) = v
Next
End If
Else
If arrA(i, colSort) < arrA(a, colSort) Then
For f = 0 To UBound(arrA, 2)
v = arrA(i, f)
arrA(i, f) = arrA(a, f)
arrA(a, f) = v
Next
End If
End If
Next
Next
BoobleSort = arrA
End Function
saluti
r
--
Come e dove incollare il codice:
http://www.rondebruin.nl/code.htm
Il mio ultimo lavoro ...
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html
--
Distinti saluti
Giorgio