Avatar billede kjeld_klit Nybegynder
16. maj 2006 - 15:46 Der er 6 kommentarer og
1 løsning

Aflæse hvor koden fejler?

Findes der en måde der fortæller hvor eller hvilken handling der genererer en fejl?

Jeg bruger: Err.Number og Err.Description, men de fortæller jo ikke hvor i koden fejlen sker.

Jeg kan selvfølgelig deaktivere 'On Error GoTo Fejlbehandling og Debug viser det, men kan jeg få oplysningen bygget ind i min Fejlbehandling?

Mvh/Kjeld
Avatar billede Slettet bruger
19. maj 2006 - 10:16 #1
Der er et par andre properties i Err objektet udover Err.Number og Err.Description, bla:

Err.HelpContext
Err.HelpFile

Fra Excel Help:
-----------------------

HelpContext Property Example
This example uses the HelpContext property of the Err object to show the Visual Basic Help topic for the Overflow error.

Dim Msg
Err.Clear
On Error Resume Next
Err.Raise 6 ' Generate "Overflow" error.
If Err.Number <> 0 Then
    Msg = "Press F1 or HELP to see " & Err.HelpFile & " topic for" & _
    " the following HelpContext: " & Err.HelpContext
    MsgBox Msg, , "Error: " & Err.Description, Err.HelpFile, _
Err.HelpContext
End If

--------------------------

Du burde så kunne åbne den relevante side i Excels hjælpefiler og vise dem for brugeren.

Alternativt kan du oprette en global variabel (String) som du overskriver hver gang du kalder en Sub, med navnet på den Sub der lige er blevet kaldt. Når der opstår en fejl kan din fejlbesked bare skrive værdien af variablen som så vil indeholde navnet på den sidst kaldte Sub.

Det er ikke perfekt men bedre end ingenting.
Avatar billede kjeld_klit Nybegynder
19. maj 2006 - 17:01 #2
Ja det er netop det du beskriver til slut jeg gør, men det er besværligt hvis man tilføjer flere rutiner midt i det hele, og heller ikke så tydeligt som ønskeligt.

Du får points for venlig interesse.
Avatar billede Slettet bruger
19. maj 2006 - 21:32 #3
Jeg takker for point.

Efter lidt mere graven i sagen fandt jeg frem til en udokumenteret funktion der gør det du ønsker.

Funktionen hedder: VBA.Information.Erl  (Error Line)

Hvis du i VBA editoren åbner object browseren (Tryk F2), højreklikker derefter i browseren og vælger "Show hidden members" så burde Erl() dukke op under VBA.Information objektet.

Ulempen ved funktionene er at den kræver at din kode er nummereret, ellers returnerer den bare 0 som default.

Eksempel:

---------------------

Sub ERL_Test()

10 Dim Msg  ' If an error occurs, construct an error message
 
20 On Error Resume Next    ' Defer error handling.
30 Err.Clear
40 Err.Raise 6    ' Generate an "Overflow" error.
   
' Check for error, then show message.
50 If Err.Number <> 0 Then
60    Msg = "Error # " & Str(Err.Number) & " was generated by " _
            & Err.Source & Chr(13) & Err.Description
70    MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
80 End If

90 MsgBox "Fejl i linie: " & VBA.Information.Erl

End Sub

------------------------

Hvis man ikke gider nummerere samtlige kodelinier, kan man vel nøjedes med de linier der mest sandsynligt kan udløse en fejl.
Avatar billede Slettet bruger
19. maj 2006 - 21:41 #4
Der findes et ganske udemærket freeware værktøj der hedder MZ-Tools, der fungerer som et Add-in til VBA editoren:

http://www.mztools.com/v3/mztools3.htm

Den kan blandt mange andre nyttige ting, automatisk indsætte linienumre i din VBA kode.
Avatar billede kjeld_klit Nybegynder
20. maj 2006 - 08:48 #5
Tak for din hjælp blackadder - det er bare super. Jeg har kun kigget kort på det, men det ser rigtig fornuftigt ud.

Og MZ-Tools er da genial og jeg havde nok ikke nummereret 14000 linier manuelt - tak for hint.

Men nu er jeg lidt dum ;-) Min aplikation giver vel ikke problemer på andre maskiner der ikke har MZ-Tools - jeg orker ikke hvis jeg skal sikre diverse 3-parts ting er registreret på fremmede maskiner for at mit lille program virker?

Mvh/Kjeld
Avatar billede Slettet bruger
20. maj 2006 - 08:55 #6
MZ-Tools laver egentlig ikke noget som man ikke selv ville kunne gøre manuelt. Den gør det bare hurtigere og nemmere.

Hvis ellers din kode kan køre på din egen maskine, så burde den også kunne køre på andre maskiner hvor MZ-Tools ikke er installeret.
Avatar billede kjeld_klit Nybegynder
20. maj 2006 - 09:01 #7
Det var også det jeg havde forstået...
MZ-Tools har nu fanget 1 procedure og 3 variabler som ikke bliver brugt til noget - det var da vist på tide der blev ryddet lidt op
Tak igen, det er lige noget jeg kan bruge
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester