Jump to content

Apresentar dados da Ordenação de uma Tabela numa ListBox Excel VBA


Antoliv

Recommended Posts

Na sequência do meu tópico Ordenar uma coluna numa listbox encontrei na net a seguinte função:

'   Esta função ordena um array multidimensional
'   Parametros
'       @TheArray - Array - Array que será ordenado
'       @Column - Integer - Por qual coluna o array será ordenado
'       @ColumnCount - Integer - O número de colunas do array
 
Public Function SortArrayMulti(ByRef TheArray As Variant, _
                                    Column, _
                                    ColumnCount)
    'Variaveis
    '----------
    Dim temp()
    Dim x, i, y, linhaCabecalho As Integer
    Dim sorted As Boolean
    
    'Dimensões do array
    '------------------
    ReDim Preserve temp(1 To UBound(TheArray, Column), 1 To ColumnCount)
 
 
    'Repetição para ordenar até o final do array
    '--------------------------------------------
    Do While Not sorted
 
        'No inicio ele está ordenado
        '--------------------------
        sorted = True
        
        
 
        'Laço que percorre as linhas
        '----------------------------
        For x = linhaCabecalho + 1 To UBound(TheArray, Column) - 1
 
            'Faz a comparação
            '----------------
            If (TheArray(x, Column) > TheArray(x + 1, Column) And TheArray(x + 1, Column) <> Empty) Then
 
                'Ando por todas as colunas
                '-------------------------
                For y = 1 To ColumnCount
                    temp(x, y) = TheArray(x + 1, y)
                Next y
 
                'Ando por todas as colunas
                '-------------------------
                For y = 1 To ColumnCount
                    TheArray(x + 1, y) = TheArray(x, y)
                Next y
 
                'Ando por todas as colunas
                '-------------------------
                For y = 1 To ColumnCount
                    TheArray(x, y) = temp(x, y)
                Next y
 
                'Passou pelo if, então não está ordenado
                '---------------------------------------
                sorted = False
 
            End If
        Next x
    Loop
 
End Function

que a chamo com o seguinte Sub:

'       Esta Sub Limpa e Preenche a ListBox ProdEfeitos Ordenada
' --------------------------------------------------------------

Private Sub LblBD_DblClick(ByVal Cancel As MSForms.ReturnBoolean)


    ' Limpa a ListBox ProdEfeitos
    ' ---------------------------
    
    ListBoxProdEfeitos.Clear
    
    ' Passa a Tabela ArrayVarlistBoxProdEfeitos para ser Ordenada pela coluna 1
    ' com 10 colunas pela função SortArrayMulti
    ' -------------------------------------------------------------------------
    
     ListBoxProdEfeitos.List() = SortArrayMulti(ArrayVarListBoxProdEfeitos, 1, 10)

        
End Sub

A qual dá-me o seguinte erro :

Run time error "381"

Could not set the list property Invalid property array index

que eu penso que tenha a ver com o TheArray da Função que começa no Index 1 e o ArrayVarListBoxProdEfeitos que começa no Index 0

Como faço para conseguir que o código funcione?

Ou seja eu quero chamar a função que me ordena a Listbox clickando na label.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.