Quiero ordenar un rango de una hoja b2: D y ultimafila

Quiero ordenar un rango de una hoja desde la columna B fila 2 hasta la columna DE y ultima fila ocupada en la columna DE, lo he intentado, pero me da error la (. Apply), y no se porque,¿podéis ayudarme?; os adjunto la macro:

Private Sub CommandButton1_Click()

NUMERO = TextBox1.Value
NOMBRE = TextBox2.Value
TELEFONO = TextBox3.Value
DIRECCION = TextBox4.Value
Sheets("CLI").Select
ultfila = Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A" & ultfila) = NUMERO
Range("B" & ultfila) = NOMBRE
Range("C" & ultfila) = TELEFONO
Range("D" & ultfila) = DIRECCION
LINEAFINAL = "D" & Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("B2:" & LINEAFINAL).Select
Range("B2:" & LINEAFINAL).Activate
ActiveWorkbook.Worksheets("CLI").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("CLI").Sort.SortFields.Add Key:=Range("B2:" & LINEAFINAL) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("CLI").Sort
.SetRange Range("B1:" & LINEAFINAL)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

2 Respuestas

Respuesta
2

Si vas a ordenar por la columna "B", entonces el dato el Textbox2 (nombre), siempre deberá tener algo, de ese forma aseguras que vas a agregar un dato en la columna B y podrás encontrar la siguiente fila vacía después del último registro.

Con la variable "ulfila" ya sabes cuál es la ultima fila con datos, ya no es necesario volver a calcular.

En el rango para ordenar, te faltó la letra "B" para completar el rango, pusiste:

Range("B2:" & LINEAFINAL)

Y debe ser así:

Range("B2:B" & ultfila)

Lo mismo para el rango de datos, pusiste:

. SetRange Range("B1:" & LINEAFINAL)

Debe ser así:

. SetRange Range("A1:D" & ultfila)

Es por eso que te envía error. Te anexo la macro con los ajustes:

Private Sub CommandButton1_Click()
    '
    Application.ScreenUpdating = False
    Sheets("CLI").Select
    If TextBox2 = "" Then
        MsgBox "Falta el nombre"
        TextBox1.SetFocus
        Exit Sub
    End If
    '
    ultfila = Cells(Rows.Count, "A").End(xlUp).Row + 1
    Range("A" & ultfila) = TextBox1.Value   'NUMERO
    Range("B" & ultfila) = TextBox2.Value   'NOMBRE
    Range("C" & ultfila) = TextBox3.Value   'TELEFONO
    Range("D" & ultfila) = TextBox4.Value   'DIRECCION
    '
    With ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("B2:B" & ultfila), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("A1:D" & ultfila)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Application.ScreenUpdating = True
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

¡Gracias! y disculpa la demora en contestarte, pero no tenia internet donde estaba ubicado; gracias nuevamente funciona a las mil maravillas.

Atentamente: Alfredo

Respuesta
1

[Hola 

Pon así 

Private Sub CommandButton1_Click()
'***Act. Adriel Ortiz
'
Set h1 = Sheets("CLI")
'
NUMERO = TextBox1.Value
NOMBRE = TextBox2.Value
TELEFONO = TextBox3.Value
DIRECCION = TextBox4.Value
'
h1.Select
ultfila = Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A" & ultfila) = NUMERO
Range("B" & ultfila) = NOMBRE
Range("C" & ultfila) = TELEFONO
Range("D" & ultfila) = DIRECCION
'
u = h1.Range("B" & Rows.Count).End(xlUp).Row
    h1.Sort.SortFields.Clear
    h1.Sort.SortFields.Add Key:=Range("B2:B" & u), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("CLI").Sort
        .SetRange Range("B2:DE" & u)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
MsgBox "fin"
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas