2011-03-25 31 views
8

Tengo una macro de evento Workbook_Open (y está en ThisWorkbook) que no siempre se ejecuta.El libro de Excel Open Event macro no siempre se ejecuta

  • Si Excel está cerrado y hago doble clic en el archivo .xls desde el Explorador de Windows, se ejecuta.
  • Si ejecuto Excel desde Inicio/Programas (sin archivo .xls) y luego abro el archivo, se ejecuta.
  • Si ya abrí el archivo en Excel, pero luego cierro el archivo (dejando Excel abierto) y lo vuelvo a abrir, la macro no se ejecuta.

Tengo la seguridad establecida en medio y habilito macros cada vez que se abre.

¿Qué debo hacer para que la macro se ejecute cada vez que la abro, no solo la primera vez para esta sesión de Excel?

(por cierto, se trata de Excel 2003)

+0

Todo lo que puedo decir es que funciona en Excel 2010 :( –

+0

¿Tiene un evento Workbook_BeforeClose? –

+0

Después de abrir el libro en el caso 3, tendrán el resto de macros trabajar? –

Respuesta

4

pensé que esto era the most cogent article sobre este problema (que es una larga nunca explicó fallo completamente errática que exposiciones Excel). (enlace inactivo)

En resumen, en muchos casos es una cuestión de tiempo debido a que el libro de trabajo está tratando de calcular cosas cuando se abre y eso obstaculiza el evento Workbook_Open. La forma de probar en los suyos para ver si es para esta situación, es primero cambiar el nombre de cualquier UDF o Macros llamadas por celdas para que no se llamen y ver si eso cambia algo.

+0

¿Quizás cambiar el cálculo a manual tampoco podría hacer el truco? –

+0

Acabo de intentar agregar el código del artículo que mencionas; no pareció ayudar. :-(Y hay un montón de pestañas y un montón de código ... es difícil cambiar el nombre de todo ... ¿alguna sugerencia sobre cómo empezar? – ScottSM

+0

¡Oh, pero muchas gracias por publicar el enlace a ese artículo! ¡Sé que no estoy solo en esto! – ScottSM

0

algunas sugerencias:

  1. intenta firmar el libro con un certificado digital. Agregue este certificado a la tienda Trusted Certificates e inténtelo de nuevo.
  2. Si esto es específico de la máquina, intente reinstalar Office.

Asegúrese de tener los últimos service pack (s) aplicados.

2

Tuve el mismo problema.

Probé un libro en mi computadora sin ningún problema. Después de distribuirlo a mis clientes, me dijeron que algunos cuadros combinados permanecían vacíos. Estos generalmente se llenan desde la rutina workbook_open. Intenté cosas diferentes para habilitar el workbook_open -Event - sin éxito.

Finalmente, descubrí que deshabilitar todas las funciones definidas por el usuario (UDF) conducen a la ejecución correcta de workbook_open.

Como mi libro de trabajo se abre desde otro archivo, primero intentaré establecer el cálculo en manual y luego ejecutar manualmente el workbook_open. Esto se puede hacer mediante la definición que

public sub workbook_open 

en lugar de

private sub workbook_open 

extraño, que no lo hace sobresalir vez que esto por sí mismo ...

+2

Se me ocurrió una solución considerando una respuesta a un [enlace] similar (http://stackoverflow.com/questions/9006902/workbook-open-is-not-executed-with -excel-ya-corriendo). Una variable booleana privada en el libro de trabajo se usa para determinar si el workbo El evento ok_open se activó. Si no, agregué controladores a workbook_activate y workbook_sheet_change y volví a ejecutar el evento workbook_open si la variable no estaba configurada. – DrMarbuse

2

Una respuesta tardía (mejor que nada).

He tenido este problema varias veces (con Excel 2010). La solución que siempre ha funcionado (hasta ahora) fue: eliminar el formato condicional, en particular si contiene UDF como condiciones. Como @LanceRoberts escribió en una publicación anterior, en última instancia se debe a que los cálculos UDF "anularon" el evento Open, pero descubrí que son particularmente dañinos si se usan en formatos condicionales.

+0

Spot on - eliminación de UDF utilizado en formato condicional me lo resolvió. – assylias

0

Me encontré con el mismo problema, y ​​lo evito utilizando la configuración de seguridad. Utilizo la configuración de opciones luego el centro de confidencialidad, luego "parámetros del centro de confidencialidad" (lo siento, pero es una traducción de la versión en francés :-p) y luego "archivos adjuntos" o algo como esto. Y agregue el archivo que contiene el libro de Excel en. Y finalmente funcionó después de eso.

Miró por todas partes y nunca encontró esa solución.

esperanza de que va a ayudar a alguien

0

tenían el mismo problema y creo que lo tengo. Tuve que colocar un sub privado de Workbook_BeforeClose en su lugar que guardaba el libro de trabajo si no era de solo lectura; y un Workbook_BeforeSave que aseguró Application.EnableEvents = True. Esto parece permitir que el Workbook_Open se dispare. No 100% seguro por qué pero parece repetible, incluso en un nuevo libro de trabajo en blanco.

2

Estaba experimentando un comportamiento casi idéntico, y descubrí que se debe a un error que ocurre si las reglas de formato condicional se están extrayendo. Resulta que si las reglas de formato condicional se basan en cualquier configuración de las macros, y eso causa que el formato condicional a error, la macro Workbook_Open ni siquiera intentará ejecutarse.

Para probar, haga una copia de su archivo y elimine todo el formato condicional del libro de trabajo. Guarde y vuelva a abrir. Si soluciona el problema, vuelva a trabajar las reglas de formato condicional para que no dependa de las funciones/valores que se romperán antes de que se ejecute la macro Workbook_Open.

+0

Pero necesito mi formato condicional. ¿Cómo puedo evitar que lo haga hasta que se cargue el archivo? – Bigtree

+0

Parece que no hay forma de hacerlo. Nuevamente, si define sus reglas condicionales para que no dependan de esos valores que son dependientes de las macros (lo que normalmente se puede hacer si piensa en el problema, pero es específico para cada caso), puede resolver el problema. Eliminar el formato condicional es solo un paso de prueba para identificar la regla de formato específica que crea el problema. –

0

Esto sucede cuando un libro de trabajo se cierra con Application.EnableEvents establecido en falso, y luego abre otro libro dentro de la misma instancia de excel abierta. Para evitar esto, asegúrese de que todos sus procesos que deshabiliten eventos, vuelva a habilitarlos antes de finalizar. Atención especial a los comandos "Fin", manejadores de errores y oraciones "salir del sub" en el medio de su programa.

0

Lo que hace que su otro archivo, el que abrió primero, tenga un procedimiento Workbook_Open; Excel no lo ejecuta por segunda vez.

0

Esto me pasó a mí también y me llevó horas averiguarlo.

Resulta que la función TODAY() en Excel estaba causando el problema. Una vez eliminado de mi hoja de trabajo, todo funcionó nuevamente. Muy extraño error.

0

Para agregar a la publicación de Arturo Llano: El siguiente código se utilizó para supervisar el evento Workbook_Open y luego ejecutar ProcessX cada vez que se abrió un libro de trabajo.

ProcessX contenía una instrucción End. El resultado fue que solo funcionó la primera vez. The End eliminó AppX, por lo que no hubo más monitoreo de eventos. La eliminación de End solucionó el problema. (El uso de End es una mala práctica, ya que detiene todo sin ningún tipo de limpieza o terminación de otros recursos).

'Código en: Personal.xlsb ThisWorkbook

Public WithEvents AppX As Application 

Private Sub Workbook_Open() 

    Set AppX = Application 

End Sub 

Private Sub AppX_WorkbookOpen(ByVal wb As Workbook) 

    'A 1-second delay to allow opening to complete before ProcessX starts. 

    Application.OnTime Now + TimeValue("00:00:01"), "ProcessX" 

End Sub 
Cuestiones relacionadas