Freigeben über


Objektmodellaufrufe können beim Beenden der geschützten Ansicht vom WorkbookOpen-Ereignis fehlschlagen.

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie verfügen über ein Excel-Add-In (VBA, COM oder VSTO), das das WorkbookOpen Ereignis erfasst und Objektmodellaufrufe aus diesem Ereignishandler in Excel sendet.

  • Sie öffnen eine Arbeitsmappe in der geschützten Ansicht (aufgrund des Öffnens einer Arbeitsmappe aus dem Internet, der E-Mail-Anlage usw.), und wählen Sie " Bearbeitung aktivieren" aus.

  • Einige Objektmodellaufrufe (z. B Sheet.Activate. ) aus dem WorkbookOpen Ereignishandler schlagen mit einem Laufzeitfehler 1004 - Methode des Objekts fehlgeschlagen fehl.

Ursache

Wenn Sie auf "Bearbeitung aktivieren" klicken, wechselt die Arbeitsmappe aus der geschützten Ansicht in die Normalansicht. Beim Übergang wird das WorkbookOpen Ereignis ausgelöst, bevor die geschützte Ansichtsarbeitsmappe geschlossen wird, was zu einem Fehler bei Objektmodellaufrufen führt.

Lösung

Sie können das Problem umgehen, indem Sie eine der folgenden Aktionen ausführen:

  • Wenn der Speicherort, an dem die Arbeitsmappen geöffnet werden, vertrauenswürdig ist, fügen Sie diesen Speicherort zu den vertrauenswürdigen Speicherorten von Excel hinzu.

  • Defer Object Model calls to outside of the WorkbookOpen event to WorkbookActivate event.

Status

Microsoft hat bestätigt, dass es sich um ein Problem in den Microsoft-Produkten handelt, die im Abschnitt "Gilt für" aufgeführt sind.

Weitere Informationen

Hier ist ein BEISPIEL-VBA-Code, der veranschaulicht, wie Sie Aufrufe des Objektmodells an das WorkbookActivate Ereignis zurückstellen können.

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