07. september 2001 - 11:48Der 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.
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\")
\'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
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.?
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?
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?
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
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.