Ordenar datos en listbox sin afectar la hoja activa

Jcgonzalez31, espero no parecerte demasiado ignorante, pero la verdad es que busco una solución más eficaz que la que soy capaz de desarrollar por mí mismo. Después de arreglar lo del listbox y el textbox para poder introducir la fecha en cada registro, me he dado cuenta que un alumno puede solicitar dos o más títulos en distintos años, por lo que la persona que introduce la fecha de recogida de dicho titulo debe saber a qué alumno colocar la fecha; es decir, si PEPITO PÉREZ ya recogió el titulo de la Eso y ahora pide el de bachillerato, aparecerá en el listbox en dos filas separadas por muchos alumnos, puesto que tienen distinto nº de registro. Así están ordenados en la hoja activa, pero ¿cómo puedo ordenar sólo el listbox por orden alfabético y no me toque la columna de la que se nutre de datos?. Te recuerdo que lleno el listbox así:
Private Sub CommandButton1_Click()
ListBox1.Clear
ListBox1.ColumnCount = 3
ListBox1.ColumnWidths = "8cm;4cm;5cm"
Sheets("TÍTULOS").Select
Cells(2, 2).Select
pepe = Range("B65536").End(xlUp).Row
ListBox1.RowSource = "B2:D" & pepe
End Sub

1 Respuesta

Respuesta
1
Aquí te dejo un ejemplo para que lo adaptes a tus necesidades:
Option Explicit
' Este ejemplo está basado en un un consejo de J.G. Hussey,
' publicado en el "Visual Basic Programmer's Journal"
Sub RemoveDuplicates()
Dim AllCells As Range, Cell As Range
Dim NoDupes As New Collection
Dim i As Integer, j As Integer
Dim Swap1, Swap2, Item
' Los elementos están en A1:A105
Set AllCells = Range("A1:A105")
' La siguiente declaración ignora el error ocurrido
' al intentar añadir una tecla duplicada a la colección.
' La duplicada no se añade - ¡y eso es justo lo que queremos!
On Error Resume Next
For Each Cell In AllCells
NoDupes.Add Cell.Value, CStr(Cell.Value)
' Nota: el segundo argumento (tecla) para el método Añadir debe ser una serie
Next Cell
' Resume el manejo de un error ordinario
On Error GoTo 0
' Actualiza las etiquetas en el UserForm1
With UserForm1
.Label1.Caption = "Elementos totales: " & AllCells.Count
.Label2.Caption = "Elementos únicos: " & NoDupes.Count
End With
' Tipo de colección (opcional)
For i = 1 To NoDupes.Count - 1
For j = i + 1 To NoDupes.Count
If NoDupes(i) > NoDupes(j) Then
Swap1 = NoDupes(i)
Swap2 = NoDupes(j)
NoDupes.Add Swap1, before:=j
NoDupes.Add Swap2, before:=i
NoDupes.Remove i + 1
NoDupes.Remove j + 1
End If
Next j
Next i
' Añadir el tipo, elementos no duplicados al Cuadro de lista
For Each Item In NoDupes
UserForm1.ListBox1.AddItem Item
Next Item
' Mostrar el UserForm
UserForm1.Show
End Sub
Muchas gracias por tu respuesta, pero no creo que me haya explicado lo suficientemente bien, por eso el ejemplo que me mandas no se adapta a mis necesidades: lo único que quería es ordenar los datos alfabéticamente dentro del listbox, y no tengo ni idea de cómo emplear este ejemplo en mi caso concreto. Mi listbox toma los datos de tres columnas ordenadas por el número de registro y no alfabéticamente, pero para ver la columnas en el listbox necesito que aparezcan ordenadas alfabéticamente. De todas formas muchas gracias por tu interés. Un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas