Engañar a BeforeClose

04/08/2006 - 03:48 por klomkbock | Informe spam
Hola a todos

Tengo una barra de herramientas que se crea y se elimina en los eventos
Activate y Deactivate, respectivamente, de Thisworkbook.

Funciona bastante bien, pero al ir a cerrar el libro, si por lo que sea se
cancela el cierre, la barra se elimina y no aparece a no ser que cierres y
vuevas a abrir, o que abras otro libro y vuelvas a el.

Creo haber visto en algun lado que se puede "engañar" al evento
BeforeClose pero no se donde. He probado a manipular su argumento Cancel,
pero la verdad es que no se como hacerlo, y no he logrado nada.

Si podeis echarme una mano os lo agradezco.

Un saludo y hasta pronto.
Ivan

PD: a continuacion expongo los codigos que intervienen.

Private Sub Workbook_Activate()
Dim MiBarra As CommandBar
Application.ScreenUpdating = False
Set MiBarra = Application.CommandBars.Add
With MiBarra
.Name = "BarraPrueba"
.Position = msoBarTop
.Visible = True
End With
Application.ScreenUpdating = True
Call AñadirBotonesABarraPrueba
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
On Error Resume Next
Application.CommandBars("BarraPrueba").Delete
'' If Cancel = True Then Call AñadirBotonesABarraPrueba
On Error GoTo 0
Application.ScreenUpdating = True
End Sub

Private Sub Workbook_Deactivate()
Application.ScreenUpdating = False
On Error Resume Next
Application.CommandBars("BarraPrueba").Delete
On Error GoTo 0
Application.ScreenUpdating = True
End Sub

Preguntas similare

Leer las respuestas

#1 ST
04/08/2006 - 19:32 | Informe spam
Héctor Miguel :
a esto se debe a que algunos tengamos barras de Herramientas
"Fantasmas"?
es decir aparece la barra en el cuadro "Personalizar barras de
herramientas", pero no tiene nombre y cuando deseo seleccionar la barra
para eliminarla no me deja hacerlo ???

alguna idea para quitar esta barra?

saludos

ST :-)
Respuesta Responder a este mensaje
#2 klomkbock
04/08/2006 - 21:17 | Informe spam
Hola Hector Miguel, muchas gracias de nuevo.

Si no te importa te comento un poco a traves de tu respuesta.

> 1) si se tiene la opcion para 'cancelar' el cierre de un libro [o la


salida de la aplicacion] se debera a cambios ocurridos...
despues de los cuales [si no se han guardado] la aplicacion le pregunta


al usuario [con la posibilidad de cancelar]

.-la verdad es que no acabo de entender el funcionamiento del argumento
cancelar en este tipo de eventos, aunque he de reconocer que tampoco me he
puesto a ello con demasiado ahinco.


2) dado que los codigos que manejas tanto en los eventos '_beforeclose' y


'_deactivate' del objeto 'thisworkbook' son lo mismo...

.- en este caso, y de una manera verdarderamente ilogica, no se porque
estaba convencido de que el evento deactivate no se generaba al cerrar el
libro. Es un buen dato, que ademas devuelve un poco de logica al asunto.

3) solo toma -muy- en cuenta que al estar 'creando' y eliminando


commandbars... estas 'afectando' al archivo .XLB [de cada usuario]

[y hasta donde se sabe]... es un archivo de 'facil corrupcion' :-((



.- no tenia ni idea de que el 'trasiego' de barras de herramientas podia
afectar negativamente a ningun archivo.

Mi intencion era que cuando los receptores del archivo lo instalen en su
ordenador, tuvieran que realizar los menos pasos posibles, sobre todo si
requieren terminologia mas o menos tecnica (instalar complementos, o
similar), que si para mi sigue siendo compleja a pesar de mis meses
deambulando por estas paginas, para ellos puede suponer desistir a las
primeras de cambio.

Por otro lado pensaba que el exceso de barras de herramientas afectaba al
rendimiento de excel, de ahi su elminacion/creacion segun necesidad.

¿Quizas seria mejor simplemente ocultarlas y mostrarlas segun se
active/desactive el libro? ¿o tambien podria corromper el archivo .XLB?

¿que otras opciones podria utilizar para tener la barra de marras
disponible solo para ese libro y que a la vez no afecte excesivamente al
rendimiento/integridad del sistema?

Como ves te devuelvo mas preguntas/dudas todavia que en la primera
consulta.

De nuevo, si puedes aclararmelo te lo agradezco.

Un saludo y hasta pronto.
Ivan

PD: como comenta ST en el otro post, a mi tambien me aparecen con cierta
asiduidad barras de herramientas sin nombre, aunque en mi caso, sí puedo
eliminarlas desde personalizar.
Respuesta Responder a este mensaje
#3 Héctor Miguel
04/08/2006 - 23:01 | Informe spam
hola, castilo ?

a esto se debe a que algunos tengamos barras de Herramientas "Fantasmas"?
es decir aparece la barra en el cuadro "Personalizar barras de herramientas"
pero no tiene nombre y cuando deseo seleccionar la barra para eliminarla no me deja hacerlo ???
alguna idea para quitar esta barra?



mas bien [me inclino por suponer que]... esa/s barra/s tiene/n como nombre algun caracter 'no imprimible' -?-
y probablemente hayan sido generadas por codigos 'externos' [algun complemento de terceros instalado ?]

1) si te es posible modificar el nombre de esa/s barra/s... intenta a eliminarlas luego de re-nombrarla/s -?-
2) prueba desinstalando/deshabilitando complementos instalados 'no propios' de la aplicacion -?-
3) pudiera haber otras medidas/alternativas/... [como p.e.]
- eliminar el archivo de la configuracion [.XLB] <= OJO que perderias todos tus arreglos personalizados :-(
- hacer un bucle que elimine las barras 'no deseadas' [sabiendo +/- exactamente cuales son] -?-

comentas [si hubiera] algun detalle mas... 'significativo' ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Héctor Miguel
05/08/2006 - 07:01 | Informe spam
hola, Ivan !

Si no te importa te comento un poco a traves de tu respuesta.



-> te voy haciendo sugerencias de igual forma... 'entre lineas' :))

... no acabo de entender el funcionamiento del argumento cancelar en este tipo de eventos [...]



-> [generalmente] establecer el argumento Cancel de un evento en True 'sirve' para evitar que suceda 'el evento' [p.e.]
- en un '_beforeclose' evita que suceda el 'close'
- en un '_beforesave' evita que suceda el 'save'
- en un '_beforeprnt' evita que suceda el 'print' [y tambien el 'printpreview']

... no se porque estaba convencido de que el evento deactivate no se generaba al cerrar el libro...



-> revisa: -> http://www.cpearson.com/excel/events.htm
en la parte final del articulo hay una seccion: -> Order Of Event Procedures ;)

- no tenia ni idea de que el 'trasiego' de barras de herramientas podia afectar negativamente a ningun archivo.



-> tampoco es una 'regla ineludible'... [es solo que no deja de existir esa posibilidad] -?-

Mi intencion era que cuando los receptores del archivo lo instalen en su ordenador, tuvieran que realizar los menos pasos posibles
sobre todo si requieren terminologia mas o menos tecnica (instalar complementos, o similar),
que... para ellos puede suponer desistir a las primeras de cambio.
... pensaba que el exceso de barras de herramientas afectaba al rendimiento de excel, de ahi su elminacion/creacion segun necesidad.
Quizas seria mejor simplemente ocultarlas y mostrarlas segun se active/desactive el libro? o tambien podria corromper el archivo .XLB?
... otras opciones... para tener la barra... disponible solo para ese libro y que a la vez no afecte... al rendimiento/integridad del sistema?



-> opciones puede haber suficientes [dependeria de cada tipo de necesidad] -?-
si fuera necesario 'atrapar' si el evento '_beforeclose' ha ocurrido en realidad o ha sido cancelado...
revisa: -> Handling the Workbook BeforeClose Event -> http://j-walk.com/ss/excel/tips/tip78.htm

si cualauier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#5 klomkbock
06/08/2006 - 02:13 | Informe spam
Hola de nuevo, Hector Miguel

Voy a echar un vistazo a las paginas y ya de paso a intentar actualizar mi
precario ingles.

Muchas gracias por todo

Un saludo y hasta pronto.
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida