spf, o erro é porque você utiliza a Propriedade Rowsource para preencher o ListBox e uma das limitações é não aceitar Classificação direta no ListBox, quando utilizamos a Propriedade Rowsource para classificar devemos :
Classificar primeiro na Planilha e depois recarregar o Listbox.
Eu sugiro utilizar a Propriedade AddItem, faça um teste com a rotina abaixo e veja se é isto o que pretende :
Troque a Rotina que inicia o form por esta :
Private Sub UserForm_Initialize()
Dim i As Long, j As Long, k As Long
Dim compareColumn As Long
Dim cell As Range
Dim Rng As Range
'Armazenaa qde de linhas
With ThisWorkbook.Sheets("ServiçosNF")
Set Rng = .Range("A2", .Range("A2").End(xlDown))
End With
'Preenche o Listbox
For Each cell In Rng.Cells
With Me.ListBox1
.ColumnCount = 8 'Define a qde de Colunas no Listbox
.AddItem cell.Value
.List(.ListCount - 1, 1) = cell.Offset(0, 1).Value 'Coluna 1
.List(.ListCount - 1, 2) = cell.Offset(0, 2).Value 'Coluna 2
.List(.ListCount - 1, 3) = cell.Offset(0, 3).Value 'Coluna 3
.List(.ListCount - 1, 4) = cell.Offset(0, 4).Value 'Coluna 4
.List(.ListCount - 1, 5) = cell.Offset(0, 5).Value 'Coluna 5
.List(.ListCount - 1, 6) = cell.Offset(0, 6).Value 'Coluna 6
.List(.ListCount - 1, 7) = cell.Offset(0, 7).Value 'Coluna 7
End With
Next cell
'Classifica os Itens
compareColumn = 0
With ListBox1
For i = 1 To .ListCount - 1
For j = 0 To i - 1
If StrComp(.List(i, compareColumn), .List(j, compareColumn), 1) = -1 Then
Exit For
End If
Next j
.AddItem .List(i, 0), j
For k = 1 To .ColumnCount - 1
.List(j, k) = .List(i + 1, k)
Next k
.RemoveItem i + 1
Next i
End With
End Sub
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 12/11/2013 10:14 pm