Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 demWorkbookOpen
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 toWorkbookActivate
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