/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Flere On Error GoTo?
Fra : Stefan Kristensen


Dato : 20-01-05 15:39

Hej NG.

Jeg har en procedure der kører gennem en løkke og derefter laver lidt mere.
Hvis der sker en fejl i løkken, skal det 'lidt mere' stadig udføres. Jeg
havde tænkt mig noget á lá det her:

On Error GoTo err1

Do Until
Gør noget
Loop

err1:
Gem ErrNumber, Source og Description

On Error GoTo eer2
Gør lidt mere

err2:
Ryd op
If GemtErr<>0 Then Vis en fejl
If Err Then Vis en anden fejl

Det virker efter hensigten hvis fejlen opstår enten før eller efter den
anden GoTo statement. Hvis der er fejl både før og efter, stopper programmet
øjeblikkeligt ved den sidste fejl.

Nogle gode ideer?

Mvh
Stefan



 
 
Gert Krabsen (20-01-2005)
Kommentar
Fra : Gert Krabsen


Dato : 20-01-05 17:47

Thu, 20 Jan 2005 15:38:44 +0100, Stefan Kristensen <stefank@asg.com> skrev:

> Hej NG.
>
> Jeg har en procedure der kører gennem en løkke og derefter laver lidt
> mere.
> Hvis der sker en fejl i løkken, skal det 'lidt mere' stadig udføres. Jeg
> havde tænkt mig noget á lá det her:


Jeg ville skrive koden, så Errorhandler kun kaldes i de tilfælde, hvor der
rent faktisk er en fejl!


Sub funktionsNavn()
   On Error GoTo err1
   Do Until
    Gør noget
   Loop

   On Error Goto err2
   Gør lidt mere

   Exit sub

err1:
   Gem ErrNumber, Source og Description
   Resume Next

err2:
   Ryd op
   If GemtErr<>0 Then Vis en fejl
   If Err Then Vis en anden fejl
   Resume Next

Exit sub



/Krabsen





--
Sendt via Opera.
www.krabsen.dk
www.responsnord.dk
mfl

Stefan Kristensen (20-01-2005)
Kommentar
Fra : Stefan Kristensen


Dato : 20-01-05 18:35

> > Jeg har en procedure der kører gennem en løkke og derefter laver lidt
> > mere.
> > Hvis der sker en fejl i løkken, skal det 'lidt mere' stadig udføres. Jeg
> > havde tænkt mig noget á lá det her:
>
>
> Jeg ville skrive koden, så Errorhandler kun kaldes i de tilfælde, hvor der
> rent faktisk er en fejl!

<snip>Fint eksempel</snip>

Jeg har selv lige fundet på at prøve Resume Next, men dit eksempel virker
mere overskueligt.
Mange tak for hjælpen

Mvh
Stefan



Tomas Christiansen (20-01-2005)
Kommentar
Fra : Tomas Christiansen


Dato : 20-01-05 21:57

Stefan Kristensen skrev:
> Jeg har selv lige fundet på at prøve Resume Next, men dit eksempel virker
> mere overskueligt.

Husk også at der findes en funktion Erl og muligheden for at bruge Resume
[linienr].
Eksempel til inspiration:

Sub X()
On Error GoTo ErrorHandler
Dim a As Long
1: a = 5 / a
2: a = 5 / 1
Exit Sub

ErrorHandler:
If Erl = 1 Then
Resume 2
ElseIf Erl = 2 Then
MsgBox "Den er helt galt i blok 2!"
Else
MsgBox "Hvad sker der?"
End If
End Sub

Prøv at køre proceduren ved hjælp at debuggerens single-step (F8-tasten) og
se hvad der sker. Prøv der efter at rette så der ikke kommer fejl i blok 1,
men i stedet i blok 2.

-------
Tomas


Stefan Kristensen (20-01-2005)
Kommentar
Fra : Stefan Kristensen


Dato : 20-01-05 22:22

> Husk også at der findes en funktion Erl og muligheden for at bruge Resume
> [linienr].
Jeg faldt over Erl i søgen efter noget On Error GoTo, og har helt skiftet
min hjemmebryggede Step counter ud med det. Jeg bruger den i blokke:

10:
Gør noget
Gør noget mere
20:
Noget database
Exit Sub

errh:
Msgbox "MinProc [" & Erl & "]." & Err.Source & Err.Description

Så sætter jeg bare en label ind i passende grupper så man ikke behøver at
give hver linie et nummer.
Men tak for hintet

Stefan



Søg
Reklame
Statistik
Spørgsmål : 177458
Tips : 31962
Nyheder : 719565
Indlæg : 6408170
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste