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
21 svar · 463 visningar · startad av plelkes
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
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>"
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>"
Fortsätt därefter att skriva ut nummer och veckodag
Är inte det en söndag så skriv ut nummer och dagensnamn tills söndag
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"
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
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
Någon av er gurus som har lösningen?
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,
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
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?
@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))
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>"
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
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
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
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
@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
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.
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
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?
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
@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?
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,