Jump to content
dpirondi

Classificar listview Excel Vba

Recommended Posts

dpirondi

olá, alguém poderia me ajudar se tem como eu classificar em data crescente os dados de um listview? pois utilizo um listview para listar informações de entregas de pedidos por data, mas não fica classificado por data crescente. Tem como fazer isso?

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

Mete este código numa classe

Implements IComparer
    Private Coluna As Integer
    Private OrdemSort As SortOrder

    Public Sub New(ByVal ColunaClique As Integer, ByVal _
    OrdemSort As SortOrder)

        Coluna = ColunaClique
        Me.OrdemSort = OrdemSort

    End Sub

    Public Function Compare(ByVal x As Object, ByVal y As Object) _
    As Integer Implements System.Collections.IComparer.Compare

        Dim OrdemItem As Integer
        Dim DataValida As DateTime
        Dim NumeroValido As Double

        If DateTime.TryParse(CType(x, ListViewItem).SubItems(Coluna).Text, _
        DataValida) Then

            If DateTime.TryParse(CType(y, ListViewItem).SubItems(Coluna).Text, _
            DataValida) Then

                OrdemItem = DateTime.Compare(CType(x, ListViewItem).SubItems _
                (Coluna).Text, CType(y, ListViewItem).SubItems(Coluna).Text)

            Else
                OrdemItem = -1
            End If

        ElseIf Double.TryParse(CType(x, ListViewItem).SubItems(Coluna) _
            .Text, NumeroValido) Then

            If Double.TryParse(CType(y, ListViewItem).SubItems(Coluna).Text _
            , NumeroValido) Then

                If Convert.ToDouble(CType(x, ListViewItem).SubItems(Coluna).Text) _
                = Convert.ToDouble(CType(y, ListViewItem).SubItems(Coluna).Text) Then

                    OrdemItem = 0
                ElseIf Convert.ToDouble(CType(x, ListViewItem).SubItems _
                (Coluna).Text) > Convert.ToDouble(CType(y, ListViewItem). _
                SubItems(Coluna).Text) Then

                    OrdemItem = 1
                Else
                    OrdemItem = -1
                End If
            Else
                OrdemItem = -1
            End If
        Else
            If CType(x, ListViewItem).SubItems(Coluna).Text.Trim = "" Then
                OrdemItem = 1
            Else
                OrdemItem = String.Compare(CType(x, ListViewItem). _
                SubItems(Coluna).Text, CType(y, ListViewItem).SubItems _
                (Coluna).Text)

            End If
        End If

        'INVERTE O RETORNO EM CASO DE ORDEM DECRESCENTE
        If OrdemSort = SortOrder.Descending Then
            OrdemItem *= -1
        End If

        Return OrdemItem

    End Function

Depois para ordenar fazes:

ListView1.ListViewItemSorter = New aqui_alteras_para_o_nome_da_classe(0, ListView1.Sorting)

Este código foi retirado do site www.programandovbnet.blogspot.pt


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
dpirondi

Olá, obrigado pela sua resposta, mas não consegui fazer com que funcione, pois tenho um conhecimento pequeno em excel vba e não sei trabalhar com classes. Não tem como colocar esse código dentro do listview? como faço?

segue abaixo um código que tenho utilizado para classificar o listview, mas nas colunas de datas ele classifica primeiro pelo dia e depois pelo mês, ou seja, se tenho as datas: 01/01/2012, 03/02/2012 e 02/03/2012 depois de classificado fica: 01/01/2012, 02/03/2012 e 03/02/2012.  Tem como acrescentar algo no código que tenho abaixo?

Private Sub ListView2_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)

ListView2.Sorted = False

    ListView2.SortKey = ColumnHeader.Index - 1

   

    If ListView2.SortOrder = lvwAscending Then

        ListView2.SortOrder = lvwDescending

        Else

        ListView2.SortOrder = lvwAscending

    End If

ListView2.Sorted = True

End Sub

Share this post


Link to post
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.