Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 elWorkbookOpen
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 aWorkbookActivate
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