¿Cómo puedo agrupar y desagrupar celdas con la hoja bloqueada
Me gustaría saber si puedo bloquear y ocultar ciertas celdas de dicha hoja sin que pierda las dos opciones que están dentro del círculo azul, ya que la bloqueo y se me desactivan.
3 respuestas
[Hola. Prueba este código y me comentas. Tienes que ponerlo dentro de Thisworkbook. Si quieres ponerle contraseña lo haces dentro de las comillas
Private Sub Workbook_Open() With Worksheets("Hoja1") .EnableOutlining = True .Protect Password:="", _ Contents:=True, UserInterfaceOnly:=True End With End Sub
Salu2 Carlos Arrocha
Esa macro me desactiva las opciones de agrupar y desagrupar... ¿Existe una forma de que no se deshabiliten?
No, mi pregunta se basa en lo siguiente:
En la internet, aparece esa macro, simplemte hace que lo que tengas agrupado lo puedas ver a pesar de que la hoja esté bloqueada, pero no te permete agrupar, entonces, lo que necesito es que sí se puedan agrupar las celdas a pesar de estar bloqueadas.
- Compartir respuesta
H0la Chrisr:
No conozco una solución y dentro de lo que he encontrado, lo más cercano es lo que indica Carlos.
Si me encuentro con algo, te comento.
S@lu2
¡Gracias!
Saludos. Carlos Arrocha Isaac Reyes
¿Cómo puedo usar esta macro para 12 hojas, es decir, que no sea solo una?
Private Sub Workbook_Open() With Worksheets("Hoja1") .EnableOutlining = True .Protect Password:="", _ Contents:=True, UserInterfaceOnly:=True End With End Sub
Donde dice "Hoja1", necesito ponerle 12 hojas en total, lo hago y me da error...
- Compartir respuesta
No se puede hacer. Lo más cercano es creando tu propio grupo de esquema como hice en este vídeo que grabé para demostrarte como funciona:
Video demo Agrupar - Desagrupar
Pero tiene una limitación y para sortearla se necesitaría mucho código y tiempo para pensarlo.
Saludos, no importa, ¿me podrías ayudar con eso?
Lo que hice fue agregar un grupo personalizado al Ribbon (no se como se llama eso en español)
Lo puedes hacer así o también puedes agregar botones en la hoja.
Esos botones lo que hacen es abrir un formulario, que lo hice estéticamente parecido al original:
Y ese formulario simplemente llama al código de agrupar o desagrupar, es muy sencillo y se puede mejorar muchísimo y agregarle mas características, esto es solo ilustrativo:
Sub AgruparRows() Sheets("Sheet1").Unprotect "ADMIN" Selection.Rows.Group 'ActiveSheet.Outline.ShowLevels RowLevels:=1' 'ActiveSheet.Outline.ShowLevels RowLevels:=2' Sheets("Sheet1").Protect "ADMIN" End Sub Sub AgruparCols() Sheets("Sheet1").Unprotect "ADMIN" Selection.Columns.Group 'ActiveSheet.Outline.ShowLevels ColumnLevels:=1' 'ActiveSheet.Outline.ShowLevels ColumnLevels:=2' Sheets("Sheet1").Protect "ADMIN" End Sub Sub DesagruparRows() On Error GoTo ErrHandler Sheets("Sheet1"). Unprotect "ADMIN" Selection. Rows. Ungroup Sheets("Sheet1"). Protect "ADMIN" Exit Sub ErrHandler: Sheets("Sheet1"). Protect "ADMIN" MsgBox "No se puede desagrupar. Para comenzar un esquema, seleccione filas o columnas y agruperlas.", vbExclamation, "Error..." End Sub Sub DesagruparCols() On Error GoTo ErrHandler Sheets("Sheet1"). Unprotect "ADMIN" Selection. Columns. Ungroup Sheets("Sheet1"). Protect "ADMIN" Exit Sub ErrHandler: Sheets("Sheet1"). Protect "ADMIN" MsgBox "No se puede desagrupar. Para comenzar un esquema, seleccione filas o columnas y agruperlas.", vbExclamation, "Error..." End Sub
Andy M.
Saludos, me da un error.
¿Crees que me puedas explicar cómo es el proceso para poner ese código?
Mejor te mando el archivo y lo miras tu mismo para que veas como está organizado.
Descárgalo por Mega aquí: Descargar archivo demo
Andy M.
Bien, ya lo logré poner, pero si necesito hacer eso en varias hojas, ¿Cómo lo hago?
También que a la hora de agrupar y desagrupar no me bloquee la hoja, y mucho menos desbloquear. Amigo, solo necesito ayuda en esas dos cosas, te agradecería mucho tu ayuda. Gracias.
Hombre, pensé que la hoja tenia que estar bloqueada. Si no tiene que estar bloqueada, ¿entonces cuál era el punto de la pregunta? Ahora me perdí.
Okey, olvida eso, pero como puedo seleccionar todas las hojas, lo de la protección lo dejaré así.
Eso funciona con todas las hojas. De verdad que ya no entiendo lo que quieres hacer. Me parece que deberías abrir una pregunta nueva. Lo que has preguntado aquí ya se te ha respondido por 3 personas diferentes. Lo que tu quieres hacer se basa en selección de celdas, eso es independiente de la hoja. Esto siempre va a trabajar en la hoja activa en el momento.
Saludos, si te pedí la ayuda es porque ya me he pasado la tarde entra en prueba con tu archivo y con el mío y así se comporta. Dentro de las comillas va el nombre de la hoja, cuando pongo la macro hecha por ti, sin modificarla me da un error... Eso fue lo que te dije, tengo el día probando mi archivo, creo y entiendo que si te pido ayuda es por algo amigo. Si me da error tal y como la mandaste y te pido ayuda se supone que se va a alargar la pregunta, varias personas más INTENTARON DAR CON LA SOLUCION, no es que dieron con la solución y yo sigo aqui sin entender... Dentro de las comillas intenté poner el nombre de mi primera hoja y funciona, recuerda que en tu archivo tienes una sola hoja y casualmente se llama "Sheet1". Espero que me puedas ayudar, porque no me está funcionando.
Ah vale vale, tienes la razón. Solo tienes que cambiar Sheets("Sheet1") por ActiveSheet
Quedaría así:
ActiveSheet. Protect "ADMIN"
Así trabaja en la hoja que este activa en el momento. Se me escapó ese detalle.
Andy M.
¡Gracias! Ahora sí me funcionó...
En ese caso, ya no tiene tanto que ver con lo que me ayudaste anteriormente, pero sabes cómo puedo poner esta macro para 12 hojas de las 13 que tiene mi libro.
Private Sub Workbook_Open() With Worksheets("Hoja1") .EnableOutlining = True .Protect Password:="", _ Contents:=True, UserInterfaceOnly:=True End With End Sub
Esa macro es para poder visualizar lo que agrupé a pesar de que la hoja esté bloqueada... Ya que con tu macro me da error al visualizar.
Esa era la limitación que te comenté en mi primera respuesta. Si la hoja esta bloqueada, no puedes colapsar o expandir eso. Y para sortearlo pues habrá que dedicarle mucho tiempo.
Con esa macro también tendrás algunas limitaciones que te darás cuenta a medida que vayas trabajando en el libro. De igual forma puedes probar cambiando a ActiveSheet, pero la estas ejecutando en el evento open del libro, por lo que solo se va a ejecutar una vez. Y ahí tienes otro obstáculo.
Vas a tener que sacar esa macro de ahí, y ponerla en un modulo estándar y luego ver como vas a querer ejecutarla cada vez que la necesites.
Andy M
Saludos amigo.
Te escribo porque tengo una incógnita sobre la macro que mandaste, al final quedó de la siguiente manera:
Sub AgruparF() ActiveSheet.Unprotect "4658123907" Selection.Rows.Group 'ActiveSheet.Outline.ShowLevels RowLevels:=1' 'ActiveSheet.Outline.ShowLevels RowLevels:=2' ActiveSheet.Protect "4658123907" End Sub Sub AgruparC() ActiveSheet.Unprotect "4658123907" Selection.Columns.Group 'ActiveSheet.Outline.ShowLevels ColumnLevels:=1' 'ActiveSheet.Outline.ShowLevels ColumnLevels:=2' ActiveSheet.Protect "4658123907" End Sub Sub DesagruparF() On Error GoTo ErrHandler ActiveSheet.Unprotect "4658123907" Selection.Rows.Ungroup ActiveSheet.Protect "4658123907" Exit Sub ErrHandler: ActiveSheet.Protect "4658123907" MsgBox "No se puede desagrupar. Para comenzar un esquema, seleccione filas o columnas y agruperlas.", vbExclamation, "Error..." End Sub Sub DesagruparC() On Error GoTo ErrHandler ActiveSheet.Unprotect "4658123907" Selection.Columns.Ungroup ActiveSheet.Protect "4658123907" Exit Sub ErrHandler: ActiveSheet.Protect "4658123907" MsgBox "No se puede desagrupar. Para comenzar un esquema, seleccione filas o columnas y agruperlas.", vbExclamation, "Error..." End Sub
Entonces, mi problema es el siguiente... Todas las hojas de mi libro están bloqueadas con ciertos parámetros, a la hora de ejecutar esta macro, me bloquea nuevamente la hoja y pone los valores por defecto en la ventana para proteger las hojas, esos valores son: "Seleccionar celdas bloqueadas" y "Seleccionar celdas desbloqueadas", yo tenía seleccionada 3 opciones aparte de las 2 anteriores que son: "Usar autofiltro", "Modificar objetos" y "Modificar escenarios". Lo que quiero es modificar la macro o buscar la manera de que no me quite esas 3 opciones. ¿Qué podría hacer?
Esta es la sintaxis de la propiedad Protect:
Expresion. Protect( _Password_ , _DrawingObjects_ , _Contents_ , _Scenarios_ , _UserInterfaceOnly_ , _AllowFormattingCells_ , _AllowFormattingColumns_ , _AllowFormattingRows_ , _AllowInsertingColumns_ , _AllowInsertingRows_ , _AllowInsertingHyperlinks_ ,_AllowDeletingColumns_ , _AllowDeletingRows_ , _AllowSorting_ , _AllowFiltering_ , _AllowUsingPivotTables_ )
En el código que te hice, solo estamos especificando el primer parámetro "Password", osea la contraseña. Puedes agregar mas parámetros separando por coma. Los otros son de tipo Boolean, osea, True o False (Verdadero o Falso). La mayoría tienen por defecto el valor False. Si sabes un poquito de ingles puedes darte cuenta cuales son los que quieres mantener con True.
Andy M.
Saludos amigo, no tengo conocimiento de eso, ¿me podrías explicar mejor y decirme si se puede o no? No entiendo.
- Compartir respuesta