Protección de multiples hojas

27/12/2005 - 01:20 por Racso | Informe spam
Tengo un libro con 17 hojas y en cada pagina tengo iguales columnas que se
ocultan y se muestran con botones de mi barra de herramientas personalizada.
Cuando le doy protección a las hojas (que incluye una contraseña y
deshabilitación de'seleccionar celdas protegidas') mi boton-macro-mostrar
columnas me pide la contraseña (que es lógico) pero al ocultar las columnas
con mi boton-macro ocultarcolumnas se deshabilita la contarseña y se vuelve a
habilitar 'selección de celdas protegidas' aunque la hoja actual (celdas)
queda protegida.

Mis macros de ocultar y mostrar las columnas son :

Sub MostrarColumnasAreas()
ActiveSheet.Unprotect
Columns("E:AD").Select
Selection.EntireColumn.Hidden = False
ActiveCell.CurrentRegion.Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True _
, AllowFormattingColumns:=True
End Sub

Sub MostrarColumnasAreas()
ActiveSheet.Protect
Columns("E:AD").Select
Selection.EntireColumn.Hidden = False
ActiveCell.CurrentRegion.Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True _
, AllowFormattingColumns:=True
End Sub
Como puedo hacer mediante codigo en mis macros para que cada vez que uso mis
botones de ocultar o mostrar no se 'pierda' la contraseña y quede
deshabilitado 'seleccion de celdas protegidas' ?

Preguntas similare

Leer las respuestas

#6 KL
29/12/2005 - 22:42 | Informe spam
Hola Racso,

El fin de esta macro es seleccionar dentro de un rango
fijo las primeras filas con datos y ordenarlas de mayor a menor segun la
columna/celda CJ18



Creo que el fin no se corresponde necesariamente con lo que hace el macro ya que en realidad usa un rango variable (no fijo)
determinado en todo momento por el usuario, y tambien confia en que el usuario leeria y entenderia la instruccion de seleccionar el
rango completo incluidos los titulos y excluidas todas las filas y columnas vacias :-(

El problema es que no es posible seleccionar el rango que se va a ordenar.



?En que exactamente se manifiesta el "...no es posible seleccionar el rango..."? ?Te da algun error el macro, cual? ?El cursor se
niega a seleccionar celdas? Danos mas pistas por favor. Tambien convendria que describas detalladamente el arreglo de tu tabla,
prestando especial atencion al rango que ocupa, si tiene encabezados, si hay datos por debajo de la tabla (?donde exactamente?), si
la hoja esta protegida (?como y con que parametros?), etc.

Que esta mal en esta macro?



Yo no le encuentro ningun defecto critico a tu macro aparte de que algunas lineas estan cortadas donde deberian ser continuas (cosa
que ocurre al enviar lineas largas por correo). He depurado/optimizado un poco tu codigo (nada vital) a ver si te funciona:

'--
Sub Ordenar0101()
Dim Rng As Range
On Error Resume Next
Set Rng = Application.InputBox( _
prompt:="SELECCIONE EL RANGO A ORDENAR - " & _
"EL RANGO DEBE INCLUIR LA FILA DE " & _
"TITULOS Y LA ULTIMA FILA CON DATOS", _
Type:=8)
If Rng Is Nothing Then Exit Sub
Rng.Sort _
Key1:=Range("CJ18"), _
Order1:=xlDescending
End Sub
'--

De todas formas pienso que es mas preferible determinar el rango por codigo que confiar en que lo haga el usuario (!huy que
desconfiado soy!)
?Comentas mas detalles?

Saludos,
KL
Respuesta Responder a este mensaje
#7 KL
29/12/2005 - 22:44 | Informe spam
Hola Racso,

Necesitare ver [un ejemplo de] el macro del que hablas y una explicacion de como se ejecuta.

Saludos,
KL


"Racso" wrote in message news:
KL,
Disculpa la confianza . . . tengo otra consulta . . .
Cómo puedo hacer para que algunas macros funcionen solo en la 'hoja1' y
otras desde la 'hoja2' hasta la 'hoja17' ?




"Racso" escribió:

Hola KL,

Va muy bien tu ayuda . . .
pero tengo otro boton en mi barra de herramientas que tiene la macro
indicada mas abajo. El fin de esta macro es seleccionar dentro de un rango
fijo las primeras filas con datos y ordenarlas de mayor a menor segun la
columna/celda CJ18
El problema es que no es posible seleccionar el rango que se va a ordenar.
Que esta mal en esta macro?
Sub Ordenar0101()
Dim Rng As Range
Set Rng = Application.InputBox(prompt:="SELECCIONE EL RANGO A ORDENAR -
EL RANGO DEBE INCLUIR LA FILA DE TITULOS Y LA ULTIMA FILA CON DATOS", Type:=8)
Rng.Select
Selection.Sort Key1:=Range("CJ18"), Order1:=xlDescending,
Header:=xlGuess _
, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("CJ16").Select
End Sub

Gracias otra vez

Oscar Menacho
Lima-Perú


"KL" escribió:

> Hola Racso,
>
> > Cual es la función del argumento/método
> > "UserInterfaceOnly:=True" ?
>
> Este argumento hace que sea posible manejar los objetos de la hoja mediante macros como si no estuvieran protegidos mientras
> que de
> cara al usuario sigue protegida.
>
> Saludos,
> KL
>
>
Respuesta Responder a este mensaje
#8 Racso
30/12/2005 - 00:42 | Informe spam
Hola otra vez

Te envie mi respuesta a esto ultimo, creo que no salio mi mensaje.

Al respecto, disculpa que no sea tan claro...
Trataré de explicar mejor mi problema
Tengo 2 libros : uno con 3 hojas donde tengo 21 macros y otro libro con una
plantilla con 17 hojas y una barra de herramientas con botones-macro.
Todas las hojas de la plantilla estan protegidas con contraseña, salvo
algunas celdas.
Ya escribí el codigo del evento Workbook_Open y el parametro
UserInterfaceOnly del metodo Protect en el ThisWorbook de la plantilla.

En las hojas 2 al 16 de la plantilla hay tablas iguales y en igual posición
que constan de 11 columnas y 15 filas. En cada fila de estas tablas el
usuario debe llenar ciertas celdas (desprotegidas) y las demás celdas
(protegidas) tienen fórmulas que llenan por si mismas el resto de las filas .
Finalmente, tengo una boton-macro cuyo fin es ordenar las filas que el
usuario ha completado. Ahi surge el problema : ante la petición de la caja de
texto para que el usuario ingrese el rango a ordenar, el cursor se niega a
selecccionar celdas (solo selecciona las desprotegidas).

Ya cambié/depuré la macro según tu sugerencia, que a propósito me parece
excelente, pero el problema persiste.

Otra pregunta mia es, disculpa la confianza . . . Cómo hago para que un
grupo de mis macros 'funcionen' solo en la 'hoja1' de mi plantilla y el resto
en las 'hojas 2 al 16' ?

Gracias otra vez







"KL" escribió:

Hola Racso,

> El fin de esta macro es seleccionar dentro de un rango
> fijo las primeras filas con datos y ordenarlas de mayor a menor segun la
> columna/celda CJ18

Creo que el fin no se corresponde necesariamente con lo que hace el macro ya que en realidad usa un rango variable (no fijo)
determinado en todo momento por el usuario, y tambien confia en que el usuario leeria y entenderia la instruccion de seleccionar el
rango completo incluidos los titulos y excluidas todas las filas y columnas vacias :-(

> El problema es que no es posible seleccionar el rango que se va a ordenar.

?En que exactamente se manifiesta el "...no es posible seleccionar el rango..."? ?Te da algun error el macro, cual? ?El cursor se
niega a seleccionar celdas? Danos mas pistas por favor. Tambien convendria que describas detalladamente el arreglo de tu tabla,
prestando especial atencion al rango que ocupa, si tiene encabezados, si hay datos por debajo de la tabla (?donde exactamente?), si
la hoja esta protegida (?como y con que parametros?), etc.

> Que esta mal en esta macro?

Yo no le encuentro ningun defecto critico a tu macro aparte de que algunas lineas estan cortadas donde deberian ser continuas (cosa
que ocurre al enviar lineas largas por correo). He depurado/optimizado un poco tu codigo (nada vital) a ver si te funciona:

'--
Sub Ordenar0101()
Dim Rng As Range
On Error Resume Next
Set Rng = Application.InputBox( _
prompt:="SELECCIONE EL RANGO A ORDENAR - " & _
"EL RANGO DEBE INCLUIR LA FILA DE " & _
"TITULOS Y LA ULTIMA FILA CON DATOS", _
Type:=8)
If Rng Is Nothing Then Exit Sub
Rng.Sort _
Key1:=Range("CJ18"), _
Order1:=xlDescending
End Sub
'--

De todas formas pienso que es mas preferible determinar el rango por codigo que confiar en que lo haga el usuario (!huy que
desconfiado soy!)
?Comentas mas detalles?

Saludos,
KL


Respuesta Responder a este mensaje
#9 KL
30/12/2005 - 01:31 | Informe spam
Hola Racso,

Voy a contestar a tu ultimo mensaje por partes.

usuario ha completado. Ahi surge el problema : ante la petición de la caja de
texto para que el usuario ingrese el rango a ordenar, el cursor se niega a
selecccionar celdas (solo selecciona las desprotegidas).



La unica forma que encuentro para reproducir tu problema es cambiando el modo de seleccion:

ActiveSheet.EnableSelection = xlUnlockedCells

Lo mas probable es que...
a. uses una instruccion como la de arriba en alguno de tus macros
b. que tengas XL2002 o XL2003 y que (no lo se con certeza) al proteger las hojas esas versiones permitan un parametro como el de
solo permitir seleccion de celdas desprotegidas.

De todas formas para comprobarlo, prueba el siguiente codigo:

'--
Sub Ordenar0101()
Dim Rng As Range
ActiveSheet.EnableSelection = xlNoRestrictions
On Error GoTo Salida
Set Rng = Application.InputBox( _
prompt:="SELECCIONE EL RANGO A ORDENAR - " & _
"EL RANGO DEBE INCLUIR LA FILA DE " & _
"TITULOS Y LA ULTIMA FILA CON DATOS", _
Type:=8)
If Rng Is Nothing Then Exit Sub
Rng.Sort _
Key1:=Range("CJ18"), _
Order1:=xlDescending
Salida:
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub
'--

Saludos,
KL
Respuesta Responder a este mensaje
#10 Racso
30/12/2005 - 01:42 | Informe spam
Gracias KL, ahora mi macro funciona según quiero.

Saludos

"KL" escribió:

Hola Racso,

Voy a contestar a tu ultimo mensaje por partes.

> usuario ha completado. Ahi surge el problema : ante la petición de la caja de
> texto para que el usuario ingrese el rango a ordenar, el cursor se niega a
> selecccionar celdas (solo selecciona las desprotegidas).

La unica forma que encuentro para reproducir tu problema es cambiando el modo de seleccion:

ActiveSheet.EnableSelection = xlUnlockedCells

Lo mas probable es que...
a. uses una instruccion como la de arriba en alguno de tus macros
b. que tengas XL2002 o XL2003 y que (no lo se con certeza) al proteger las hojas esas versiones permitan un parametro como el de
solo permitir seleccion de celdas desprotegidas.

De todas formas para comprobarlo, prueba el siguiente codigo:

'--
Sub Ordenar0101()
Dim Rng As Range
ActiveSheet.EnableSelection = xlNoRestrictions
On Error GoTo Salida
Set Rng = Application.InputBox( _
prompt:="SELECCIONE EL RANGO A ORDENAR - " & _
"EL RANGO DEBE INCLUIR LA FILA DE " & _
"TITULOS Y LA ULTIMA FILA CON DATOS", _
Type:=8)
If Rng Is Nothing Then Exit Sub
Rng.Sort _
Key1:=Range("CJ18"), _
Order1:=xlDescending
Salida:
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub
'--

Saludos,
KL


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida