Run-Time Errors Blijven Uit in Word VBA

Status
Niet open voor verdere reacties.

florismk

Gebruiker
Lid geworden
27 mrt 2009
Berichten
5
Voor mijn klant ontwikkel ik een aantal addin templates. Het debuggen en het schrijven van robuuste error handling wordt erg bemoeilijkt door het uitblijven van run-time errors. In plaats van een RTE te throwen, stopt de IDE de uitvoering van mijn macro's zonder enige melding.

Bijvoorbeeld:

Sub Test()
Dim a
1: On Error GoTo Handler
2: a = 3 / 0
3: On Error GoTo 0
4: a = 3 / 0
5: Exit Sub
Handler:
6: MsgBox "Error: " & Err.Number
7: Resume Next
End Sub

Met de instelling "Break on unhandled errors" zou deze code als volgt moeten worden uitgevoerd:

Regel 1, 2, 6, MsgBox, 7, 3, 4, RTE 11

Wat er in feite gebeurt is dit:

Regel 1, 2, code stopt zonder melding.

Wat kan hier aan de hand zijn?
 
Hoewel je niet vermeldt in welke applicatie je de addins maakt:

Kijk in de VBEditor/menubalk/extra/opties.../tabblad Algemeen/fouten onderscheppen/ vink onderbreken bij alle fouten aan.
 
Bedankt voor je reactie. Die instelling doet helaas helemaal niets; Break On Unhandled en Break On All geven precies hetzelfde probleem.
 
Maak je dan gebruik van geneste sub's ?
 
Ja, vrij diep genest zelfs, inclusief code in Classes.

Ik heb overigens gejokt over de Break-opties:

bij Break On Unhandled Errors werkt mijn foutafhandeling wel, maar stopt de code zonder melding als er geen foutafhandeling is

bij Break On All Errors stopt de code zonder melding bij elke fout
 
De on error instruktie werkt alleen op het nivo waarin ie staat. Iedere nesting vergt een nieuwe foutafhandelingsinstruktie. Standaard betekent een fout in een aangeroepen sub terugspringen naar het aanroepende nivo en daar verder gaan.
 
Niet precies waar. Error Handling werkt op het niveau waar hij is geïmplementeerd en op elk niveau daaronder (alle aangeroepen procedures zonder eigen error handling).

Neemt niet weg dat de run-time errors zonder handling horen te worden gemeld (inclusief nummer, description en Debug-knop), en dat is nu juist wat niet gebeurt.

Als er wel handling actief was, zou er naar afhandelingscode moeten worden gesprongen (On Error GoTo) of naar de volgende regel (On Error Resume Next). Zonder handling zou de code moeten stoppen op de regel waar de fout optrad, met die regel gemarkeerd.

Dat gebeurt allemaal niet; de uitvoering van de code stopt domweg.
 
Het probleem bleek te worden veroorzaakt door een ongedocumenteerde WordBasic-call in een addin template van de firma Hummingbird (DOCS Open document management system).

WordBasic.DisableInput 3

De .DisableInput-method is (was) wel gedocumenteerd, maar parameter 3 niet. Volgens het inline commentaar bij de regel is de bedoeling dat het onderbreken van de macro met ESC wordt verhinderd; in de praktijk worden RTE's om zeep geholpen (en kan je macro's helemaal niet onderbreken met ESC).

Overigens sowieso een verbijsterend slecht geschreven add...
 
Dank voor je melding.
Dat is dan blijkbaar de voorloper van
VBA

Code:
    Application.EnableCancelKey
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan