Avatar billede kisbye Nybegynder
07. september 2001 - 11:48 Der er 9 kommentarer og
1 løsning

Err Handler vil ikke virke

Jeg kan ikke få den Error Handler til at virke.
Den første (If Err.Number = 53 Then GoTo CantFindSettings) virker fint.
Men den anden virker ikke: If Err.Number = 53 Then GoTo CantFindIco2 virker ikke, og programmet går i fejl ved FileLength = FileLen(\"Data\\Icons\\Ots2.ico\")

Jeg har sat err.clear ind, men lige meget hjælper det.
jeg har løst problemmet før i en anden sub, men hvordan fandt jeg Aldrig ud af.

V.H Kisbye
Avatar billede kisbye Nybegynder
07. september 2001 - 11:48 #1
Public Sub ProgFileErr()
On Error GoTo 0
Dim FileLength As Long
Dim GenSettings As Boolean
Dim GenIcon2 As Boolean
Dim TimeHold As Date
Dim ExpandHoldFrom As String
Dim ExpandHoldTo As String
Dim fs As FileSystemObject

Set fs = CreateObject(\"Scripting.FileSystemObject\")

ChDir GVArbSti
GenSettings = False
GenIcon2 = False

\'Undersøger Settings.dat
If Err.Number = 53 Then GoTo CantFindSettings
FileLength = FileLen(\"settings.dat\")
Err.Clear
If Not FileLength = 1024 Then
    GVSvar = MsgBox(\"Filen Settings.dat ser ud til at være korupt\" & Chr(13) & \"Ønsker de at gendane den?\", vbYesNo + vbQuestion, \"Gendan fil?\")
    If GVSvar = vbYes Then GenSettings = True
    If GVSvar = vbNo Then
        GVSvar = MsgBox(\"Ønsker de at stoppe undersøgelsen?\" & Chr(13) & \"(Programmet vil da blive afsluttet\", vbYesNo + vbQuestion, \"Stoppe nu???\")
        If GVSvar = vbYes Then End
    End If
    Else
        If GVShowDebug = True Then GVSvar = MsgBox(\"Der blev ikke fundet nogle fejl ved Settings.dat\", vbOKOnly + vbQuestion, \"Fil OK\")
End If

StartCheckOts2Ico:
\'Undersøger Ots2.ico
ChDir GVArbSti
Err.Clear
If Err.Number = 53 Then GoTo CantFindIco2
FileLength = FileLen(\"Data\\Icons\\Ots2.ico\")
If FileLength < 2238 Then
    GVSvar = MsgBox(\"Filen Settings.dat ser ud til at være korupt\" & Chr(13) & \"Ønsker de at gendanne den)\", vbYesNo + vbQuestion, \"Gendan file?\")
    If GVSvar = vbYes Then GenIcon2 = True
    If GVSvar = vbNo Then
        GVSvar = MsgBox(\"Ønsker de at stoppe Gendanelsen?\" & Chr(13) & \"(Programmet vil da blive afsluttet\", vbYesNo + vbQuestion, \"Stoppe nu???\")
        If GVSvar = vbYes Then End
        End If
    Else
      If GVShowDebug = True Then GVSvar = MsgBox(\"Der blev ikke fundet nogle fejl ved ots2.ico\", vbOKOnly + vbQuestion, \"Fil OK\")
End If

EndOfCheck:

\'Gendanner settings.dat hvis filen er beskadigt
If GenSettings = True Then
    ChDir GVArbSti
    MsgBox (\"Begynder gendannelse\")
    MsgBox GVArbSti
    fs.CopyFile CurDir & \"\\data\\emgres\\settings.dat\", CurDir & \"\\\", True
    Open \"settings.dat\" For Input As #2
    If GVShowDebug = True Then GVSvar = MsgBox(\"Filen Settings.dat Blev gendannet uden problemmer\")
    Close #2
    End If
If GenIcon2 = True Then
    ChDir GVArbSti & \"\\data\"
    fs.CopyFile CurDir & \"\\data\\emgres\\ots2.ico\", CurDir & \"\\data\\icons\\\", True
    Open \"deta\\icons\\ots2.ico\" For Input As #2
    If GVShowDebug = True Then GVSvar = MsgBox(\"Filen Ots2.ico blev gendannet uden problemmer\", vbOKOnly + vbInformation, \"Fil Gendannet\")
    GVSvar = MsgBox(\"icon2.dat blev gendannet uden fejl, og programmet genstartes\", vbOKOnly + vbInformation, \"Fil gendannet\")
    Close #2
    End If
GenSettings = False
GenIcon2 = False
Exit Sub

CantFindSettings:
ChDir GVArbSti
    fs.CopyFile CurDir & \"\\Data\\EmgRes\\settings.dat\", CurDir & \"\\\", True
Open \"settings.dat\" For Input As #2
If GVShowDebug = True Then GVSvar = MsgBox(\"settings.dat blev gendannet uden fejl\", vbOKOnly + vbInformation, \"Fil gendannet\")
Close #2
GenSettings = False
GoTo StartCheckOts2Ico:
Exit Sub

CantFindIco2:
ChDir GVArbSti
fs.CopyFile CurDir & \"\\Data\\EmgRes\\ots2.ico\", CurDir & \"\\data\\icons\\\", True
Open \"data\\icons\\ots2.ico\" For Input As #2
If GVShowDebug = True Then GVSvar = MsgBox(\"icon2.dat blev gendannet uden fejl, og programmet genstartes\", vbOKOnly + vbInformation, \"Fil gendannet\")
Close #2
GenIcon2 = False
GoTo EndOfCheck
Exit Sub
End Sub
Avatar billede lrp Nybegynder
07. september 2001 - 13:55 #2
Programmet går vel ned, fordi filen ikke findes i den angivne mappe? Har du kontrollet, at den findes, når error-handleren er kørt?
Avatar billede kaffe Nybegynder
07. september 2001 - 14:12 #3
I linie 2 disabler du inline-error handler.

Hvorfor bruger du ikke fs til at undersøge om filen eksisterer først?
Avatar billede kisbye Nybegynder
07. september 2001 - 14:23 #4
Irp> Det hjælper ikke noget.
Jeg har prøvet at udkommenteret hele CantFindIco2, og fejlen er stadig på
FileLength = FileLen(\"Data\\Icons\\Ots2.ico\")

Kaffe> det bør ikke være nødvendigt,
når VB når til linien:
FileLength = FileLen(\"Data\\Icons\\Ots2.ico\") bør den generere en fejlkode 53 \"File Not Found\", og programmet skulle så hoppe til CantFindIco2.
jeg har prøvet at slette alle Err.Clear

Hvad er forskellen på at bruge On Error Goto 0, og err.clear.?
Avatar billede kaffe Nybegynder
07. september 2001 - 14:47 #5
Jeg skrev forkert før. Det er ikke en inline error-handler du bruger.

On Error Goto 0 disabler din error-handler. Den er altså ikke aktiv.
err.clear sletter fejlen fra Err objektet (det skal man selv gøre hvis det drejer sig om en inline errorhandler, men det gøres automatisk for dig her.)

Kan din fejl have noget at gøre med stien? Hvad står der i GVArbSti?
Avatar billede lrp Nybegynder
07. september 2001 - 15:00 #6
Fejlen er, at filen ikke findes.
For mig at se er det forkert at teste om Err.Number er 53 (File Not Found) FØR du udfører den linje, hvor programmet potentielt kan gå ned. Err.Number kan først blive 53 når fejlen ER opstået.
I stedet for linjen:
  If Err.Number = 53 Then GoTo CantFindIco2
så prøv at skrive:
  On Error Goto CantFindIco2
og put så denne linje ned i bunden af dinne error-handlere:
  Resume
Virker det?
Avatar billede lrp Nybegynder
07. september 2001 - 15:06 #7
Du kan også prøve at kigge på dette lille eksempel kopieret fra onlinehjælpen i VBA, der viser hvordan en errorhandler kan laves:

Sub ResumeStatementDemo()
    On Error GoTo ErrorHandler    \' Enable error-handling routine.
    Open \"TESTFILE\" For Output As #1    \' Open file for output.
    Kill \"TESTFILE\"    \' Attempt to delete open file.
    Exit Sub    \' Exit Sub to avoid error handler.

ErrorHandler:    \' Error-handling routine.
    Select Case Err.Number    \' Evaluate error number.
        Case 55    \' \"File already open\" error.
            Close #1    \' Close open file.
        Case Else
            \' Handle other situations here....
    End Select
    Resume    \' Resume execution at same line
    \' that caused the error.
End Sub
Avatar billede kisbye Nybegynder
10. september 2001 - 08:42 #8
Irp>Du har helt ret det var det der var galt, Det siger også næsten sig selv.

Tak for hjælp begge to :-)
Avatar billede kisbye Nybegynder
10. september 2001 - 08:51 #9
Kaffe> Jeg har oprettet et spørgsmål der hedder point til kaffe.
Avatar billede kisbye Nybegynder
10. september 2001 - 09:49 #10
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
Kurser inden for grundlæggende programmering

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