Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

eliminar duplicados en una listbox

Estas en el tema de eliminar duplicados en una listbox en el foro de Visual Basic clásico en Foros del Web. Hola a todos l@s chi@s del foro, tengo una rutina en Visual basic con la cual en un form agrego nombres a una listbox teniendo ...
  #1 (permalink)  
Antiguo 11/08/2006, 17:57
 
Fecha de Ingreso: noviembre-2003
Mensajes: 127
Antigüedad: 20 años, 5 meses
Puntos: 1
eliminar duplicados en una listbox

Hola a todos l@s chi@s del foro, tengo una rutina en Visual basic con la cual en un form agrego nombres a una listbox teniendo como origen un archivo de excel. Pero aveces algunos nombres estan repetidos; así que buscaba una rutina q elimine los duplicados del listbox y conseguí la siguiente:

Public Sub Duplicados(listbox As listbox)
Dim Search1 As Long
Dim Search2 As Long
Dim KillDupe As Long
KillDupe = 0
For Search1& = 0 To listbox.ListCount - 1
For Search2& = Search1& + 1 To listbox.ListCount - 1
KillDupe = KillDupe + 1
If listbox.List(Search1&) = listbox.List(Search2&) Then
listbox.RemoveItem Search2&
Search2& = Search2& - 1
End If
Next Search2&
Next Search1&
End Sub


El problema es q funciona siempre y cuando el número de items en la listbox sea pequeño (4 o 5)pero si es de 10 o mas la rutina no funciona y hasta ahora no encuentro el porque; espero me ayuden.
Gracias.

David
  #2 (permalink)  
Antiguo 12/08/2006, 07:36
 
Fecha de Ingreso: abril-2004
Mensajes: 192
Antigüedad: 20 años
Puntos: 0
Hola te paso un ejemplo:

Código:
Dim Arreglo() As String
Dim TempArray() As String

Private Sub Command1_Click()

    Dim x As Integer, x2 As Integer, y As Integer
    Dim z As Integer, Elemento As Variant
    List1.Clear
   

        ReDim Arreglo(6)
        Arreglo(0) = "1"
        Arreglo(1) = "2"
        Arreglo(2) = "3"
        Arreglo(3) = "3"
        Arreglo(4) = "3"
        Arreglo(5) = "2"
        Arreglo(6) = "1"
        For i = LBound(Arreglo) To UBound(Arreglo)
          
          ReDim Preserve TempArray(i)
          
          TempArray(i) = Arreglo(i)
        
        Next
    
    For x = 0 To UBound(Arreglo)
        z = 0

        For y = 0 To UBound(Arreglo)
            
            If Arreglo(x) = TempArray(z) And y <> x Then
                
                Arreglo(y) = ""
                Nduplicado = Nduplicado + 1
            End If
            z = z + 1
        Next y
    Next x
    For Each Elemento In Arreglo
        
        If Elemento <> "" Then List1.AddItem Elemento
    Next
    MsgBox "Elementos duplicados: " & Nduplicado, vbInformation
    
End Sub

------------------
__________________
Recursos visual basic
  #3 (permalink)  
Antiguo 24/11/2011, 00:01
 
Fecha de Ingreso: noviembre-2009
Mensajes: 315
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: eliminar duplicados en una listbox

Cita:
Iniciado por luciano Ver Mensaje
Hola te paso un ejemplo:

Código:
Dim Arreglo() As String
Dim TempArray() As String

Private Sub Command1_Click()

    Dim x As Integer, x2 As Integer, y As Integer
    Dim z As Integer, Elemento As Variant
    List1.Clear
   

        ReDim Arreglo(6)
        Arreglo(0) = "1"
        Arreglo(1) = "2"
        Arreglo(2) = "3"
        Arreglo(3) = "3"
        Arreglo(4) = "3"
        Arreglo(5) = "2"
        Arreglo(6) = "1"
        For i = LBound(Arreglo) To UBound(Arreglo)
          
          ReDim Preserve TempArray(i)
          
          TempArray(i) = Arreglo(i)
        
        Next
    
    For x = 0 To UBound(Arreglo)
        z = 0

        For y = 0 To UBound(Arreglo)
            
            If Arreglo(x) = TempArray(z) And y <> x Then
                
                Arreglo(y) = ""
                Nduplicado = Nduplicado + 1
            End If
            z = z + 1
        Next y
    Next x
    For Each Elemento In Arreglo
        
        If Elemento <> "" Then List1.AddItem Elemento
    Next
    MsgBox "Elementos duplicados: " & Nduplicado, vbInformation
    
End Sub

------------------
aunque tarde pero me ubiese servido un poco de explicacion xD 3:00 AM ajajaja
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 01:14.