Compartir a través de


Es posible que se produzca un error en las llamadas del modelo de objetos desde el evento WorkbookOpen al salir de la vista protegida.

Síntomas

Considere el caso siguiente:

  • Tiene un complemento de Excel (VBA, COM o VSTO) que captura el WorkbookOpen evento y realiza llamadas de Modelo de objetos a Excel desde este controlador de eventos.

  • Abra un libro en la vista protegida (debido a la apertura del libro desde Internet, datos adjuntos de correo electrónico, etc.) y seleccione Habilitar edición.

  • Algunas llamadas del modelo de objetos (por ejemplo, Sheet.Activate) realizadas desde el WorkbookOpen controlador de eventos producen un error en tiempo de ejecución 1004: error en el método de objeto.

Causa

Al hacer clic en Habilitar la edición , el libro pasa de la vista protegida a la vista normal. Durante la transición, el WorkbookOpen evento se desencadena antes de que se cierre el libro de vista protegido, lo que da lugar a un error en las llamadas del modelo de objetos.

Solución

Puede solucionar el problema:

  • Si la ubicación desde la que se abren los libros es de confianza, agregue esa ubicación a las ubicaciones de confianza de Excel.

  • Aplazar llamadas del modelo de objetos a fuera del WorkbookOpen evento a WorkbookActivate evento.

Estado

Microsoft ha confirmado que es un problema en los productos de Microsoft que aparecen en la sección "Se aplica a".

Más información

Este es un código VBA de ejemplo que muestra cómo podría aplazar las llamadas del modelo de objetos al WorkbookActivate evento.

Option Explicit
Public WithEvents oApp As Excel.Application 
Private bDeferredOpen As Boolean 
Private Sub oApp_WorkbookActivate(ByVal Wb As Workbook) 
If bDeferredOpen 
Then bDeferredOpen = False Call WorkbookOpenHandler(Wb) 
End If End Sub 
Private Sub oApp_WorkbookOpen(ByVal Wb As Workbook) 
Dim oProtectedViewWindow As ProtectedViewWindow On Error Resume Next 'The below line will throw error (Subscript out of range) 
if the workbook is not opened in protected view. 
Set oProtectedViewWindow = oApp.ProtectedViewWindows.Item(Wb.Name) On Error GoTo 0 'Reset error handling 
If oProtectedViewWindow Is Nothing 
Then bDeferredOpen = False Call WorkbookOpenHandler(Wb) 
Else 'Delay open actions till the workbook gets activated. bDeferredOpen = True 
End If End Sub 
Private Sub WorkbookOpenHandler(ByVal Wb As Workbook)'The actual workbook open event handler code goes here... 
End Sub