Ska återställa en del checkboxar. 6 arrayer med 11 knappar i varje. Började med att skriva så här: Testa detta istället Det funkar utan loop men så kan man ju inte hålla på å "kåda". Jodå SAW, om du kollar min första fråga överst är det just det jag gjort men det funkar inte. Har kommit på att det krockar på något sätt med andra funktioner kopplade till arrayerna. Till varje array har jag en variabel som har värdet av hur många checkboxar som är till. Så här: Hej Det är inget fel i din kod. Du har antagligen missat namn eller index på någon eller några av dina kontroller. Hej konstaterar som Andreas att du har en riktig kod. Felkod: Hej Håkan! Hej! Hej Jag är imponerad! Hej hej!Loop
<code>
Private Sub cmdReset_Click()
For I = 0 To 10
chk1(I).Value = 0
chk2(I).Value = 0
chk3(I).Value = 0
chk4(I).Value = 0
chk5(I).Value = 0
chk6(I).Value = 0
Next
End Sub
</code>
Funkar inte och kan inte hitta felet. Provade se´n så här, men så omständigt ska man inte behöva göra det.
<code>
Private Sub cmdReset_Click()
For I = 0 To 10
chk1(I).Value = 0
Next
For I = 0 To 10
chk2(I).Value = 0
Next
For I = 0 To 10
chk3(I).Value = 0
Next
For I = 0 To 10
chk4(I).Value = 0
Next
For I = 0 To 10
chk5(I).Value = 0
Next
For I = 0 To 10
chk6(I).Value = 0
Next
End Sub
</code>
Då återställs en knapp/array och klick.
Tack på förhand/PeterSv: Loop
<code>
Private Sub cmdReset_Click()
For I = 0 To 10
chk1(I).Value = 0
Next
End Sub
</code>Sv: Loop
<code>
Private Sub cmdReset_Click()
chk1(0).Value = 0
chk1(1).Value = 0
chk1(2).Value = 0
chk1(3).Value = 0
chk1(4).Value = 0
chk1(5).Value = 0
chk1(6).Value = 0
chk1(7).Value = 0
chk1(8).Value = 0
chk1(9).Value = 0
chk1(10).Value = 0
chk2(0).Value = 0
chk2(1).Value = 0
chk2(2).Value = 0
chk2(3).Value = 0
chk2(4).Value = 0
chk2(5).Value = 0
chk2(6).Value = 0
chk2(7).Value = 0
chk2(8).Value = 0
chk2(9).Value = 0
chk2(10).Value = 0
chk3(0).Value = 0
chk3(1).Value = 0
chk3(2).Value = 0
chk3(3).Value = 0
chk3(4).Value = 0
chk3(5).Value = 0
chk3(6).Value = 0
chk3(7).Value = 0
chk3(8).Value = 0
chk3(9).Value = 0
chk3(10).Value = 0
chk4(0).Value = 0
chk4(1).Value = 0
chk4(2).Value = 0
chk4(3).Value = 0
chk4(4).Value = 0
chk4(5).Value = 0
chk4(6).Value = 0
chk4(7).Value = 0
chk4(8).Value = 0
chk4(9).Value = 0
chk4(10).Value = 0
chk5(0).Value = 0
chk5(1).Value = 0
chk5(2).Value = 0
chk5(3).Value = 0
chk5(4).Value = 0
chk5(5).Value = 0
chk5(6).Value = 0
chk5(7).Value = 0
chk5(8).Value = 0
chk5(9).Value = 0
chk5(10).Value = 0
chk6(0).Value = 0
chk6(1).Value = 0
chk6(2).Value = 0
chk6(3).Value = 0
chk6(4).Value = 0
chk6(5).Value = 0
chk6(6).Value = 0
chk6(7).Value = 0
chk6(8).Value = 0
chk6(9).Value = 0
chk6(10).Value = 0
End Sub
</code>
Jag har andra funktioner kopplade till checkboxarna när de ändras, men det ska väl inte störa en For-slinga?Sv: Loop
<code>
Private Sub chk1_Click(Index As Integer)
Antal1 = 0
For I = 0 To 10
If chk1(I).Value = 1 Then Antal1 = Antal1 + 1
txtAntal1.Text = Antal1 'visar antalet i textruta
Next
End Sub
</code>
Det verkar som om det är här det krockar, men jag fattar inte hur? Klickar jag på återställningsknappen återställs en i varje array för varje gång jag klickar. Men då måste jag loopa varje array för sig. I "ditt" exempel återställs bara den första checkboxen i den första arrayen, sen hänger programmet sig.
/PeterSv: Loop
Var tvungen att kontrollera fungerar ua, vad får du för felmeddelande ?
Du skall alltid dimmensionera variabler, här i As Long
Private Sub Command1_Click()
Dim i As Long
For i = 0 To 10
Check1(i).Value = 0
Check2(i).Value = 0
Next
End Sub
/SvenSv: Loop
Man kan även gruppera kontroller i Kollektioner. Kanske inte så användbart i detta fallet. Men visar den för att demonstrera tekniken:
<code>
Private mCheckboxes As Collection
Private Sub cmdReset_Click()
Dim CheckBox As CheckBox
For Each CheckBox In mCheckboxes
CheckBox.Value = vbUnchecked
Next
End Sub
Private Sub Form_Load()
Dim I As Long
Set mCheckboxes = New Collection
For I = 0 To 10
mCheckboxes.Add chk1(I)
mCheckboxes.Add chk2(I)
mCheckboxes.Add chk3(I)
mCheckboxes.Add chk4(I)
mCheckboxes.Add chk5(I)
mCheckboxes.Add chk6(I)
Next
End Sub
Private Sub Form_Unload(Cancel As Integer)
Do While mCheckboxes.Count
mCheckboxes.Remove 1
Loop
End Sub
</code>Sv: Loop
Felet är som en klalificerad gissning att du missat med index.
Du får gå genom varje av de 6 kolla att dom börjar på 0 och
att det inte fattas någon till 10.
Sen för helv.... tala om hur felmeddelandet lyder."Erfarna" programmerare
känner direkt igen felet(dom har själv haft det).Detta gäller alla Er som
adresserar detta Nybörjar Forum
Mvh programmera mera
/SvenSv: Loop
Runtime error '340':
Control array element '11' doesn't exist
Alla arrayer är från (0) till (10). For-slingan är från 0 till 10. Element '11' är väl (10)? Och den existerar. ???
/PeterSv: Loop
Det betyder bara det att du hänvisar till 11 någonstans.
Du ser väl var programmet stannar.
/SvenSv: Loop
Arrayen deklareras ju automatiskt till (Index As Integer) och det har aldrig varit problem med det tidigare. Värdet för en checkbox är ju antingen 0 eller 1 så Int bör funka. Har gjort liknande i flera program tidigare utan problem. Men nu har jag hållt upp med programmeringen ett år och är lite ringrostig så antagligen är det något simpelt jag missat.
SvenPon!!
Visst ser jag var det stannar. Det stannar i for-slingan på olika ställen beroende på hur många checkboxar som är markerade. Men jag hittar ändå inte felet.
Tack ändå Goa Gubbar, för att ni bryr er. /PeterSv: Loop
Hade du funktioner/kod kopplad till "click" eventet för checkboxen?
Tyckte jag så det tidigare i tråden.
När du ändrar "value" i checkboxen så "utlöser" du ett click event.
Du kör alltså koden som du har lagt in i ditt click event, som är kopplat till kontrollen.
Frågan är vad som händer där?
Kikade på ditt click event såg att du hade "I" som räknare där också.
Frågan är hur du deklarerat "I" är den synlig i hela modulen (d.v.s. är det samma I på båda ställena)?
Efter att loopen i ditt click event körts så har den värdet 10,
om du sen hoppar tillbaka till "huvud" loopen så kommer ju "I" att räknas upp med 1 vilket ger 11.
/HåkanSv: Loop
Just det där satt den, så måste det vara. Lurigt.
Den stora missen är att du inte deklarera dina variabler
Allra först i alla program skall alltid stå Option Explicit
Din knapp skall se ut så här
Private Sub cmdReset_Click()
Dim i As Long
For i = 0 To 10
chk1(i).Value = 0
chk2(i).Value = 0
chk3(i).Value = 0
chk4(i).Value = 0
chk5(i).Value = 0
chk6(i).Value = 0
Next
End Sub
/SvenSv: Loop
Har inte läs tråden tillräckligt. Jag missade själva click koden.
Själv deklarerar jag alla variabler inom proceduren. Om det inte krävs att flera skall komma åt värdet.Sv: Loop
Tänkte ju inte på att min resetknapp även startade andra for-slingor. Ändrade bara I till J så funkar det som det ska.
Tack allihop/Peter