Fout in loop

Status
Niet open voor verdere reacties.

VBAn00b

Gebruiker
Lid geworden
22 feb 2008
Berichten
17
Beste forumleden,

Wij hebben de volgende loop:

Code:
Dim iDavid() As String

    ReDim iDavid(nr_comp)

    

    

    a = 0

    Do While a < nr_comp + 1

    

        base = vtresult(0, a, 0, 1) * 1.005

        

        i = 0

        Do While vtresult(i, a, 0, 1) <= base

            t = vtresult(i, a, 0, 1)

            

            If (iGo <= 15) Then

                iGo = i - 1

                

                Else

                

            If (iGo = 16) Then

                iGo = 3333

               

            End If

            

            i = i + 1

        Loop

De bedoeling is dat de loop het aantal variabele (koers) telt totdat er een koers is gevonden die 0.5% hoger is dan de basiskoers.

Dit werkt perfect alleen loopt de loop vast wanneer er niet binnen 15 (ingestelde begrenzing) variabelen een koers gevonden wordt die voldoet aan de 0.5% eis. De loop zou 3333 moeten noteren wanneer er niets gevonden is binnen de 15 variabelen. Dit gebeurd ook alleen slaat de loop stil en gaat het niet verder naar de volgende range.

De foutmelding is Do Without Loop.

Kan iemand ons hierbij helpen? Alvast bedankt! :)
 
Je eerste IF-statement heeft geen END-IF
Dit geldt ook voor je eerste DO-statement

Code:
Dim iDavid() As String
    ReDim iDavid(nr_comp)
    a = 0
    Do While a < nr_comp + 1
        base = vtresult(0, a, 0, 1) * 1.005
        i = 0
        Do While vtresult(i, a, 0, 1) <= base
            t = vtresult(i, a, 0, 1)
            If (iGo <= 15) Then
                iGo = i - 1
            Else
                If (iGo = 16) Then
                   iGo = 3333
                End If
                i = i + 1
                Loop
Als je de lege regels weg laat en alles goed uitlijnt, zie je gelijk waar de schoen wringt.
 
Laatst bewerkt:
Code:
Dim iDavid() As String

    ReDim iDavid(nr_comp) 

    a = 0

    Do While a < nr_comp + 1

        base = vtresult(0, a, 0, 1) * 1.005


        i = 0

        Do While vtresult(i, a, 0, 1) <= base

            t = vtresult(i, a, 0, 1)

                 If (iGo <= 15) Then

                iGo = i - 1
                
              End If

                Else

            If (iGo = 16) Then

                iGo = 3333

               

            End If

            

            i = i + 1

        Loop

Thx, hebben de code (zoals je kunt zien) aangepast maar krijgen nu de foutmelding: Else without If :(
 
Vermoedelijk staat de Else in het midden te veel.
 
Kijk in de help-tekst van VBA hoe je de juiste syntax van het if-statement moet gebruiken:

Je Else-statement is een los statement, de eerste IF is namelijk afgesloten met het ENDIF

If voorwaarde Then [instructies] [Else andersinstructies]

De juiste syntaxis is:

If voorwaarde Then
[instructies]

[ElseIf voorwaarde-n Then
[andersindieninstructies] ...

[Else
[andersinstructies]]

End If
 
Bedankt mensen, we komen al een stuk verder!

We hebben de huidige code:
Code:
  a = 0

    Do While a < nr_comp + 1

        base = vtresult(0, a, 0, 1) * 1.005

        i = 0

        Do While vtresult(i, a, 0, 1) <= base

            t = vtresult(i, a, 0, 1)

            If (i <= 15) Then

                iGo = i - 1
               
               ElseIf (i > 15) Then

                iGo = 3333
             
                End If

            i = i + 1

        Loop

Toch slaat de loop nog vast met de melding: Subscript out of Range!

De bedoeling is dat bij een waarde groter dan 15, 3333 genoteerd wordt en vervolgens de volgende range door de loop gaat. Het systeem detecteerd de 3333 nu wel maar blijft in de huidige range actief in plaats van de 3333 te noteren en naar de volgende range te gaan.

Hoe zorgen we ervoor dat zodra de 15 wordt overschreden, er 3333 genoteerd wordt als output en vervolgens gestopt wordt met de huidige range en de volgende range wordt geloopt?
 
Zet om te beginnen Option Explicit helemaal bovenaan het module scherm. Vlak onder Option Compare Database.
Code:
Option Compare Database
Option Explicit
Hiermee dwing je af dat je variabelen moet declareren. nr_comp is bijvoorbeeld niet gedeclareert.
Verder krijg je je voutmelding op een regel die geel wordt. Meestal is dat een goede plek om verder te zoeken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan