Leggi in inglese

Condividi tramite


Le chiamate al modello a oggetti potrebbero non riuscire dall'evento WorkbookOpen quando si esce da Visualizzazione protetta

Sintomi

Prendi in considerazione lo scenario seguente:

  • Si dispone di un componente aggiuntivo di Excel (VBA, COM o VSTO) che acquisisce l'evento WorkbookOpen e effettua chiamate a Object Model in Excel da questo gestore eventi.

  • Aprire una cartella di lavoro in visualizzazione protetta (a causa dell'apertura della cartella di lavoro da Internet, allegato di posta elettronica e così via) e selezionare Abilita modifica.

  • Alcune chiamate al modello a oggetti (ad esempio , Sheet.Activate) eseguite dal WorkbookOpen gestore eventi hanno esito negativo con un errore di runtime 1004 - Metodo dell'oggetto non riuscito.

Causa

Facendo clic su Abilita modifica la cartella di lavoro passa dalla visualizzazione protetta alla visualizzazione normale. Durante la transizione, l'evento viene generato prima della WorkbookOpen chiusura della cartella di lavoro della visualizzazione protetta, causando un errore nelle chiamate al modello a oggetti.

Risoluzione

È possibile risolvere il problema in uno dei due casi:

  • Se il percorso da cui vengono aperte le cartelle di lavoro è attendibile, aggiungere tale percorso ai percorsi attendibili di Excel.

  • Rinviare le chiamate del modello a oggetti all'esterno dell'evento all'evento WorkbookOpen WorkbookActivate .

Stato

Microsoft ha confermato che si tratta di un problema nei prodotti Microsoft elencati nella sezione "Si applica a".

Ulteriori informazioni

Ecco un codice VBA di esempio che illustra come rinviare le chiamate del modello a oggetti all'evento WorkbookActivate .

Visual Basic, Applications Edition
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