¿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

Respuesta
1

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... 

Private Sub Workbook_Open()
    For Each h In Worksheets
        With h
            .EnableOutlining = True
            .Protect Password:="", _
            Contents:=True, UserInterfaceOnly:=True
        End With
    Next
End Sub

S@lu2

Respuesta
1

[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? 

Pero te deja trabajar en la hoja, o no te entendí bien.

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.

Sinceramente, no sé. Si encuentro algo te lo haré saber y si te pido lo mismo por favor, siempre es bueno aprender.

Respuesta
1

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.

Vale, así:

ActiveSheet.Protect Password:="4658123907", DrawingObjects:=False, Contents:=True, _
Scenarios:=False, AllowFiltering:=True

A parte del Password, vas especificando más parámetros. Pruebalo y me avisas.

Andy M.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas