Toon posts:

[VBA] Onvoldoende stackruimte ?

Pagina: 1
Acties:
  • 1.835 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hi,

ik probeer 2 excel lijsten van ± 20.000 artikels elk, te vergelijken met elkaar.
Ik lees 1 regel in van het eerste blad, lees dan een regel in van het 2de blad en vergelijk ze. Bij geen overeenkomst, neem ik de volgende regel v/h 2de blad, tot ik ze allemaal gehad heb. Bij het testen met 2 korte lijstjes liep alles goed, maar toen ik de echte lijsten (met dus ± 20.000 artikels) probeerde, kreeg ik "Error 28 Onvoldoende stackruimte".

De fout treedt hier op, waar exact weet ik niet, want Excel sluit altijd af.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub CodeVergelijking()
    
    If Var2 = "" Then
        Call Als1GoedkoopstIs
    Else
        If Var1 = Var2 Then
            Call PrijsVergelijking
        Else
            Call Volgende
        End If
    End If
    
End Sub
Sub Volgende()

    ActiveCell.Offset(1, 0).Activate
    Var2 = ActiveCell.Value
    Teller1 = Teller1 + 1
    Call CodeVergelijking
    
End Sub



kan er iemand mij zeggen wat ik fout doe en hoe het beter kan?

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Hoe wil je vergelijken? Of de hele regel ergens voorkomt? En wat wil je doen met het resultaat (wel of niet gevonden)?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • PaulZ
  • Registratie: Augustus 2004
  • Laatst online: 21-05-2024
Hi mr. Sandman,

Je laat de subs steeds elkaar aanroepen zonder dat ze ooit weer terug komen bij het startpunt. Volgens mij moet VBA het startadres van elke aanroep bijhouden in een stack om te kijken als de sub klaar is waar die naar terug moet springen. Dat terugspringen gebeurt echter nooit (voordat ie klaar is roept ie alweer een nieuwe sub aan) en de stack loopt vol.

Het onderstaande zou een oplossing kunnen zijn:


Sub ZoekVar1InLijst2(Var1 as string)
var2 = "startwaardeandersdanVar1"
Teller1 = 0
While var1 <> var2 and var2 <> ""
ActiveCell.Offset(1, 0).Activate 'is die 1 trouwens teller1? Dan vervangen (ik ken Excel niet zo goed)....
Var2 = ActiveCell.Value
Teller1 = Teller1 + 1
Wend

'Als je uit deze loop komt is:
'1: Var2 leeg (einde van de lijst) -> Niet gevonden
OF
'2: Var2 = Var1 -> Gevonden
if var2 = "" then
Call Als1GoedkoopstIs
else
Call PrijsVergelijking
end if
end Sub

Er zijn altijd betere opties dan de bovenstaande, maar dit is maar een voorzetje met de beperkte info uit jouw voorbeeld....

Groeten,
Paul

[ Voor 16% gewijzigd door PaulZ op 28-08-2004 17:43 ]

Vlinders moet je volgen, niet vangen...


Verwijderd

Topicstarter
Paul, bedankt, ik ga het direkt uitproberen, uw uitleg lijkt me in ieder geval logisch en zinvol

Greetz,

Sandman