Quisiera usar autofiltro en una hoja de excel protegida

Tengo un problema es que necesito proteger varias hojas de un libro en excel, porque contienen formulas que quiero que no las vayan a dañar cuando estén usando ese archivo, que es básicamente una nomina de personal, el asunto es que cuando protejo la hoja, luego no puedo usar la función de ordenar de A a la Z en el auto filtro. Gracias de antemano me ayudaria mucho si me dijeran como se puede hacer que funciones el autofiltro con la hoja protegida.

1 respuesta

Respuesta
1

Cuando proteges la hoja, tienes que activar la casilla de autofiltro o las casillas que necesites:

Saludos. Dante Amor

Disculpa, no leí bien la pregunta, lo que quieres es ordenar y no filtrar.

Para ordenar, tendrías que hacerlo con una macro, la macro tendría que desproteger la hoja, ordenar y volver a proteger, te anexo un ejemplo para ordenar la columna B.

Habría que adaptar la macro a tus datos, la macro de este ejemplo, supone que tus datos están desde la celda A1, que en la fila 1 está el encabezado de datos y que tienes información hasta la columna Z.

Sub Macro13()
'Por.Dante Amor
    pwd = "abc"
    ActiveSheet.Unprotect pwd
    u = Range("A" & Rows.Count).End(xlUp).Row
    With ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("B1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
        .SetRange Range("A2:Z" & u)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveSheet.Protect pwd, DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
        :=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
        AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
        AllowUsingPivotTables:=True
End Sub

Revisa la opción y me comentas.

Saludos. Dante Amor

Si es lo que necesitas.

la verdad es que se muy poco de macros y visual basic pero lo intentare a ver si logro que funcione, muchas gracias. por cierto y la contraseña no se necesita en la macro? si es asi cual es, en el caso de ejemplo? donde le puedo enviar el archivo?

Envíame tu archivo y le adapto la macro para que puedas ordenar.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “roxanna martinez” y el título de esta pregunta.

ok ya te lo envio

Te anexo la macro para ordenar. Funciona de la siguiente manera:

1. Funciona en cualquier hoja.

2. Tienes que seleccionar una celda que se encuentra de un rango de celdas filtradas.

3. La columna de la celda seleccionada es la que toma la macro para realizar el ordenamiento.

Por ejemplo: si quieres ordenar la hoja "Caja de Ahorro" por "Cédula", entonces selecciona la celda "B8". Si quieres ordenar por "Apellidos y nombre", entonces selecciona la celda "C8".

4. El orden siempre es de menor a mayor.

5. Presiona las teclas Control + O al mismo tiempo para ejecutar la macro


Sub Ordenar()
'Por.Dante Amor
    Dim col, r, num, fila, ufila, col1, col2, des
    '
    col = ActiveCell.Column
    On Error Resume Next
    Set r = ActiveSheet.AutoFilter.Range '.Address
    num = Err.Number
    des = Err.Description
    On Error GoTo 0
    If num <> 0 Then
        MsgBox "La celda no es está en un rango de celdas filtradas", _
            vbInformation, "Error: " & num & " " & des
        Exit Sub
    End If
    '
    Application.ScreenUpdating = False
    fila = r.Cells(1, 1).Row
    ufila = r.Rows.Count + fila - 1
    col1 = r.Cells(1, 1).Column
    col2 = r.Columns.Count + col1 - 1
    '
    With ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Cells(fila, col), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
        .SetRange Range(Cells(fila + 1, col1), Cells(ufila, col2))
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Saludos.Dante Amor

¡Gracias! eres un amor! mi admiración, ya se quien acudiré cuando tenga un problema de nuevo, me gustaría aprender visual basic como ud algún día :)

Hola necesito ayuda! Sabes que estuve probando la macro y funciona perfecto cuando hay celdas vacías, pero no cuando tienen fórmulas. Y se me había olvidado extender las fórmulas en las columnas de la cedula y los nombres, y no funciona cuando extiendo la fórmula, funciona solamente con las celdas vacías, para la hoja de carga es perfecto porque ahí si van a quedar vacías esas filas desde la 84 en adelante y las irán llenando a medida que hayan nuevos trabajadores, pero la hoja de caja de ahorro, y casi todas se alimentan de esa, y lo ideal es que no tengan que reescribir los datos cuando llegue un nuevo trabajador, sino que los llenen en la hoja de carga y ahí se alimente a las otras como la de caja de ahorro, y listado de recibos de pago.

Funciona de la siguiente forma.

Puedes desproteger la hoja y agregar las fórmulas y columnas y filas que desees, después toda esa área la tienes que seleccionar para poner autofiltros.

Cuando selecciones una celda para ordenar, la macro tomará solamente el área que está en el autofiltro. De esa forma es como la macro sabe qué rango de celdas tiene que ordenar.

umm pero al ser tabla dinámica creí que ya tomaba los datos de una vez al extender la fórmulas, lo voy a hacer ahorita y le comento si pude, gracias.

Mmm, no estoy seguro que funcione en una tabla dinámica, para esos casos deberás ordenar con la herramienta que tiene la tabla dinámica para ordenar.

Lo que te entregué es para un rango de datos que tiene delimitada un rango con el autofiltro.

yo creo que ya estan incluidas en el filtro lo probe y no funciono me desordena todo loco . :(

je je que pena contigo, me acabo de dar cuenta de algo! No tengo que modificar nada allí en la hoja de caja de ahorro, porque si extiendo las fórmulas hasta el final, y esa hoja depende de la hoja de carga, al llenar y ordenar la hoja de carga la hoja de caja de ahorro se arregla sola, es decir se ordena al mismo tiempo que la hoja de carga, porque de allí es que toma los datos.! :)

Ese macro seria útil y lo podría usar para la hoja de carga para las demás no es necesario... jejeej gracias! Estaba como bloqueada y enredándome sin necesidad.

Qué bueno que ya lo resolviste, cualquier duda puedes crear una nueva pregunta y con gusto te ayudo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas