** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Ordenar el área Seleccionada
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoOrdenar el área Seleccionada

 Responder Responder
Autor
Mensaje
Gladiador Ver desplegable
Habitual
Habitual
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 176
Enlace directo a este mensaje Tema: Ordenar el área Seleccionada
    Enviado: 01/Abril/2021 a las 20:42
Buenas a todos.
Nuevamente solicito su valiosa ayuda con la siguiente instrucción

He grabado una macro para ordenar fechas del mas antiguo al mas nuevo, según el área que he seleccionado

Sin embargo me da un error en tiempo de ejecución, cuando le digo "Depurar", se coloca en la última instrucción  "Apply"

Esta es la macro

Dim myRange As Range
Set myRange = Selection
'
    ActiveWorkbook.Worksheets("Cuenta").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Cuenta").Sort.SortFields.Add2 Key:=myRange, _
         SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Cuenta").Sort
        .SetRange myRange
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply           (acá es donde indica que es el error)
    End With


Que puedo estar haciendo mal?

Otro punto, de esta misma consulta.

Es posible cambiar la instrucción ActiveWorkbook.Worksheets("Cuenta") por ActiveSheet
La idea es grabar la Macro en mi libro Personal, de manera de poder usarlo en cualquier hoja en la que me encuentre trabajado.

Gracias por la ayuda

Arriba
SkaryBlondi Ver desplegable
Habitual
Habitual


Unido: 24/Octubre/2020
Localización: Asturias
Estado: Sin conexión
Puntos: 67
Enlace directo a este mensaje Enviado: 01/Abril/2021 a las 21:01
Hola

Prueba con

.SetRange Range(myRange)

Saludos,
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5771
Enlace directo a este mensaje Enviado: 01/Abril/2021 a las 21:16
A mi me funciona sin error 'tal cual' tienes el código.

Teniendo en cuenta que...
- Tu macro no trabaja con rangos absolutos sino con la variable myRange.
- Sin ver como son tus datos.
- Sin ver que rango tienes seleccionado.
... es decir: como lo haces... no puedo decirte lo que estás haciendo malErmm


Saludos desde Tenerife.

Mi sitio_web con ejemplos Excel.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5771
Enlace directo a este mensaje Enviado: 01/Abril/2021 a las 21:29
Suponiendo que tu afirmación...

« Es posible cambiar la instrucción ActiveWorkbook.Worksheets("Cuenta") por ActiveSheet »

... pretende ser una pregunta, la respuesta es  Sí .


Saludos desde Tenerife.

Mi sitio_web con ejemplos Excel.
Arriba
Gladiador Ver desplegable
Habitual
Habitual
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 176
Enlace directo a este mensaje Enviado: 02/Abril/2021 a las 20:42
Hola, gracias por las respuestas y las aclaratorias.


Gracias SkaryBloni por tu aporte

Gracia AnSanVal por tus observaciónes.

Tengo una tabla con fechas en la columna C, luego datos en las columnas D,E,F,G,H

A veces se introducen datos, con fechas anteriores a la última fecha ingresada, y deben ser ordenados por fechas para mantener la secuencia.

Luego de revisar detenidamente la macro me he dado cuenta de lo siguiente:

Dim myRange As Range
Set myRange = Selection

    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add2 Key:=Range( _
        "C100:C109"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("C100:H109")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

El rango C100:C109 corresponde a la columna que se va a ordenar;
Mientras el rango C100:H109 corresponde al área seleccionada.

Por lo tanto myRange solo puedo usarlo aqui:

    With ActiveSheet.Sort
        .SetRange myRange
        .
        .
y funciona.

Ahora, mi problema radica en cómo instruir a la macro para que tome como la columna de "ordenamiento" la primera columna de la selección? En este caso la columna "C"

Me gustaría usar la macro en otras hojas en donde la columna de fecha no está necesariamente en la columna "C"

Gracias
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5771
Enlace directo a este mensaje Enviado: 02/Abril/2021 a las 22:42
«... mi problema radica en cómo instruir a la macro para que tome como la columna de "ordenamiento" la primera columna de la selección...»

Puedes hacerlo con RESIZE: Set myRange = Selection.Resize(Selection.Rows.Count, 1)





Editado por AnSanVal - 02/Abril/2021 a las 22:43
Saludos desde Tenerife.

Mi sitio_web con ejemplos Excel.
Arriba
Gladiador Ver desplegable
Habitual
Habitual
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 176
Enlace directo a este mensaje Enviado: 03/Abril/2021 a las 05:00
Gracias AnSanVal, funciona bien.

La macro quedó como sigue:

Dim myRange, mycol As Range
Set myRange = Selection
Set mycol = Selection.Resize(Selection.Rows.Count, 1)

'
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add2 Key:=mycol, _
         SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveSheet.Sort
        .SetRange myRange
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Muy agradecido

Se puede cerrar el hilo

Gladiador
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable