Combobox sin registros duplicados en Excel VBA

Tengo un combobox1 que se carga al iniciar el libroprueba.xlsm, este combobox1 al elegir un dato a su vez me carga otro combobox2 con esta instrucción:

Private Sub Combobox1_Change()

Dim i As Integer

Dim libro As Workbook

Combobox2.Clear

Set libro = Workbooks.Open("libroprueba.xlsm")
With libro.Sheets("hoja1")

For i = 2 To .Range("P" & Rows.Count).End(xlUp).Row
If .Cells(i, 2).Value = combobox1.Value Then
combobox2.AddItem .Cells(i, 16).Value
End If
'Next i

End With

libro.close

End Sub

Mi problema es que el combobox2 me esta cargando con registros repetidos...¿Cómo puedo modificar esta macro para que no se repitan dichos registros?

2 respuestas

Respuesta
2

Te anexo el código actualizado, también agrega la macro "agregar" en el mismo código del formulario

Private Sub Combobox1_Change()
    Dim i As Integer
    Dim libro As Workbook
    ComboBox2.Clear
    Set libro = Workbooks.Open("libroprueba.xlsm")
    With libro.Sheets("hoja1")
        For i = 2 To .Range("P" & Rows.Count).End(xlUp).Row
            If .Cells(i, 2).Value = ComboBox1.Value Then
                Call agregar(ComboBox2, .Cells(i, 16).Value)
            End If
        Next i
    End With
    libro.Close
End Sub
'
Sub agregar(combo As ComboBox, dato As String)
'por.DAM agrega los item únicos y en orden alfabético
    For i = 0 To combo.ListCount - 1
        Select Case StrComp(combo.List(i), dato, vbTextCompare)
            Case 0: Exit Sub 'ya existe en el combo y ya no lo agrega
            Case 1: combo.AddItem dato, i: Exit Sub 'Es menor, lo agrega antes del comparado
        End Select
    Next
    combo.AddItem dato 'Es mayor lo agrega al final
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Hola Dante, primero que todo gracias por tu pronta respuesta, agregue la macro nueva tal cual como me indicas pero al momento de ejecutar, me aparece el mensaje

Error de Compilación:

"No se ha definido Sub o Function"

También probé agregándola como módulo pero me aparece lo mismo, debo modificarle algo? O me puedes indicar que debo hacer...Muchas gracias nuevamente

Revisa bien ambas macros

                Call agregar(ComboBox2, .Cells(i, 16).Value)
Sub agregar(combo As ComboBox, dato As String)

En ambas se debe llamar agregar

¿O dime qué le cambiaste al código?

Respuesta
1

Esto puede llegar a aportar algo más

https://youtu.be/sWrUt9kItsg

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas