UniversoExcelForo

Respuesta a consultas.
Fecha de creación: 09.Abril.2012

Fundadores: Wibly,Tyno,Servando,Sakkar,Rosendo2,RMaximo,Railar,Mcoronel,Ioyama,Igtelo,Hugotron,Drochar,Dedos,Alberto,Adolfo

No se pueden hacer consultas de Excel o VBA por mensaje privado.
Utiliza el botón buscar del foro y te ahorras tiempo para obtener "ayuda".

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

1RESUELTO Omitir duplicados en combobox el 04/06/14, 04:19 pm

raptor


Estimados usuarios de este foro, estoy buscando una forma de aumentar una linea que evite cargar los duplicados en el combobox, ya intente algunas formas, pero no me queda del todo bien. ¿Podrían darme una mano?. Muchas gracias por su atención


Private Sub ComboBox1_Change()

dato = ComboBox1.Value
gama = TextBox1.Value
stock = TextBox3.Value
descripcion = TextBox8.Value

Set busco = Sheets("ENTRADAS").Range("A:A").Find(dato, LookIn:=xlValues, lookat:=xlWhole)

If Not busco Is Nothing Then
ComboBox1 = busco.Offset(0, 0) 
TextBox1 = busco.Offset(0, 1) 
TextBox8 = busco.Offset(0, 2) 
TextBox3 = busco.Offset(0, 10) 


ComboBox1 = ""
TextBox1 = ""
TextBox8 = ""
TextBox3 = ""

End If

End Sub




Private Sub UserForm_Initialize()

Sheets("ENTRADAS").Unprotect
 Dim uf As Long
 Dim cel As Range
With Sheets("ENTRADAS")
    uf = .Range("A" & .Rows.Count).End(xlUp).Row
    .Range("A8:M" & uf).AutoFilter 10, ""
    ComboBox1.Clear
    For Each cel In .Range("A9:A" & uf).SpecialCells(xlCellTypeVisible)
        ComboBox1.AddItem cel.Value
    Next
    .Range("A8:M" & uf).AutoFilter
End With


Sheets("SALIDAS").Select

ComboBox1.SetFocus

End sub

2RESUELTO Re: Omitir duplicados en combobox el 04/06/14, 04:31 pm

tyno


Hola raptor.
Te paso una archivo de ejemplo. En este caso se trata de cargar valores únicos en un combobox de un formulario pero el principio es el mismo si es para un combobox en una Hoja Excel.

Saludos
Archivos
ejemplo datos unicos combobox.zip
No tienes los permisos para descargar los archivos.
(10 KB)

3RESUELTO Re: Omitir duplicados en combobox el 04/06/14, 04:49 pm

raptor


El problema es que  en el  evento initialize manejo un código ya establecido, me confunde mezclarlos, por eso buscaba una linea o instrucción que ayudará a evitar cargar los duplicados.

Por ejemplo intente anexar este código con el que manejo;

dim x,p as long

x = ActiveCell.Row
p = Application.WorksheetFunction.CountIf(Range("A9:A" & x), _
ActiveCell)
If p = 1 Then
ComboBox1.AddItem ActiveCell
End If

Pero como comento no he encontrado la forma de adecuarlo, porque existen cel.additem y activecell.additem y no me resulta.

4RESUELTO Re: Omitir duplicados en combobox el 04/06/14, 05:56 pm

tyno


Hola raptor.
El hecho de que ya tengas un código en Initialize no es problema para agregar la instrucción que te pase como ejemplo, o todas las que quieras.
También la puedes agregar en Private Sub UserForm_Activate() que funciona casi igual que Private Sub UserForm_Initialize()
En todo caso para separar las instrucciones en Private Sub UserForm_Initialize() utiliza algún carácter, por ejmplo: '************************************

Esta macro que te pasé utiliza el método Collection el cual no admite duplicados por eso interactua con On Error Resume Next. 

Dicha macro para ingresar valores únicos es efectivo y a parte te ordena los datos.


Saludos

5RESUELTO Re: Omitir duplicados en combobox el 05/06/14, 03:46 am

raptor


Hola Tyno muchas gracias estuve intentando tu segerencia y salio perfecto, no sabía de la separación de instrucciones para un evento. Me ayudaste mas de lo que pensaba, gracias otra vez. Dejo la solución:

Private Sub UserForm_Initialize()

'CARGA RANGO DEL COMBOBOX1 E INDICA LA CANTIDAD DE COLUMNAS QUE DESEA VACÍAR A LOS TEXTBOXS
 Sheets("ENTRADAS").Unprotect
 Dim uf As Long
 Dim cel As Range
With Sheets("ENTRADAS")
    uf = .Range("A" & .Rows.Count).End(xlUp).Row
    .Range("A8:M" & uf).AutoFilter 10, ""
    ComboBox1.Clear
    For Each cel In .Range("A9:A" & uf).SpecialCells(xlCellTypeVisible)
        ComboBox1.AddItem cel.Value
    Next
    .Range("A8:M" & uf).AutoFilter
End With

 '************************************
 
 On Error Resume Next
Dim valores As New Collection
Dim datos
ComboBox1.Clear

With Sheets("ENTRADAS")
For a = 9 To .Range("a65536").End(xlUp).Row
valores.Add .Cells(a, 1).Value, CStr(.Cells(a, 1).Value)
Next a
End With

For i = 1 To valores.Count - 1
For j = i + 1 To valores.Count
If valores(i) > valores(j) Then
ref1 = valores(i)
ref2 = valores(j)
valores.Add ref1, before:=j
valores.Add ref2, before:=i
valores.Remove i + 1
valores.Remove j + 1
End If
Next j
Next i

For Each datos In valores
ComboBox1.AddItem datos
Next datos

Sheets("SALIDAS").Select

ComboBox1.SetFocus

End Sub

6RESUELTO Re: Omitir duplicados en combobox el 05/06/14, 09:00 am

tyno


Que bueno que pudieras resolver la macro!

Pero ahora que veo el código que has pasado como que me parece que algo no tiene sentido porque estas "pisando" la primera instrucción con la instrucción que te he pasado:

'CARGA RANGO DEL COMBOBOX1 E INDICA LA CANTIDAD DE COLUMNAS QUE DESEA VACÍAR A LOS TEXTBOXS
 Sheets("ENTRADAS").Unprotect
 Dim uf As Long
 Dim cel As Range
With Sheets("ENTRADAS")
    uf = .Range("A" & .Rows.Count).End(xlUp).Row
    .Range("A8:M" & uf).AutoFilter 10, ""
    ComboBox1.Clear
    For Each cel In .Range("A9:A" & uf).SpecialCells(xlCellTypeVisible)
        ComboBox1.AddItem cel.Value
    Next
    .Range("A8:M" & uf).AutoFilter
End With

Aquí limpias (clear) y cargas (additem) el combobox1  con las celdas visibles del rango A9:A..., pero inmediatamente con esto:

On Error Resume Next
Dim valores As New Collection
Dim datos
ComboBox1.Clear


With Sheets("ENTRADAS")
For a = 9 To .Range("a65536").End(xlUp).Row
valores.Add .Cells(a, 1).Value, CStr(.Cells(a, 1).Value)
Next a
End With


For i = 1 To valores.Count - 1
For j = i + 1 To valores.Count
If valores(i) > valores(j) Then
ref1 = valores(i)
ref2 = valores(j)
valores.Add ref1, before:=j
valores.Add ref2, before:=i
valores.Remove i + 1
valores.Remove j + 1
End If
Next j
Next i


For Each datos In valores
ComboBox1.AddItem datos
Next datos

Vuelves a limpiar el combobox1 con los datos que habías cargado antes y lo cargas nuevamente con valores únicos con la instrucción que te pasé.

Por eso me parece que lo que sobra es la primera parte.




Que conste que lo de los caracteres ('****)para separar las instrucciones es solo una idea por una cuestión de prolijidad y es práctico para ubicar las distintas instrucciones dentro de un evento, o sea no afecta en nada una macro.



Saludos

7RESUELTO Re: Omitir duplicados en combobox el 05/06/14, 03:47 pm

raptor


Es verdad tyno, si bien es cierto que en el primer código solamente carga datos con un filtro, con el código que me proporcionaste carga solamente una vez los valores y esto es prácticamente los mismo si lo vemos a fondo. Gracias por el dato maestro.

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.