On Error Resume Next

Status
Niet open voor verdere reacties.

sylvester-ponte

Verenigingslid
Lid geworden
19 apr 2007
Berichten
6.620
ik gebruik office 2000

na "on error resume next"

wil ik de error handel weer op normaal zetten
zodat het programma weer onderbroken wordt na een error

na err.clear of resume

blijft mijn programma na fouten gewoon door lopen

voorbeeld

c = cells(0,0) levert normaal een programma onderbreking op

na "on error resume next" levert dit geen programma onderbreking op

hoe zet ik de "error programma onderbreking" weer aan ?
 
gebruikt na on error resume ...... een
Code:
on error goto 0
om de error afhandeling weer normaal te zetten
 
Dad Sylvester,

Nog beter is om goede code te schrijven, zodat je error next resume niet m=nodig hebt.

Gegroet,

Axel.
 
bedankt Arno

dit bespaart me een hoop gedoe


hoi Axel

weet jij of er in VB voor Excel een methode aanwezig is die kijt of een Key in een
collecie al aanwezig is? Exel controleerd hier zelf wel op als je de methode Add gebruikt.
als de Key al aanwezig is ontstaat er een error (dat is heel handig om te gebruiken).
een loop maken voor iets dat Exel zelf al onderzoekt vind ik niet nodig.

ik ben benieuwd naar je oplossing.

groet Sylvester
 
@Axel Hagg
Nog beter is om goede code te schrijven, zodat je error next resume niet m=nodig hebt
Ik weet niet hoe goed jij kunt programmeren, maar er zijn talloze dingen te bedenken, die je als programmeur 'bijna' niet kunt voorzien.
Een foutafhandeling is dan ALTIJD beter dan een programma crash.



@sylvester-ponte

Exel controleerd hier zelf wel op als je de methode Add gebruikt.
als de Key al aanwezig is ontstaat er een error
Kun je de bijbehorende code voor de collectie hier posten?
 
voor Arno

hallo Arno

ik heb geen zipper anders had ik het programma wel gezipt opgestuurd

zet om te proberen dit tabelletje bovenin de kolommen A en B

HTML:
a1	b1
a1	b3
a2	b2
a1	b1
a3	b3

Code:
'in kolom A staan beginPunten van lijnen in tekst fomnaat
'in kolom B staan eindPunten van lijnen in tekst formaat
'in één rij staat één lijn
'in kolom A mogen iedentieke punten staan in kolom B ook
'nu moet er een matrix gevormd worden met bovenin de unieke punten van kolom B
'en vertikaal de unieke punten van kolom A
'en op de kruispunten het aantal verbindingen
'omdat de punten unie moeten zijn, is een collectie met de unieke punten (tekst)als key
'en de plaats in de matrix als item, een makkerlijke oplossing om de matrix te benaderen
'zorg dat de lijst met punten begint op rij 1


Sub mijnMatrix()
    Dim Rij As Integer
    Dim Kolom As Integer
    Dim Uitvoer
    Dim collecieBeginPunten As New Collection
    Dim collecieEindPunten As New Collection
    Dim tellerBeginPunten As Integer
    Dim tellerEindPunten As Integer
    Dim beginPunt As String
    Dim eindPunt As String
    Dim E As Integer
    
    Cells.HorizontalAlignment = xlLeft
    Set Uitvoer = Range("d2")
    
    tellerBeginPunten = 1
    tellerEindPunten = 1
    teller = 1
    Do Until Cells(teller, 1) = ""
        beginPunt = Cells(teller, 1)
        eindPunt = Cells(teller, 2)
        On Error Resume Next
            collecieBeginPunten.Add Item:=tellerBeginPunten, key:=beginPunt
            E = Err
        On Error GoTo 0                 'zo snel mogenlijk de error behandeling weer op normaal zetten
        If E = 0 Then                   'geen error dus er is een nieuw uniek item toegevoegd aan collectieBeginPunten
            Uitvoer(tellerBeginPunten, 0) = beginPunt   'dit nieuwe beginpunt krijgt gelijk een plaats op de sheet
            tellerBeginPunten = tellerBeginPunten + 1   'deze teller is eigenlijk niet nodig,kan ook de count gebruiken
        End If
        On Error Resume Next
            collecieEindPunten.Add Item:=tellerEindPunten, key:=eindPunt
            E = Err
        On Error GoTo 0
        If E = 0 Then
            Uitvoer(0, tellerEindPunten) = eindPunt
            tellerEindPunten = tellerEindPunten + 1
        End If
        Rij = collecieBeginPunten(beginPunt)
        Kolom = collecieEindPunten(eindPunt)
        Uitvoer(Rij, Kolom) = Uitvoer(Rij, Kolom) + 1
        teller = teller + 1
    Loop
End Sub

groeten Sylvester
 
Laatst bewerkt:
Ik heb ff gekeken (google) en de meeste (zelfs alleen maar) oplossingen zijn inderdaad on error resume ...
 
Dag Sylvester,

Ik ben niet zo thuis in Excel, maar ik vond het volgende in Help onder Keys.

Dim a, d, i , v
Set d = CreateObject("Scripting.Dictionary")
a = d.keys 'Leest de sleutels
For i = 0 To d.Count -1 'Doorloopt de matrix
If NieuweSleutel = a(i) then v=true: exit for
Next
If v Then MsgBox NieuweSleutel & " bestaat al"

gegroet,

Axel.
 
@Axel Hagg

Leuke manier, maar ik denk als je bijvoorbeeld meer dan 1000 regels hebt, je al en behoorlijke langzame loop gaat krijgen, laat staan als je meer dan 10000 regels hebt.
Ik denk dat de on error resume.... dan toch een stuk sneller zal zijn:cool:
 
hoi

bedankt voor jouw voorbeeld uit jouw help

in mijn help staat CreateObject("Scripting.Dictionary") zonder aanhalings tekens

welde versie van office gebruik jij

dit wordt het

Dim d
Set d = CreateObject("Scripting.Dictionary")
If d.exists(NieuweSleutel) Then MsgBox NieuweSleutel & " bestaat al"

de klasse Dictionarry kent de methode exists

heel veel dank voor jullie hulp:thumb:

groet Sylvester
 
Laatst bewerkt:
@Axel Hagg

Wel eeens van binair zoeken gehoord?

Ja wel eens van gehoord. Maar wat is er 'binair zoeken' aan onderstaande code?

Code:
a = d.keys 'Leest de sleutels
For i = 0 To d.Count -1 'Doorloopt de matrix
If NieuweSleutel = a(i) then v=true: exit for
Next

@sylvester-ponte
de klasse Dictionarry kent de methode exists

Goed gevonden:thumb:
 
Dag Spiderman,

In onderstaande code staat geen code voor binair zoeken. Maar om een voorbeeld te geven van de snelheid: Als je 1.000.000 items hebt (alfabetisch gesorteerd) dan kun je met 17 keer vergelijken bepalen of een item er wel of niet in voorkomt. Dus die loop zal niet zo langzaam zijn als je denkt.

Gegroet,

Axel.

PS.
Laat het me weten als je geïnteresseerd bent.
 
@Axel Hagg

Om een heel lang verhaal een beetje korter te maken.

Ik zeg niet dat 'Binair zoeken' niet kan. In tegendeel. Je kan zoals je zelf al aangeeft er een stuk sneller mee zoeken.

Het nadeel van 'Binair zoeken' is dat je op alfabet gesorteerd moet zijn, anders houdt het op.
Als je dus eerst de kolomen op alfabet moet zetten, en dan vervolgens Binair gaat zoeken, dan ben je nog altijd langzamer dan de on error resume ......

Ik zeg ook niet dat de on error resume ..... te pas en te onpas gebruikt moet worden, maar in dit geval is het een goed hulpmiddel.

PS.
Laat het me weten als je geïnteresseerd bent.
Als je bedoeld of ik intresse heb in 'Binair zoeken', dan is het antwoord nee (misschien andere mensen hier wel).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan