Aanroepen van objectmodellen kunnen mislukken vanuit de gebeurtenis WorkbookOpen bij het afsluiten van de beveiligde weergave
Artikel
Van toepassing op:
Excel 2013, Excel 2016, Excel 2019, Excel 2021
Symptomen
Bekijk het volgende scenario:
U hebt een Excel-invoegtoepassing (VBA, COM of VSTO) die de WorkbookOpen gebeurtenis vastlegt en objectmodelaanroepen uitvoert in Excel vanuit deze gebeurtenis-handler.
U opent een werkmap in de beveiligde weergave (vanwege het openen van een werkmap vanaf internet, e-mailbijlage enzovoort) en selecteert u Bewerken inschakelen.
Sommige objectmodel-aanroepen (bijvoorbeeld Sheet.Activate) die worden uitgevoerd vanuit de WorkbookOpen gebeurtenishandler, mislukken met runtimefout 1004 - Methode van object is mislukt.
Oorzaak
Als u klikt op Bewerkingsovergangen inschakelen, wordt de werkmap van de beveiligde weergave naar de normale weergave weergegeven. Tijdens de overgang wordt de gebeurtenis geactiveerd voordat de WorkbookOpen beveiligde weergavewerkmap wordt gesloten, wat resulteert in een fout bij aanroepen van het objectmodel.
Oplossing
U kunt het probleem omzeilen door:
Als de locatie van waaruit de werkmappen worden geopend, wordt vertrouwd, voegt u die locatie toe aan de vertrouwde locaties van Excel.
Objectmodelaanroepen naar buiten de WorkbookOpen gebeurtenis naar WorkbookActivate gebeurtenis uitstellen.
Status
Microsoft heeft bevestigd dat het een probleem is in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.
Meer informatie
Hier volgt een voorbeeld van VBA-code die laat zien hoe u objectmodelaanroepen naar de WorkbookActivate gebeurtenis kunt uitstellen.
Visual Basic for Applications
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