Macro que ordene automáticamente mientras escribo

Tengo una macro que utilizo para ordenar lo que escribo pero tengo un par de detalles con ella. Lo primero es como lo muestra la imagen en las casillas A9, 10 y 11 se tiene que ordenar en A2, 3 y 4 pero no me las ordena de esa forma y la segunda es por ejemplo cuando escribo algo en A2 y presionar enter o seleccionar con el cursor la celda B2 o cualquier celda de las que siguen no me la selecciona en lugar de eso me selecciona toda la hoja y no quiero que haga eso. Esta es la formula que estoy utilizando. Espero haberme dado a entender y gracias por su ayuda una vez mas.

Sub ORDENAR()
'
' ORDENAR Macro
'

'
Sheets("PRODUCTOS").Select
ActiveSheet.Unprotect Password:="contraseña"
Selection. AutoFilter
Selection. AutoFilter
Range("A1:J90").Select
Range("J90"). Activate
ActiveWorkbook. Worksheets("PRODUCTOS"). ListObjects("PRODUCTOS"). Sort. SortFields. _
Clear
ActiveWorkbook. Worksheets("PRODUCTOS"). ListObjects("PRODUCTOS"). Sort. SortFields. _
Add Key:=Range("A2:A90"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("PRODUCTOS").ListObjects("PRODUCTOS").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("PRODUCTOS").Select
ActiveSheet.Protect Password:="contraseña"
End Sub

1 respuesta

Respuesta
1

Te digo de antemano que no tengo ni idea de Excel, pero creo que no debe ser tan complicado. Lo mío es access. Verás, si tengo una tabla Codigos, que podría ser Productos o cualquier otra, a la que le añado un campo Orden, que no sería necesario pero que pongo para que veas como "reordena" los valores.

En un formulario basado en esa tabla, si pongo los códigos crecientes no pasa nada, pero si le añado un código "menor".

Cuando pulso Enter o el cursor se va del campo( que supongo que sería tu columna)

Ya me los ha ordenado. Si ahora le añado otro entre el 72 y el 136

Cuando pulso Enter

Y el código Vb no puede ser más sencillo

Private Sub Codigo_AfterUpdate()
Me.RecordSource = "select * from codigos order by val(right([codigo],len([codigo])-4))"
For i = 1 To Me.Recordset.RecordCount
Orden = Me.CurrentRecord
DoCmd.GoToRecord , , acNext
Next
End Sub

Uso la parte numérica de los códigos para darles un orden. En caso de no querer el campo Orden bastaría simplemente con la línea

Me.recordsource...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas