Obligar a habilitación de macros

06/09/2004 - 23:37 por Giancarlo | Informe spam
Hola a todos:

He creado algunas macros para validar la información que
se ingresa en varias hojas de un libro. A fin de obligar a
los usuarios a "Habilitar Macros" al abrir el archivo,
utilizando un macros que se activa antes de cerrar el
libro he logrado ocultar las hojas que son indispensables
para utilizar el libro y sólo se muestran al abrir el
libro activando macros.

Sin embargo, para que esta alternativa funcione es
necesario grabar el libro al cerrarlo pero las opciones
del Excel permiten no grabar los cambios al salir. Le
agradeceré mucho a quien me pueda indicar como hacer para
que cuando un usuario decida cerrar un libro sin grabar
los últimos cambios, las hojas que he designado se
oculten. debo asumir que ya se grabaron otros cambios
anteriormemte y sólo interesa descartar los últimos (El
macros para ocultar las hojas sólo se activa al cerrar el
libro).

No conozco mucho de Visual Basic por lo que, también
agradeceré a quien me conteste que sea bastante explícito
con su respuesta.


Slds,

Giancarlo Bocchio
 

Leer las respuestas

#1 Héctor Miguel
07/09/2004 - 07:43 | Informe spam
hola, Giancarlo !

... a fin de obligar a los usuarios a "Habilitar Macros" al abrir el archivo
... he logrado ocultar las hojas que ... solo se muestran al abrir el libro activando macros.
... para que ... funcione es necesario grabar el libro al cerrarlo
... las opciones ... permiten no grabar los cambios al salir.
... que cuando ... decida cerrar un libro sin grabar los ultimos cambios, las hojas ... se oculten
... asumir que ya se grabaron otros cambios ... interesa descartar los ultimos
(El macros para ocultar las hojas solo se activa al cerrar el libro).
No conozco mucho de Visual Basic ... agradecere a quien me conteste que sea bastante explicito [...]



-> como 'paso #1' [te sugiero]... 'llamar' al codigo que oculta las hojas en el evento '_beforsave'
[de esta manera, la 'grabacion' del archivo mantendra ocultas 'esas' hojas ->siempre<-] ;)
-> como 'paso #2'... usar una variable que 'le indique' a excel 'cuando se inicia' el proceso de 'cierre'
[mientras el archivo 'permanezca' abierto... 'llamas' a OTRA macro que 'vuelva' a presentar las hojas]
-> como 'paso #3'... 'mantener' en una matriz los nombres de dichas hojas [la puedes modificar a voluntad]
-> ANTES de que 'intentes' guardar/cerrar el archivo [una vez 'copiados' los codigos]...
=>'ejecuta' el evento '_open'<= [en el editor de vba] -> 'parate' en el evento -> pulsa {F5} ;)

espero que la 'secuencia' y la 'logica' del codigo siguiente sea... 'secuencialmente logica' :DD
[probablemente] habra 'cosas' que te interese 'conservar' [entre ocultar/mostrar hojas] como...
¿conservar la hoja 'donde estaba' el usuario?... 'pero'... ya 'comentaras' las modificaciones que 'faltan' ;)
saludos,
hector.
en el modulo de codigo del libro [¿ThisWorkbook?] ==Private Ocultas, Cerrando As Boolean
Private Sub Workbook_Open()
Definir_Ocultas
Mostrar_Ocultas True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cerrando = True
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.EnableEvents = False
Mostrar_Ocultas xlSheetVeryHidden
If Not Cerrando Then Mostrar_Ocultas True
Cancel = Not Cerrando
Application.EnableEvents = True
End Sub
Private Sub Definir_Ocultas()
Ocultas = Array("Hoja2", "Hoja3", "Hoja4")
End Sub
Private Sub Mostrar_Ocultas(ByVal Mostrar)
Application.ScreenUpdating = False
Dim Sig As Integer
For Sig = LBound(Ocultas) To UBound(Ocultas)
Worksheets(Ocultas(Sig)).Visible = Mostrar
Next
If Mostrar = xlSheetVeryHidden Then Me.Save
If Mostrar = True Then Me.Saved = True
End Sub

Preguntas similares