Protección, Botones, macros y celdas

Primero antes que todo espero que estés bien, y como ves yo acá molestándote según tus enseñanzas tengo la siguiente situación:
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?

1 respuesta

Respuesta
1
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
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 así lo pude ver en los archivos que trae excel, como plantillas, dado de que utilice aquel archivo que me encontré para quitarle la protección del VBA
Desempolvando viejas preguntas, vi 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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas