---
title: "Får inte nestlad \"for-loop\" att fungera"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/84092-får-inte-nestlad-for-loop-att-fungera"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "plelkes"
published: "2003-08-13T06:49:12.000Z"
updated: "2003-08-14T07:07:00.000Z"
replies: 21
views: 488
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/84092-får-inte-nestlad-for-loop-att-fungera"
---

# Får inte nestlad "for-loop" att fungera

_Sida 1 av 2._

## #1 — plelkes, 2003-08-13T06:49Z

Har nu försökt i 3 dagar, men jag får inte till det. Det bästa felet jag får är:

> ogiltig kontrollvariabel för "for-loop"

 Koden för veckans nummer

```
<%
dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag
Dim iDayMonth 'hur många dagar innehåller den aktuella månaden?

iDayMonth  = DatePart("d", DateSerial(Year(dagensdat), Month(dagensdat)+1, 1-1)) 'da´n innan första dagen i 
For iDag = 1 TO iDayMonth step 7
       dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag
		start= CDate(dNewDate)
	Response.write DatePart ("ww", start) & "<br>"
	Next
	%>
```

 

Koden för datum och veckodagen

```
<%
Session.LCID = 1053
	Dim aDagar(42) 
Dim iDag 
Dim dNewDate
Dim iWeekDay, sWeekDayName
Dim iDayMonth 'hur många dagar innehåller den aktuella månaden?

dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag
For iDag = 1 to DatePart("d", DateSerial(Year(Date()), Month(Date())+1, 0)) 'da´n innan första dagen i 
aDagar(iDag) = WeekDayName(DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag))
iWeekDay = DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag) 

response.write iDag &"   " & aDagar(iDag) & "<br>"
If iWeekDay = 1 Then Response.Write "<HR>"
next
%>
```

 
Det jag vill är att

1. För månadens första dag skriv : datum, veckodag, och veckonummer typ någor som 

   ```
    If iDag = 1 Then Response.write iDag &"   " & aDagar(iDag) & "   " & DatePart ("ww", start) & "<br>"
   ```
2. Kolla om söndag. Är det söndag så skriv ut \<HR\> och (nästa) veckas nummer.- typ 

   ```
   If iWeekDay = 1 Then Response.Write "<HR>" & DatePart ("ww", start) & "<br>"
   ```
3. Fortsätt därefter att skriva ut nummer och veckodag
4. Är inte det en söndag så skriv ut nummer och dagensnamn tills söndag
5. och dessutom fortsätta med de två loopen( veckans nummer och dagens datum) tills vecka tar slut

Hoppas på hjälp från er ASP-gurun med att "sy ihop det hela"

Permalänk: https://www.webforum.nu/p/84092

## #2 — @nders, 2003-08-13T07:03Z

Du skriver att for-loopen är nästlad, och felmeddelandet tyder på att du använder samma kontrollvariabel för den inre forloopen som en utanför. Du kan inte använda samma, utan du måste byta namn på den inre.

Mvh

Permalänk: https://www.webforum.nu/p/1137608

## #3 — plelkes, 2003-08-13T08:13Z

Nedanstående kod borde fungera\[ - tycker åtminståne jag - men ickeKOD\]\<%
Dim aDagar(42) 
Dim iDag 
Dim dNewDate
Dim iWeekDay, sWeekDayName

dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag
Dim iDayMonth 'hur många dagar innehåller den aktuella månaden?

iDayMonth  = DatePart("d", DateSerial(Year(dagensdat), Month(dagensdat)+1, 1-1)) 'da´n innan första dagen i 
iWeekDay = DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag) 
	If iDagen = 1 Then
	    For iDag = 1 TO iDayMonth step 7
           dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag
		   start= CDate(dNewDate)
		Response.write DatePart ("ww", start) & "\<br\>"

	ElseIf iWeekDay = 1 Then Response.Write "\<HR\>" & "\<DIV ALIGN=""RIGHT""\>" & DatePart ("ww", start) & "\<br\>" & "\</DIV\>"

Else	
For iDagen = 1 to DatePart("d", DateSerial(Year(Date()), Month(Date())+1, 0)) 'da´n innan första dagen i 
aDagar(iDagen) = WeekDayName(DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag))
iWeekDay = DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag) 
response.write iDagen &"   " & aDagar(iDagen) & "\<br\>"
End If
End If
Next
%\> 
Får felet

> Next förväntas på raden:
> ElseIf iWeekDay = 1 Then Response.Write "\<HR\>" & "\<DIV ALIGN=""RIGHT""\>" & DatePart ("ww", start) & "\<br\>" & "\</DIV\>"

  Men då blir det väl ingen loop?
Och lägger jag till Next får jag

> Programssats förväntas på rad 30 = End If

Permalänk: https://www.webforum.nu/p/1137623

## #4 — plelkes, 2003-08-13T12:39Z

Någon av er gurus som har lösningen?

Permalänk: https://www.webforum.nu/p/1137783

## #5 — @nders, 2003-08-13T12:45Z

Jodå, det där ska gå att lösa.

Jag kan väl säga som så; att dra igång en loop inne i en if-sats och avsluta den i ett annat block kommer inte att gå speciellt bra.

Indentera din kod så blir det lättare att se vad som tillhör vad också.

Jag tittar in senare.

Mvh,

Permalänk: https://www.webforum.nu/p/1137786

## #6 — plelkes, 2003-08-13T15:28Z

```
Dim aDagar(42) 
Dim iDag , iDagen
Dim dNewDate 
Dim iWeekDay, sWeekDayName 
Dim iDayMonth 
'//hur många dagar innehåller den aktuella månaden? 

dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag 
iDayMonth = DatePart("d", DateSerial(Year(dagensdat), Month(dagensdat)+1, 1-1)) 'da´n innan första dagen i 
iWeekDay = DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag) 

If iDagen = 1 Then 
           For iDag = 1 TO iDayMonth step 7 
             dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag 
             start= CDate(dNewDate) 
             Response.write DatePart ("ww", start) & "<br>" 

     ElseIf iWeekDay = 1 Then Response.Write "<HR>" & "<DIV ALIGN=""RIGHT"">" & DatePart ("ww", start) & "<br>" & "</DIV>" 

         Else 
             For iDagen = 1 to DatePart("d", DateSerial(Year(Date()), Month(Date())+1, 0)) 'da´n innan första dagen i 
              aDagar(iDagen) = WeekDayName(DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag)) 
            iWeekDay = DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag) 
           response.write iDagen &" " & aDagar(iDagen) & "<br>" 
End If 
End If 
Next
```

Permalänk: https://www.webforum.nu/p/1137914

## #7 — @nders, 2003-08-13T15:33Z

Hur blir det om du bara flyttar ut din For-instruktion till precis ovanför if-satsen istället för precis under?

Jag kan inte heller se att du ger *iDagen* ett värde någonstans, hur ska den bli 1?

Permalänk: https://www.webforum.nu/p/1137920

## #8 — plelkes, 2003-08-13T16:48Z

@nders skrev

> Jag kan inte heller se att du ger iDagen ett värde någonstans, hur ska den bli 1?

 det trodde jag att jag gjorde med följande kodsnutt:

```
For iDagen = 1 to DatePart("d", DateSerial(Year(Date()), Month(Date())+1, 0))
```

Permalänk: https://www.webforum.nu/p/1137986

## #9 — plelkes, 2003-08-13T16:53Z

> Hur blir det om du bara flyttar ut din For-instruktion till precis ovanför if-satsen istället för precis under?

 Menar du:

```
           
For iDag = 1 TO iDayMonth step 7 
If iDagen = 1 Then 

             dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag 
             start= CDate(dNewDate) 
             Response.write DatePart ("ww", start) & "<br>"
```

Permalänk: https://www.webforum.nu/p/1137988

## #10 — @nders, 2003-08-13T17:18Z

> **plelkes skrev:**
>
> @nders skrev
>
> > Jag kan inte heller se att du ger iDagen ett värde någonstans, hur ska den bli 1?
>
>  det trodde jag att jag gjorde med följande kodsnutt:
>
> ```
> For iDagen = 1 to DatePart("d", DateSerial(Year(Date()), Month(Date())+1, 0))
> ```

Aha, du har en till loop där nere, den såg jag inte ens. Hur som helst, när du försöker använda värdet första gången, så har inte variabeln något värde. Det får den först senare.

Du har dessutom två for-loopar, men i koden finns bara en next.

Jag kikar på koden, möblerar om lite, så ska vi se om jag kan leverera ett förslag.

Jag återkommer!

Mvh

Permalänk: https://www.webforum.nu/p/1138003

## #11 — @nders, 2003-08-13T17:25Z

Det vore förresten bra om du kunde exemplifiera vilken utskrift du skulle vilja ha för en viss månad, så är det lite lättare att haja precis hur du menar.

Mvh

Permalänk: https://www.webforum.nu/p/1138006

## #12 — plelkes, 2003-08-13T17:43Z

Utskriften jag vill skall se ut typ:
Med början från månadens första dag skrivs från vänster -\> höger:
1  veckodagsnamnet       veckonummret
2  veckodagsnamnet
'
'
'
datum Söndag
Response.Write "\<HR\>"
datum Måndag        veckonummret
osv
Hoppas ni förstår bättre

Permalänk: https://www.webforum.nu/p/1138012

## #13 — plelkes, 2003-08-13T17:45Z

Som jag skrev i trådens första inlägg så fungerar koden var för sig, jag lyckas bara inte sy ihop det hela

Permalänk: https://www.webforum.nu/p/1138013

## #14 — plelkes, 2003-08-13T17:48Z

@nders skrev:

> Hur som helst, när du försöker använda värdet första gången, så har inte variabeln något värde. Det får den först senare.

 
Nu förstår jag ej vad du menar med ovanstående.
Första gången jag använder iDagen är väl på rad 11 och där tilldelar jag väl värdet 1 med koden

```
If iDagen = 1 Then
```

Permalänk: https://www.webforum.nu/p/1138014

## #15 — @nders, 2003-08-13T17:54Z

> Första gången jag använder iDagen är väl på rad 11 och där tilldelar jag väl värdet 1 med koden

Nej, du bara kontrollerar om värdet är 1. Det är det inte, för du har aldrig gett variabeln ett värde innan du försöker kontrollera det.

Permalänk: https://www.webforum.nu/p/1138018

## #16 — @nders, 2003-08-13T17:56Z

Jag tror att jag läst dåligt, för jag har nog inte förut förstått problemet. Jag gjorde så här: 
\* Tog ditt kodblock #2 från huvudinlägget
\* Delade på din response.write-rad i loopen
\* Lade till en kodrad, se nedan:

```
dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag
For iDag = 1 to DatePart("d", DateSerial(Year(Date()), Month(Date())+1, 0)) 'da´n innan första dagen i 
	aDagar(iDag) = WeekDayName(DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag))
	iWeekDay = DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag) 
	response.write iDag &"   " & aDagar(iDag) 
	[b]if iDag = 1 or iWeekDay = 2 then Response.Write " vecka " & datePart("ww", Year(Date()) & "-" & Month(Date()) & "-" & iDag) [/b]
	response.Write "<br>"
	If iWeekDay = 1 Then Response.Write "<HR>"
next
```

Voilá!

Var det så du tänkt dig resultatet?

Mvh

Permalänk: https://www.webforum.nu/p/1138021

## #17 — plelkes, 2003-08-13T18:05Z

Tyvärr har jag inga möjligheter att kolla förrän imorgon förmiddag,
 men

> Delade på din response.write-rad i loopen

 Varför gjorde du det?

Den andra frågan är:
du har 2 stycken if satser, men inga End If?

Permalänk: https://www.webforum.nu/p/1138026

## #18 — @nders, 2003-08-13T18:10Z

> **plelkes skrev:**
>
> Varför gjorde du det?

För att jag skulle få in veckonumret mellan dagen och radbrytningen. :-)

> **plelkes skrev:**
>
> Den andra frågan är: 
> du har 2 stycken if satser, men inga End If?

När man skriver en if-sats och har hela then-uttrycket på samma rad (dvs en instruktion) så behöver man inte end if. Exemplifiering:

```
If intTest = 1 then Response.write "Foo? Bar."

' är samma sak som:

If intTest = 1 then
     Response.write "Foo? Bar."
End if

' ----------------------
' Denna går inte att skriva på en rad, eftersom det är två instruktioner som ska exekveras i if-satsen:

If intTest = 1 and intWoo = 12 Then
     Response.write "Foo?<br>"
     Response.write "BAR!!!"
End if
```

Mvh

Permalänk: https://www.webforum.nu/p/1138028

## #19 — plelkes, 2003-08-14T06:43Z

@nders skrev

> Var det så du tänkt dig resultatet?

 
Fungerar kanon!!!

Om jag kollar koden du fixade till mig, så verkar det som om jag komplicerat till det hela alldeles hemskt mycket.
Egentligen är det ju bara att tänka på rent svenska och sedan översätta allt till VBScript/ASP - Eller?

Permalänk: https://www.webforum.nu/p/1138207

## #20 — @nders, 2003-08-14T06:48Z

> **plelkes skrev:**
>
> Om jag kollar koden du fixade till mig, så verkar det som om jag komplicerat till det hela alldeles hemskt mycket.

Tyvärr är det sånt man gör allt för ofta, tänker för svårt. Men man blir bättre på det, jag lovar. :)

> **plelkes skrev:**
>
> Egentligen är det ju bara att tänka på rent svenska och sedan översätta allt till VBScript/ASP - Eller?

Ja, om jag har ett problem att lösa som jag inte riktigt får grepp om i skallen, då tänker jag alltid på ren svenska, och skriver ner problemet / föreslagen lösning i pseudo-kod. När man väl kommit så långt att pseudokoden är logisk och fungerar så brukar man ha lättare att lösa problemet programmatiskt.

Mvh,

Permalänk: https://www.webforum.nu/p/1138210

---

Tråden på webben: https://www.webforum.nu/amne/asp/84092-får-inte-nestlad-for-loop-att-fungera  
Nästa sida: https://www.webforum.nu/amne/asp/84092-får-inte-nestlad-for-loop-att-fungera/page2.md
