Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Collection - Ordem alfabética [RESOLVIDO]

Dúvidas gerais sobre Excel
Rafa - Info
Colaborador
Colaborador
Mensagens: 24
Registrado em: Ter Nov 16, 2010 6:33 pm

Collection - Ordem alfabética [RESOLVIDO]

Mensagem por Rafa - Info »

Bom dia pessoal,

É possível fazer um collection num combobox ordenando na sua visualização? Tenho uma série de registros por nome, mas na visualização fica difícil com o modo collection que possuo.

Agradeço desde já a atenção.

Abs.
Editado pela última vez por Rafa - Info em Dom Mar 06, 2011 10:22 am, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Collection - Ordem alfabética

Mensagem por Mauro Coutinho »

Bya Sistema de Busca :

Ordenar Dados nos Controles
viewtopic.php?f=6&t=416&p=2497&hilit=ordenar#p2497

[]s


Rafa - Info
Colaborador
Colaborador
Mensagens: 24
Registrado em: Ter Nov 16, 2010 6:33 pm

Re: Collection - Ordem alfabética

Mensagem por Rafa - Info »

Bom exemplo Mauro. Parabéns!

Mas então, tentei implementar no Collection e não consegui, neste teu exemplo ele repete os nomes e estou precisando usar sem repetições e de forma organizada.

Veja os dois sendo chamados no Private Sub UserForm_Initialize()

Código: Selecionar todos

Private Sub Collection_ComboBox1()
  
    Dim ULTLINHA, K As Long
    Dim OCOLLECTION As New Collection
    Dim VARVALUE As Variant


 ULTLINHA = Worksheets("Plan1").Range("A65536").End(xlUp).Row
    
On Error Resume Next
For Each VARVALUE In Worksheets("Plan1").Range("A2:A" & ULTLINHA)
    OCOLLECTION.Add VARVALUE, VARVALUE
Next
    
For K = 1 To OCOLLECTION.Count
        ComboBox1.AddItem OCOLLECTION.Item(K)
Next K

End Sub

Código: Selecionar todos

Private Sub Ordenar_ComboBox1()
   Dim iForsta, iSista As Integer
    Dim i, j As Integer
    Dim sTemp As String
    Dim sCol As Integer
    Dim ULTLINHA As Long
    
    ULTLINHA = Worksheets("Plan1").Range("A65536").End(xlUp).Row
    
    Set lastRow = Worksheets("Plan1").Range("A2:A" & ULTLINHA)
    'adiciona dados
    With ComboBox1
        .ColumnCount = 2
        'Me.ComboBox1.AddItem Plan1.Range("A" & i)
        .List = lastRow.Cells.Value
    End With
    
    iForsta = 0
    iSista = ComboBox1.ListCount - 1
    
   For i = iForsta To iSista - 1
        For j = i + 1 To iSista
            If ComboBox1.List(i, sCol) > ComboBox1.List(j, sCol) Then
                sTemp = ComboBox1.List(j, sCol)
                ComboBox1.List(j, sCol) = ComboBox1.List(i, sCol)
                ComboBox1.List(i, sCol) = sTemp
            End If
        Next j
    Next i

  
  
    
End Sub
Como integrar os dois?

Abs.


Avatar do usuário
joseA
Jedi
Jedi
Mensagens: 1048
Registrado em: Qui Out 22, 2009 7:22 am
Localização: Cel. Fabriciano - MG

Re: Collection - Ordem alfabética

Mensagem por joseA »

Não sei se entendi, vc quer carregar o ComboBox com registros únicos e ordenados...

Se for tente assim:

Código: Selecionar todos

Private Sub UserForm_Initialize()
Call RegistrosUnicos
Call Ordenar
End Sub

Sub RegistrosUnicos()
    Dim ULTLINHA, K As Long
    Dim OCOLLECTION As New Collection
    Dim VARVALUE As Variant


ULTLINHA = Worksheets("Plan1").Range("A65536").End(xlUp).Row
    Me.ComboBox1.Clear
On Error Resume Next
For Each VARVALUE In Worksheets("Plan1").Range("A2:A" & ULTLINHA)
    OCOLLECTION.Add VARVALUE, VARVALUE
Next
    
For K = 1 To OCOLLECTION.Count
        ComboBox1.AddItem OCOLLECTION.Item(K)
Next K

End Sub
Sub Ordenar()
Dim iForsta, iSista As Integer
Dim i, j As Integer
Dim sTemp As String

iForsta = 0
iSista = ComboBox1.ListCount - 1

For i = iForsta To iSista - 1
    For j = i + 1 To iSista
        If ComboBox1.List(i) > ComboBox1.List(j) Then
            sTemp = ComboBox1.List(j)
            ComboBox1.List(j) = ComboBox1.List(i)
            ComboBox1.List(i) = sTemp
        End If
    Next j
Next i

End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Collection - Ordem alfabética

Mensagem por Mauro Coutinho »

Rafa, o link que sugeri como o proprio nome diz é referente a "Ordenar Dados nos Controles" que foi o que você solicitou, e não carrega-los com valores únicos, era somente para aproveitar a rotina de Ordenação.

Poderíamos fazer de diversas formas, mas o que o JOSÉ postou eu acho o ideal, pois mantemos a rotina Sub Ordenar() independente que apesar de na mesma estar se referindo ao ComboBox1 podemos com alguns ajustes de Variáveis deixa-la para ser utiizada em outros Controles "ComboBox".

[]s


Rafa - Info
Colaborador
Colaborador
Mensagens: 24
Registrado em: Ter Nov 16, 2010 6:33 pm

Re: Collection - Ordem alfabética

Mensagem por Rafa - Info »

Maravilha pessoal, o exemplo do JoseA deu certo, tava quebrando a quebeça em deixar tudo numa única rotina, mas blza, funcionou 100%.
Então Mauro, não citei no corpo da mensagem pois achei que me referindo ao "objeto Collection" já seria sem repetições, e colocando ele em ordem alfabética. Concerteza a citação sua com o exemplo do JoseA chegou a este resultado, que era o pretendido.

O conhecimento de ambos estão acima e continuem assim, sempre colaborando.

Obrigado.

Abs.


Avatar do usuário
joseA
Jedi
Jedi
Mensagens: 1048
Registrado em: Qui Out 22, 2009 7:22 am
Localização: Cel. Fabriciano - MG

Re: Collection - Ordem alfabética

Mensagem por joseA »

Rafa - Info escreveu:...tava quebrando a quebeça em deixar tudo numa única rotina...
Se vc quer juntar as duas rotinas em uma bastaria acrescentar as variáveis da 2ª à 1ª e acrescentar a rotina que ordena no final...

Mas o resultado seria o mesmo.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder