Ocultar registros vacíos en un cuadro de lista

Dispongo de un cuadro de lista en una hoja Excel y desearía que no aparecieran en dicha lista los registros vacíos. ¿Se podría hacer también que salieran ordenados?

1 respuesta

Respuesta
2

En la misma macro que te dejé para Filtrar en rango auxiliar está la instrucción para ordenarla.

    With ActiveWorkbook.Worksheets("Datos").Sort
        .SetRange Range("AA2:AB" & Range("AA" & Rows.Count).End(xlUp).Row)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Si no estás utilizando ese rango solo debes ajustar las referencias. Sino me comentas y te asisto.

Sdos

Elsa

Hola Elsa

El cuadro de lista lo tengo en una hoja, no en formulario, por eso no sé como implementar el código que enviaste, a ésta nueva situación.

saludos

Se puede ejecutar al activar la hoja, al entrar al control, al salir de otro control, al actualizar la hoja Datos... depende de lo que tengas en mente para esta hoja.

Private Sub Worksheet_Activate()
'x Elsamatilde
'llena la lista con valores 'no vacíos' y ordenados de hoja Datos, col E
Application.ScreenUpdating = False
ListBox1.Clear: Range("G11") = ""
'copia col E en rgo auxiliar para ordenar
    Sheets("Datos").Range("E1:E" & Sheets("Datos").Range("E" & Rows.Count).End(xlUp).Row).Copy Destination:=ActiveSheet.Range("AA1")
    Application.CutCopyMode = False
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("AA2:AA" & Range("AA" & Rows.Count).End(xlUp).Row), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.ActiveSheet.Sort
        .SetRange Range("AA1:AA" & Range("AA" & Rows.Count).End(xlUp).Row)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A1").Select
'llena listbox con valores <> vacíos
For i = 2 To Range("AA" & Rows.Count).End(xlUp).Row
    If Range("AA" & i) <> "" Then ListBox1.AddItem Range("AA" & i)
Next i
End Sub

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas