• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

case+ if +VBA

Status
Niet open voor verdere reacties.

nobody11

Gebruiker
Lid geworden
20 dec 2007
Berichten
552
ik heb me hier al 2 uur op rot gezocht, maar ik vind niet hoe ik het volgende kan implementeren in mjn code (dit nu wel goed werkt)

het deel v d code waarover het gaat is dit:


Code:
For Each p In Range(Cells(rowfirstdate + totalprewindow, i), Cells(rowlastdate - totalpostwindow, i))

[COLOR="Red"]If p > target Then[/COLOR]

nu had ik graag gehad dat als B1 = 1, niets veranderen..

als B1 = 0 dan moet de code iets omdraaien en worden "< en - target:

Code:
If p [COLOR="red"]<[/COLOR] [COLOR="red"]-[/COLOR]target Then


ik heb al geprobeerd om te werken met het volgende:

Code:
select case range("B1").value

case is = 1
if p > target then 
goto start

case is = 0
if p < -target then goto start

en start: is de rest v d code die identiek blijft.. nu dit lukt niet jammergenoeg..
 
Laatst bewerkt:
nobody=

opzich ben je al goed bezig mar je select case kijk alleen naar `B1` en niet naar `B2´ enz.

Daar zal je dus iets aan moeten doen.

Wim
 
nobody=

opzich ben je al goed bezig mar je select case kijk alleen naar `B1` en niet naar `B2´ enz.

Daar zal je dus iets aan moeten doen.

Wim

sorry, moet in beide gevallen B1 zijn , B1 kan 0 of 1 zijn.. :-)

dus als B1=1 => niets veranderen, als B1=0, zo blijven

(heb het aangepast in begin post)
 
sorry, moet in beide gevallen B1 zijn , B1 kan 0 of 1 zijn.. :-)

dus als B1=1 => niets veranderen, als B1=0, zo blijven

(heb het aangepast in begin post)

code ziet er zo uit: (choice : [B1].value)

Code:
For Each p In Range(Cells(rowfirstdate + totalprewindow, i), Cells(rowlastdate - totalpostwindow, i))

Select Case choice

Case Is = 1

If p > target Then

GoTo continue

Case Is = 0

If p < -target Then
GoTo continue

Case Is = 2
If Abs(p) > target Then
GoTo continue

End Select

continue:
rest v d code

krijg error van "case without select case", maarik heb toch een select case gedaan? of moet mijn "end select" later staan in de code?
 
Laatst bewerkt:
Een If vraagt een End If. Dat zou je gezien hebben als je code laat inspringen, zodat de structuur duidelijk wordt.
 
Een If vraagt een End If. Dat zou je gezien hebben als je code laat inspringen, zodat de structuur duidelijk wordt.

jep! ik probeer het eens..

btw: moet mijn end select niet op het einde vn de code ? aangezien er een loop is "for each p..."?
 
jep! ik probeer het eens..

btw: moet mijn end select niet op het einde vn de code ? aangezien er een loop is "for each p..."?

(de end if stond er blijkbaar, had het niet meegekopieerd)

Code:
For Each p In Range(Cells(rowfirstdate + totalprewindow, i), Cells(rowlastdate - totalpostwindow, i))

Select Case choice

Case Is = 1

If p > target Then

GoTo continue

Case Is = 0

If p < -target Then
GoTo continue

Case Is = 2
If Abs(p) > target Then
GoTo continue

continue:
rest v d code

[COLOR="Red"]End Select
end if[/COLOR]
 
waar komt target vandaan, waar komt p vandaan ?
 
waar komt target vandaan, waar komt p vandaan ?

dit zijn allemaal variabelen die gedefinieerd zijn (en ze zijn correct gedefinieerd want de code zonder de case... werkt perfect)..

ik kijk nog eens even, het kan zijn dat ik de next en de end select verkeerd plaats.. ik test het even met 1 case .. en het lijkt te werken (denk ik)

Code:
  For i = columnfirststock To columnlaststock

         For Each p In Range(Cells(rowfirstdate + totalprewindow, i), Cells(rowlastdate - totalpostwindow, i))
             Select Case choice
       
       Case Is = 1

            If p > target Then
          GoTo continue
          
continue:

rest v d code
       end if


end select

     next
next
 
Ik kan best begrijpen dat je hier mee zit te sukkelen.

Bovenstaand stukje code is:

  1. spaghetti-code (GoTo statement)
  2. ongestructureerd (bij inspringen zet je op dezelfde hoogte wat verband houdt met elkaar. Bvb. End Select de eerste Next)

Met zulke codes maak ik ook fouten.
 
Laatst bewerkt:
Ik kan best begrijpen dat je hier mee zit te sukkelen.

Bovenstaand stukje code is:

  1. spaghetti-code (GoTo statement)
  2. onvolledige code (Select Case ontbreekt)
  3. ongestructureerd (bij inspringen zet je op dezelfde hoogte wat verband houdt met elkaar. Bvb. End Select de eerste Next)

Met zulke codes maak ik ook fouten.

I know :( ik ga er eerst wat structuur in brengen.. zien of het dan lukt..

bedankt !
 
great!! dit ga ik eens uitspitten; dit gaat me zeker helpen wat structuur te brengen in mijn codes..

heb er wat structuur in gezet.. (die "goto" staat er nog :-) zo machtig ben ik VBA nog niet)..

Code:
   For i = columnfirststock To columnlaststock

         For Each p In Range(Cells(rowfirstdate + totalprewindow, i), Cells(rowlastdate - totalpostwindow, i))
             
            If p > target Then
            
                [vervolg code]
                    
            Else
            End If
        
        Next
    Next

dit heb ik nu geprobeerd:



Code:
   For i = columnfirststock To columnlaststock

         For Each p In Range(Cells(rowfirstdate + totalprewindow, i), Cells(rowlastdate - totalpostwindow, i))
            select case choice (choice is gedefinieerd i h begin vn de sub)
            case is = 1
                 If p > target Then
                goto continue:
           case is = 0
                 if p < - target then
                 goto continue

            continue:
                [vervolg code]
                    
            Else
[COLOR="Red"]        waar moet ik nu de end select en de end if's plaatsen? de bedoeling is dus net zoals boven, maar dan afhankelijk van de cases moet p> target of p< - target zijn.. [/COLOR]
        Next
    Next
 
Code:
[COLOR="Pink"]For i = columnfirststock To columnlaststock[/COLOR]

         [COLOR="Orange"]For Each p In Range(Cells(rowfirstdate + totalprewindow, i), Cells(rowlastdate - totalpostwindow, i))[/COLOR]
            [COLOR="Red"]select case [/COLOR]choice
            case is = 1
                 If p > target Then goto continue
           case is = 0
                 if p < - target then goto continue
            [COLOR="red"]end select[/COLOR]
            continue:
                [vervolg code]
         [COLOR="orange"]Next[/COLOR]
    [COLOR="pink"]Next[/COLOR]

Ik weet niet of het labe continue op de juiste plaats staat maar dat moet je zelf maar bepalen.
Bovenste oplossing is zonder een [end if] om dat de actie direct achter de [then] staat.
Als je meer actie wilt na de [then] dan krijg jet het volgende:
Code:
If p > target Then 
     goto continue
End If

Succes
Wim
 
Code:
[COLOR="Pink"]For i = columnfirststock To columnlaststock[/COLOR]

         [COLOR="Orange"]For Each p In Range(Cells(rowfirstdate + totalprewindow, i), Cells(rowlastdate - totalpostwindow, i))[/COLOR]
            [COLOR="Red"]select case [/COLOR]choice
            case is = 1
                 If p > target Then goto continue
           case is = 0
                 if p < - target then goto continue
            [COLOR="red"]end select[/COLOR]
            continue:
                [vervolg code]
         [COLOR="orange"]Next[/COLOR]
    [COLOR="pink"]Next[/COLOR]

Ik weet niet of het labe continue op de juiste plaats staat maar dat moet je zelf maar bepalen.
Bovenste oplossing is zonder een [end if] om dat de actie direct achter de [then] staat.
Als je meer actie wilt na de [then] dan krijg jet het volgende:
Code:
If p > target Then 
     goto continue
End If

Succes
Wim


bedankt! ik test dit ook even uit.. :) tx!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan