Macro de Seguridad Vista Previa

26/09/2006 - 01:42 por Carlos Enrique | Informe spam
Hola saludos, alguien sabria como hacer por medio de un Macro o si existe
alguna opcion para ello, que es el Bloquear el cambio de configuracion de la
Vista Previa, es decir que no se pueda modificar El Encabezado Personalizado
ni El Pie de Pagina Personalizado que tengo en cada Hoja de un libro en
particular, que si permita ver la vista previa, pero no entrar a las
configuraciones de esta.

Gracias y saludos.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
26/09/2006 - 04:52 | Informe spam
hola, Carlos !

... como hacer por medio de un Macro o si existe alguna opcion para ello
.. Bloquear el cambio de configuracion de la Vista Previa, es decir
que no se pueda modificar El Encabezado... ni El Pie de Pagina... que tengo en cada Hoja de un libro en particular
que si permita ver la vista previa, pero no entrar a las configuraciones de esta.



considera que el dialogo de la vista preliminar de impresion 'pone' al usuario en control de la aplicacion
considera tambien que el evento que 'detecta' si se lanza una vista preliminar de impresion es el '_beforeprint' [del libro]
considera ademas que dicho evento tambien es 'lanzado' cuando se hace un llamado a la impresion 'directa'
[es decir]... el evento ['_beforeprint'] NO sabe si fue disparado por una vista preliminar de impresion... o por una impresion 'directa'

1) [creo que] la opcion mas 'barata' [y casi-casi... 'segura']... es que utilices un procedimiento [macro]...
donde te encargues de re/poner la configuracion A ESA hoja en el evento '_beforeprint' -> del libro

2) otra alternativa es que muestres de manera 'obligada' la vista preliminar de impresion y se imprima despues de ocultar el dialogo...
usando en el evento '_beforeprint' la siguiente instruccion que inhabilita las opciones de re/configurar la pagina...
[la accion de imprimir sera 'irremediablemente' ejecutada independientemente de si el usuario la cancela o la ejecua] <= OJO

Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveWindow.SelectedSheets.PrintPreview EnableChanges:=False
End Sub

3) otra alternativa [+/- 'barata']... ES -> cancelar las formas 'convencionales' de impresion [por parte del usuario]...
y proveer formas 'personalizadas/controladas/' para 'manipular' una [vista de] impresion segun tu conveniencia [mas macros]

como te podras imaginar... el evento [_beforeprint] tiene/requiere/... de un 'manejo' +/- especial [si quieres mantenerlo 'bajo control'] :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Carlos Enrique
26/09/2006 - 07:24 | Informe spam
Hola Hector , Gracias por tu respuestas

para esta opcion
1) [creo que] la opcion mas 'barata' [y casi-casi... 'segura']... es que
utilices un procedimiento [macro]...
donde te encargues de re/poner la configuracion A ESA hoja en el evento
'_beforeprint' -> del libro


Como podria hacer para re/poner la configuracion, aunque la idea no solo es
reponerla, sino que no la cambien al imprimir ya que en el encabezado y pie
de pagina personalizados aparecen datos que deberian ser necesarios como
infomacion adicional a la hora de imprimir y siempre es impreso por personas
diferentes al azar, la idea es evitar que por curiosidad o simplemente por
estar tocando algo sin saber que hacen cambien o borren esos datos y no
aparezcan en la impresion.

Igual la opcion
2) otra alternativa es que muestres de manera 'obligada' la vista
preliminar de impresion y se imprima despues de ocultar el dialogo...
usando en el evento '_beforeprint' la siguiente instruccion que
inhabilita las opciones de re/configurar la pagina...
[la accion de imprimir sera 'irremediablemente' ejecutada
independientemente de si el usuario la cancela o la ejecua] <= OJO

Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveWindow.SelectedSheets.PrintPreview EnableChanges:=False
End Sub


Tambien suena atractiva pero podrias explicarme o guiarme un poco mas
detallado como lograr esto.

La ultima opcion tambien suena bien pero no tengo idea de como hacer lo que
planteas.
3) otra alternativa [+/- 'barata']... ES -> cancelar las formas
'convencionales' de impresion [por parte del usuario]...
y proveer formas 'personalizadas/controladas/' para 'manipular' una
[vista de] impresion segun tu conveniencia [mas macros]



Si puedes darme un poco mas de idea o luces para utilizar la idea de los
tres casos que expones el que se acerque mas o sea mas adecuada lo que
necesito.

Saludos,
Carlos.
Respuesta Responder a este mensaje
#3 Héctor Miguel
26/09/2006 - 23:40 | Informe spam
hola, Carlos !

para esta opcion
1) [creo que] la opcion mas 'barata' [y casi-casi... 'segura']... es que utilices un procedimiento [macro]...
donde te encargues de re/poner la configuracion A ESA hoja en el evento '_beforeprint' -> del libro


Como podria hacer para re/poner la configuracion, aunque la idea... es... que no la cambien al imprimir [...]

Igual la opcion
2) otra alternativa es que muestres de manera 'obligada' la vista preliminar de impresion y se imprima despues de ocultar el dialogo...
usando en el evento '_beforeprint' la siguiente instruccion que inhabilita las opciones de re/configurar la pagina...
[la accion de imprimir sera 'irremediablemente' ejecutada independientemente de si el usuario la cancela o la ejecua] <= OJO

Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveWindow.SelectedSheets.PrintPreview EnableChanges:=False
End Sub


Tambien suena atractiva pero podrias explicarme o guiarme un poco mas detallado como lograr esto.

La ultima opcion tambien suena bien pero no tengo idea de como hacer lo que planteas.
3) otra alternativa [+/- 'barata']... ES -> cancelar las formas 'convencionales' de impresion [por parte del usuario]...
y proveer formas 'personalizadas/controladas/' para 'manipular' una [vista de] impresion segun tu conveniencia [mas macros]


Si puedes darme un poco mas de idea o luces para utilizar la idea de los tres casos que expones
el que se acerque mas o sea mas adecuada lo que necesito.



[creo que] este tema de 3 opciones, podria alargarse mas de lo necesario -?- [asi que por lo pronto]...

1) te propongo que hagas la prueba con la opcion 2
-> copia el codigo al modulo de tu libro [ThisWorkbook]
-> haz algunas pruebas... y comentas que es lo que haria falta o no te gusta, o ???

2) al final del presente te apunto algunas sugerencias para el metodo de la opcion 1 comentada

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

[por ejemplo] puedes 'dejarlo' que 'modifique' [o... realmente que INTENTE modificar] lo que quiera y...
-> por codigo TU -> RESTABLECES/ajustas/decides/indicas/... las propiedades [del .PageSetup] a los 'defaults' que quieras :))
-> [solo toma en cuenta que] -> TODA propiedad QUE NO ESTABLEZCAS TU [de manera 'expresa' y NO 'implicita'] en el codigo...
-> seran propiedades que el usuario SI podra 'manipular' [o re/establecer] a su 'libre voluntad y criterio' :-((
[p.e. si NO 'limpias' por codigo la propiedad '.PrintTitleRows' -> el usuario podria establecer 'los suyos'] :))
-> [ademas] no importa si el usuario las cambia [en la vista preliminar]... al momento de imprimir... 'volveran' TUS propiedades ;)
[asi que]... ASEGURATE de establecer TU las propiedades necesarias [margenes, orientacion, area, calidad, etc. etc. etc.] ;)
-> el verdadero 'problema'... seria si tu libro se abre SIN 'permiso' de usar las macros -?-
-> no olvides que son [solo] 'ejemplos'... y que adaptarlo a tu 'real' necesidad... dependera de los comentarios que hagas ;)

1) en el modulo de codigo del libro [ThisWorkbook] ==Private Sub Workbook_BeforePrint(Cancel As Boolean)
If HojaEnGrupo("hoja1") Then Configura_mi_hoja
End Sub

2) en un modulo de codigo 'normal' ==Option Private Module
Function HojaEnGrupo(ByVal Nombre As String) As Boolean
Dim Hoja As Worksheet
For Each Hoja In ActiveWindow.SelectedSheets
If LCase(Hoja.Name) = LCase(Nombre) Then HojaEnGrupo = True: Exit For
Next
End Function
Sub Configura_mi_hoja()
With Worksheets("hoja1").PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
.PrintArea = "$A$1:$F$20"
.LeftHeader = Format(Date, "mm/dd/yy")
.RightFooter = "Hoja 35"
' no olvides controlar/incluir/agregar/...' TODAS las propiedades necesarias :))
End With
End Sub
Respuesta Responder a este mensaje
#4 Carlos Enrique
27/09/2006 - 21:37 | Informe spam
Hola Hector

Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveWindow.SelectedSheets.PrintPreview EnableChanges:=False
End Sub







Realize esta opcion

1) te propongo que hagas la prueba con la opcion 2
-> copia el codigo al modulo de tu libro [ThisWorkbook]
-> haz algunas pruebas... y comentas que es lo que haria falta o no te
gusta, o ???



y realmente me gusta con la unica exepcion de que si le doy al boton
"CERRAR" igualmente me imprime la hoja y me gustaria poder evitar eso, que
solo iprima si se requiere imprimir, pero por otra parte hace exactamente lo
que requiero que es no dejar o inabilitar el boton "CONFIGURAR" que esta
dentro de la "Vista Previa". Me gustaria mucho esta opcion pero que no
imprima a menos que asi se desee.


Con respecto a la opcion 1

2) al final del presente te apunto algunas sugerencias para el metodo de
la opcion 1 comentada

[por ejemplo] puedes 'dejarlo' que 'modifique' [o... realmente que INTENTE
modificar] lo que quiera y...
-> por codigo TU -> RESTABLECES/ajustas/decides/indicas/... las
propiedades [del .PageSetup] a los 'defaults' que quieras :))
-> [solo toma en cuenta que] -> TODA propiedad QUE NO ESTABLEZCAS TU [de
manera 'expresa' y NO 'implicita'] en el codigo...
-> seran propiedades que el usuario SI podra 'manipular' [o
re/establecer] a su 'libre voluntad y criterio' :-((
[p.e. si NO 'limpias' por codigo la propiedad '.PrintTitleRows' -> el
usuario podria establecer 'los suyos'] :))
-> [ademas] no importa si el usuario las cambia [en la vista
preliminar]... al momento de imprimir... 'volveran' TUS propiedades ;)
[asi que]... ASEGURATE de establecer TU las propiedades necesarias
[margenes, orientacion, area, calidad, etc. etc. etc.] ;)
-> el verdadero 'problema'... seria si tu libro se abre SIN 'permiso'
de usar las macros -?-
-> no olvides que son [solo] 'ejemplos'... y que adaptarlo a tu 'real'
necesidad... dependera de los comentarios que hagas ;)
1) en el modulo de codigo del libro [ThisWorkbook] ==> Private Sub Workbook_BeforePrint(Cancel As Boolean)
If HojaEnGrupo("hoja1") Then Configura_mi_hoja
End Sub




CUAL ES EL MODULO DE CODIGO NORMAL (MODULO1, FUNCIONES????)

2) en un modulo de codigo 'normal' ==> Option Private Module
Function HojaEnGrupo(ByVal Nombre As String) As Boolean
Dim Hoja As Worksheet
For Each Hoja In ActiveWindow.SelectedSheets
If LCase(Hoja.Name) = LCase(Nombre) Then HojaEnGrupo = True: Exit For
Next
End Function
Sub Configura_mi_hoja()
With Worksheets("hoja1").PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
.PrintArea = "$A$1:$F$20"
.LeftHeader = Format(Date, "mm/dd/yy")
.RightFooter = "Hoja 35"
' no olvides controlar/incluir/agregar/...' TODAS las propiedades
necesarias :))
End With
End Sub



Como coloco los parametros o caracteristicas del "Encabezado - Personalizar
Encabezado" y "Pie de Pagina - Personalizar Pie de Pagina" ???, que es uno
de los puntos que no se deberian cambiar al imprimir.

Cualquiera de los dos opciones si se logra el cometido es buena, por
supuesta la opcion 2 es mas sencilla, pero como te dije quisiera que no se
imprimiera la hora a menos que sea eso lo que se requiere en algun momento,
porque puede darse el caso que se requiera la vista previa para ver como va
quedando la informacion y no querer imprimirla aun hasta concluir los datos.

Saludos y Gracias

Carlos
Respuesta Responder a este mensaje
#5 Carlos Enrique
27/09/2006 - 21:46 | Informe spam
(esto una copia del ultimo mensaje, habia colocado unas palabras mal
escritas)

Hola Hector,

Realize esta opcion

1) te propongo que hagas la prueba con la opcion 2
-> copia el codigo al modulo de tu libro [ThisWorkbook]
Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveWindow.SelectedSheets.PrintPreview EnableChanges:=False
End Sub
-> haz algunas pruebas... y comentas que es lo que haria falta o no te
gusta, o ???



y realmente me gusta con la unica exepcion de que si le doy al boton
"CERRAR" igualmente me imprime la hoja y me gustaria poder evitar eso, que
solo iprima si se requiere imprimir, pero por otra parte hace exactamente
lo
que requiero que es no dejar o inabilitar el boton "CONFIGURAR" que esta
dentro de la "Vista Previa". Me gustaria mucho esta opcion pero que no
imprima a menos que asi se desee.


Con respecto a la opcion 1

2) al final del presente te apunto algunas sugerencias para el metodo de
la opcion 1 comentada

[por ejemplo] puedes 'dejarlo' que 'modifique' [o... realmente que INTENTE
modificar] lo que quiera y...
-> por codigo TU -> RESTABLECES/ajustas/decides/indicas/... las
propiedades [del .PageSetup] a los 'defaults' que quieras :))
-> [solo toma en cuenta que] -> TODA propiedad QUE NO ESTABLEZCAS TU [de
manera 'expresa' y NO 'implicita'] en el codigo...
-> seran propiedades que el usuario SI podra 'manipular' [o
re/establecer] a su 'libre voluntad y criterio' :-((
[p.e. si NO 'limpias' por codigo la propiedad '.PrintTitleRows' -> el
usuario podria establecer 'los suyos'] :))
-> [ademas] no importa si el usuario las cambia [en la vista
preliminar]... al momento de imprimir... 'volveran' TUS propiedades ;)
[asi que]... ASEGURATE de establecer TU las propiedades necesarias
[margenes, orientacion, area, calidad, etc. etc. etc.] ;)
-> el verdadero 'problema'... seria si tu libro se abre SIN 'permiso'
de usar las macros -?-
-> no olvides que son [solo] 'ejemplos'... y que adaptarlo a tu 'real'
necesidad... dependera de los comentarios que hagas ;)
1) en el modulo de codigo del libro [ThisWorkbook] ==> Private Sub Workbook_BeforePrint(Cancel As Boolean)
If HojaEnGrupo("hoja1") Then Configura_mi_hoja
End Sub




CUAL ES EL MODULO DE CODIGO NORMAL (MODULO1, FUNCIONES????)

2) en un modulo de codigo 'normal' ==> Option Private Module
Function HojaEnGrupo(ByVal Nombre As String) As Boolean
Dim Hoja As Worksheet
For Each Hoja In ActiveWindow.SelectedSheets
If LCase(Hoja.Name) = LCase(Nombre) Then HojaEnGrupo = True: Exit For
Next
End Function
Sub Configura_mi_hoja()
With Worksheets("hoja1").PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
.PrintArea = "$A$1:$F$20"
.LeftHeader = Format(Date, "mm/dd/yy")
.RightFooter = "Hoja 35"
' no olvides controlar/incluir/agregar/...' TODAS las propiedades
necesarias :))
End With
End Sub



Como coloco los parametros o caracteristicas del "Encabezado - Personalizar
Encabezado" y "Pie de Pagina - Personalizar Pie de Pagina" ???, que es uno
de los puntos que no se deberian cambiar al imprimir.

Cualquiera de los dos opciones si se logra el cometido es buena, por
supuesta la opcion 2 es mas sencilla, pero como te dije quisiera que no se
imprimiera la HOJA a menos que sea eso lo que se requiere en algun momento,
porque puede darse el caso que se requiera la vista previa para ver como va
quedando la informacion y no querer imprimirla aun hasta concluir los
datos.

Saludos y Gracias

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