En una consulta alguien solicitaba lo siguiente: necesito mostrar las mejores n_ventas de una BD, pero un formulario y dentro de un listbox y a la vez que se ordenen segun yo lo requiera, en este caso hacerlo por edad
Pues adjunto lo que le llame los 5 mejores... es un formulario, que lo unico que debe hacer el usuario es indicarle de que forma desea ordenarlo y de cuantos desea que sean las mejores ventas
Revisen el archivo para mayor comprension de parte de ustedes
Codigo y una breve explicacion del mismo:
Private Sub TextBox2_Change()
'Declarar la variable uf
Dim uf
'Desactivar el como la macro trabaja
Application.ScreenUpdating = False
'Saltar cualquier error
On Error Resume Next
'Seleccionar la hoja para filtrar
With Sheets("Filtro")
'Mostrar cualquier fila escondida
Cells.Rows.Hidden = False
'Limpiar el listbox
ListBox1.RowSource = Empty
'Desactivar si el filtro esta modo activo y mostrar los registros
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
'Marcar el rango desde A32 hasta donde existan datos (hacia la derecha y hacia abajo) _
o sea el rango usado, limpiar y quitar color de celdas
With Range("A32").CurrentRegion
.Clear
.Interior.ColorIndex = xlNone
End With
'Si el textbox es menor o igual a cero, que proceda...
If Me.TextBox2.Value <= 0 Then
MsgBox "Indique el Top porfavor... debe ser mayor a 0 {cero}"
Cells.Rows.Hidden = False
ListBox1.RowSource = Empty
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
With Range("A32").CurrentRegion
.Clear
.Interior.ColorIndex = xlNone
End With
'Limpiar el textbox y activar cursor en el mismo
Me.TextBox2 = ""
Me.TextBox2.SetFocus
Exit Sub
End If
'Si el textbox es diferente a campo vacio
If Me.TextBox2.Value <> "" Then
With Range("A1").CurrentRegion
'Filtrar por la columna C, segun el Top/Mejor numero
.AutoFilter 3, Me.TextBox2.Value, xlTop10Items
.Copy
'Pegar solo los datos visibles, desde A32
With .SpecialCells(xlCellTypeVisible)
Range("A32").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'Ordenar los datos pegados, segun el orden ingresado
With Range("A32").CurrentRegion
.Sort Range("C33"), Me.TextBox1.Value, Header:=xlGuess
End With
Range("A1").Select
End With
End With
End If
'Mostrar los datos en el listbox
ListBox1.RowSource = "A32:C100"
'Crear el siclo o bucle para ocultar las filas que se muestran en listbox (para estetica)
uf = Cells(65536, 1).End(xlUp).Row
For g = 32 To uf
If Cells(g, 1) <> "" Then Rows(g).Hidden = True
Next
End With
'Anular o desactivar cualquier error inniciado
On Error GoTo 0
'Activar la pantalla
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton1_Click()
'Limpiar el formulario
Application.ScreenUpdating = False
ListBox1.RowSource = Empty
Cells.Rows.Hidden = False
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
With Range("A32").CurrentRegion
.Clear
.Interior.ColorIndex = xlNone
End With
Me.TextBox1 = ""
Me.TextBox2 = ""
Me.TextBox1.SetFocus
Exit Sub
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_Activate()
'Al iniciar el fornulario, activar el cursor en el textbox
Me.TextBox1 = ""
Me.TextBox2 = ""
Me.TextBox1.SetFocus
End Sub
Private Sub TextBox1_Change()
'Si el numero para ordenar los datos es mayor a 2, que proceda...
If Me.TextBox1.Value > 2 And Me.TextBox1.Value <> "" Then
MsgBox "Ingrese solamente: el # 1 (orden ascendente) o # 2 (orden descendente)", , "Error de ingreso"
Me.TextBox1 = ""
Me.TextBox2 = ""
Me.TextBox1.SetFocus
Exit Sub
End If
End Sub
Saludos desde Honduras
No hay comentarios:
Publicar un comentario