Waarom werkt zoiets simpels niet?

  • Onderwerp starter Onderwerp starter dprod
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

dprod

Gebruiker
Lid geworden
2 jun 2010
Berichten
80
Beste mede forumleden,

Omdat ik het bestand zo klein mogelijk wil houden, importeer en exporteer ik de module bij het openen/sluiten van het bestand. Nu wil ik bij before_close de volgende code uitvoeren maar hij geeft dan een fout melding...

"Fout 9 Tijdens uitvoering:"
"Het subscript valt buiten het bereik"
Vervolgens verwijst deze naar het 'If ThisWorkbook.VBProject.VBComponents("ClassModule") Is Nothing Then' Statement.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

If ThisWorkbook.VBProject.VBComponents("ClassModule") Is Nothing Then
    Exit Sub
Else
    ShutdownFileSystem
End If

End Sub

Iemand enig idee?
Alvast bedankt...

Gr,
dprod
 
Het VBComponent met de naam "ClassModule" bestaat niet, dus als je dat object aanroept krijg je een foutmelding.

Wat je wel kan doen is het volgende:

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

    If Not VBComponentExists("ClassModule") Then
        Exit Sub
    Else
        ShutdownFileSystem
    End If

End Sub

Private Function VBComponentExists(ByVal sName As String) As Boolean
    
    On Error Resume Next
    VBComponentExists = _
        TypeName(ThisWorkbook.VBProject.VBComponents(sName)) = "VBComponent"
    
End Function
 
Laatst bewerkt:
Ja via een Functie kan natuurlijk ook...
Ik was er toevallig net uit, door in de sub al te bepalen of "ClassModule" wel/niet bestaat.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim VBc As Object

    On Error Resume Next
    Set VBc = ThisWorkbook.VBProject.VBComponents("ClassModule")

    If VBc Is Nothing Then
        Exit Sub
    Else
        ShutdownFileSystem
    End If

End Sub

Opgelost! Dank...
 
Wel even
Code:
On Error goto 0
invoeren na
Code:
Set VBc = ThisWorkbook.VBProject.VBComponents("ClassModule")
 
Wat doet die "GoTo 0" eigenlijk?

Bij resume next gaat ie gewoon verder na die regel..
en met GoTo 0? reset hij de Error ofzo?

Als je dat niet doet werkt hij namelijk ook gewoon, dus nu zie ik er de meerwaarde er niet van in.

Gr,
dprod
 
On Error Goto 0 reset je Error en je error catch.

dus als je na On Error Resume next geen On Error goto 0 invoert,
zal voor de gehele procedure, inclusief alle subprocedures "On Error resume next" worden vastgehouden, waardoor je bij het optreden van fouten niet direct en/of precies zou kunnen achterhalen waar de fout zit.

Daardoor gebruikte ik ook een functie. na het aflopen van een procedure/functie waarin je On error resume next plaatst, geldt On Error resume next niet meer.
 
Dat is een duidelijke uitleg.
En eigenlijk ook heel logisch!

Ik ga de code aanpassen en post hier eventueel nog de correctie!

Gr,
dprod
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan