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
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.
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.
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.! :)
- Compartir respuesta