Al IT forbruger energi, men cloudbaseret IT forbruger rigtig megen energi.
26. august 2024
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.
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.
Synes godt om
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.
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.
Synes godt om
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:
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
Synes godt om
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.
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
Synes godt om
Ny brugerNybegynder
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.