Combobox sin repetir dato y con celdas vacías

Espero logres ayudarme si te es posible con esta duda, veras tengo un userform con 2 combobox uno para mostrarme las hojas de calculo y otro para mostrarme lo valores de las celdas de la columna "B" a partir del B3 sin repetir los valores..:
.
Private Sub ComboBox1_Enter()
'En caso de error, que continúe
On Error Resume Next
'Esto se producirá cuando nos
'situemos sobre el combobox1
'antes quitaremos todo lo que haya en el combobox1
ComboBox1.Clear
'Vamos a llenar dinámicamente el combobox
'con los nombres de las hojas
For i = 1 To Sheets.Count
'Añadimos los nombres de las hojas al combobox
ComboBox1.AddItem Sheets(i).Name
Next
End Sub
.
Private Sub ComboBox2_Enter()
On Error Resume Next
'Ocultamos el procedimiento
Application.ScreenUpdating = False
'Limpiamos lo que haya
ComboBox2.Clear
'Pasamos el dato de la hoja, a una variable
hoja_elegida = ComboBox1.List(ComboBox1.ListIndex)
'seleccionamos esa hoja
Sheets(hoja_elegida).Select
'seleccionamos la cela A1
.
Range("b3").Select
'Llenamos el combo con los datos del combobox1
'para lo cual supondremos que los datos de cada
'hoja están a partir desde A1 hacia abajo, y
'hasta encontrar una fila vacía
Do While Not IsEmpty(ActiveCell)
'si el dato no está repetido, lo añadimos
'a la variable "datos", separando los
'elementos por comas
If InStr(datos, ActiveCell) = 0 Then
'añadimos el dato
datos = datos & "," & ActiveCell
End If
'bajamos una fila
ActiveCell.Offset(1, 0).Select
Loop
'eliminamos la primera coma
datos = Right(datos, Len(datos) - 1)
'separamos cada elemento por la coma
dato_individual = Split(datos, ",")
'recorremos todos los elementos
For i = 0 To UBound(dato_individual)
'Añadimos los elementos
ComboBox2.AddItem dato_individual(i)
Next
End sub

MI DUDA: Como modifico el código del combobox2 para que me lea solamente el rango "B3:B41" y que se vea en el combo todos los valores así hayan celdas vacías, algo así:

|B|
Vacía
Pedro
Manuel
Vacía
Manuel
Juan
Jose
En el combobox debería verse:
Pedro
Manuel
Juan
Jos
e

NOTA: este código que anote la uso para varias hojas así que puedo iniciar con la celda vacía como puede que no, pero con la que tengo no muestra nada si la celda que inicia esta vacía y lo hace solo hasat la celda vacía =/

1 respuesta

Respuesta
1
Ufff ... está difícil. Dame el fin de semana.
je je ok.
Intente usar
Do While IsEmpty (ActiveCells)
ActiveCell.Offset(1, 0).Select
Loop
antes de Do while not IsEmpty...
pero nada y tambien
If Activecells = "" then
ActiveCell.Offset(1, 0).Select
... etc
Y nada je je
Solucionado
Sólo debes cambiar el combobox2.
Recuerda valorar la respuesta y finalizar la pregunta
'-----------------------------------------------------------------------------
'-----------------------------------------------------------------------------
Private Sub ComboBox2_Enter()
On Error Resume Next
'Ocultamos el procedimiento
Application.ScreenUpdating = False
'Limpiamos lo que haya
ComboBox2.Clear
'Pasamos el dato de la hoja, a una variable
hoja_elegida = ComboBox1.List(ComboBox1.ListIndex)
'seleccionamos esa hoja
Sheets(hoja_elegida).Select
'seleccionamos la cela A1
Range("b3").Select
'Llenamos el combo con los datos del combobox1
'para lo cual supondremos que los datos de cada
'hoja están a partir desde A1 hacia abajo, y
'hasta encontrar una fila vacía
Do Until ActiveCell.Address = "$B$42"
'si el dato no está repetido, lo añadimos
'a la variable "datos", separando los
'elementos por comas
If InStr(datos, ActiveCell) = 0 Then
'añadimos el dato
datos = datos & "," & ActiveCell
End If
'bajamos una fila
ActiveCell.Offset(1, 0).Select
Loop
'eliminamos la primera coma
datos = Right(datos, Len(datos) - 1)
'separamos cada elemento por la coma
dato_individual = Split(datos, ",")
'recorremos todos los elementos
For i = 0 To UBound(dato_individual)
'Añadimos los elementos
ComboBox2.AddItem dato_individual(i)
Next
End Sub
La pregunta no admite más respuestas

Más respuestas relacionadas