Macro ocultar columnas en hojas protegidas y libro compartido

Tengo esta macro que muestra y oculta columnas

Public Sub Muestrayoculta()

If Columns("e").EntireColumn.Hidden = True Then
Columns("e").EntireColumn.Hidden = False
Else
Columns("e").EntireColumn.Hidden = True
End If
If Columns("j").EntireColumn.Hidden = True Then
Columns("j").EntireColumn.Hidden = False
Else
Columns("j").EntireColumn.Hidden = True
End If
If Columns("o").EntireColumn.Hidden = True Then
Columns("o").EntireColumn.Hidden = False
Else
Columns("o").EntireColumn.Hidden = True
End If

End Sub

Funciona. Pero cuando protejo la hoja y la ejecuto, dice que no se puede asignar la propiedad Hidden de la clase Range y marca en amarillo en el depurador Columns("e"). EntireColumn.Hidden = True

He probado a incluir la línea ActiveSheet. Unprotect al principio, y la línea ActiveSheet. Protect al final de la macro y entonces funciona, pero cuando comparto el libro el error que me da es en el método Unprotect de la clase Workseet.

¿Qué se puede hacer?.

1 Respuesta

Respuesta
1

H o l a:

Si el libro está compartido, se tiene que quitar el modo compartido

Si la hoja está protegida, se tiene que desproteger.

Te anexo la macro, para quitar el modo compartido, desproteger la hoja, ocultar o mostrar las columnas, proteger la hoja y compartir el libro:

Public Sub Muestrayoculta()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    If ActiveWorkbook.MultiUserEditing Then 'si esta compartido, lo ponemos en modo exclusivo
        ActiveWorkbook.ExclusiveAccess
        compartir = True
    End If
    '
    If ActiveSheet.ProtectContents Then     'Si está protegida la hoja se desprotege
        ActiveSheet.Unprotect
        proteger = True
    End If
    '
    With Range("E:E, J:J, O:O").EntireColumn
        If .Hidden Then .Hidden = False Else .Hidden = True
    End With
    '
    If proteger Then                        'Se protege la hoja
        ActiveSheet.Protect
    End If
    If compartir Then                       'guardamos el libro nuevamente como compartido
        ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.FullName, accessMode:=xlShared
    End If
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

Hola...

Gracias por tu pronta respuesta, pero hay algún problema y da error en la línea proteger=True. Dice Error de compilación se esperaba Función o una variable.

Te estoy muy agradecido

Después de esto:

'Por. Dante Amor

Agrega esta línea

Dim compartir, proteger

Prueba nuevamente y me comentas.

¡Gracias! Si señor funciona perfectamente. Tarda unos 5 segundos en realizar la acción, pero funciona.

Muchísimas gracias, como siempre quedo admirado.

Un saludo

¡Gracias! Funciona perfectamente, tarda unos 5 segundos en realizar la acción pero funciona.

Como siempre quedo admirado. Un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas