Inicio > Microsoft Excel > fejoal > Proteccion, Botones, macros y celdas

Proteccion, Botones, macros y celdas

Experto:
Usuario:
Fecha: 12/10/2008
Valoración: (5,00 sobre 5) Categoría: Microsoft Excel
12/10/2008
retana, usuario preguntando en Microsoft Excel
Usuario
Primero antes que todo espero que estes bien, y como ves yo aca molestandote segun tus enseñanzas tengo la siguiente situacion:

Sub Botones_Comunes()
Select Case Range("A11").Value
Case 1
prnRange = 1
Case 2
prnRange = 2
Case 3
prnRange = 3
End Select

ActiveSheet.Outline.ShowLevels RowLevels:=prnRange

End Sub

esta macro esta asocuada a unos botones,, pero no puedo hacer que si la hoja esta protegida la desproteja y si no esta protegida que la proteja, dado deq ue tengo esta otra macro y me causa choque:

Sub proteger()
'

If Worksheets(Vital).ProtectContents = True Then
ActiveSheet.Unprotect
ActiveSheet.Shapes("Lock").Select 'resulta ser que el boton se llama Lock
Selection.Characters.Text = "Proteger Hoja"
Range("C27").Select
Else
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.Shapes("Lock").Select 'resulta ser que el boton se llama Lock
Selection.Characters.Text = "Desproteger Hoja"
Range("E27").Select

End If

End Sub

como puedo hacer para que las dos aplicaciones funcionen??

y calro declare la variable: Dim prnRange As Integer

me podes dar una mano??
12/10/2008
retana, experto respondiendo en Microsoft Excel
Experto

Buenas, Gerardo!

A menos que hayas declarado -en otra parte- a Vital como una hoja, deberás referrirte a ella como "Vital". Es decir, empieza por corregir la instrucción:

If Worksheets(Vital).ProtectContents = True Then

Debería ser:

If Worksheets("Vital").ProtectContents = True Then


Luego en la primer rutina, simplemente agregale un comando de desprotección, supuesto que estés en tal hoja. Quedaría algo así como:

Sub Botones_Comunes()
Select Case Range("A11").Value
Case 1
prnRange = 1
Case 2
prnRange = 2
Case 3
prnRange = 3
End Select
ActiveSheet.Unprotect '<- funciona para ambos casos
ActiveSheet.Outline.ShowLevels RowLevels:=prnRange

proteger '<-- Ejecuta el otro macro supuesto que esté en el mismo módulo.

End Sub

Prueba con esto y dime.

Un abrazo!
Fernando
P
12/10/2008
retana, usuario preguntando en Microsoft Excel
Usuario
resulta ser que

Option Base 1
Const Vital = "P0-9"

por eso esa que coloco la intruccion
If Worksheets(Vital).ProtectContents = True Then

ademas porque asi lo pude ver en los archivos que trae excel, como plantillas, dado de que utilice aquel archivo que me encontre para quitarle la proteccion del VBA
12/10/2008
retana, experto respondiendo en Microsoft Excel
Experto

Hola, Gerardo!

Desempolvando viejas preguntas, ví que quedó pendiente este problema.

Hasta donde alcanzo a ver, pareciera que aunque Vital esté definida como una constante con el nombre de una hoja, VBA no sabe que lo es.

Entonces, si no usas:
If Worksheets("P0-9").ProtectContents = True Then

deberías tener algo así:

Dim Vital As Worksheet
Set Vital = Sheets("P0-9")
If Worksheets(Vital).ProtectContents = True Then

Así deberías resolver este problema, espero.

Excelente fin de semana!

Fernando
12/10/2008
retana, usuario preguntando en Microsoft Excel
Usuario
mmmmmm que buena aclaracion, como todas las que me haces, muchas Gracias, un abrazo
Enlaces patrocinados