Är en nybörjare med att använda Excel/VB och att använda detta forum. Hmm... ska se om jag förstått din fråga rätt: Hej, tack för svaret. Hej. Ett tips är att använda for loop istället. Nja, jag hörde på Go´kväll att det tog sex år för den som skrev det första programmet. Där för tyckte jag det skulle vara kul att se hur lång tid det tog för mig att skriva ett program..Dela upp kod
Jag har skrivit ett program i som är för stort så jag behöver dela upp det på olika knappar.
Kod som jag lägger i Private Sub CommandButton1_Click() går att exekvera.
Men hur gör jag för att fortsätta på kod i nästa knapp, Private Sub CommandButton2_Click() .
Ställer jag markören på Private Sub CommandButton2_Click() så körs den koden också.
Hur gör jag för att automatiskt gå mellan knapparna?
(hoppas att jag ställer denna fråga i rätt forum)Sv: Dela upp kod
Du har ett program du vill genomföra.
Du vill starta allting med ett knapptryck och få allt att exekveras i rätt sekvens, men tycker att din kod
blir för stor/lång för att ligga i en subrutin.
Stämmer det?
I så fall:
Du behöver inte lägga koden under flera olika knappar (om du inte har olika funktioner, och du vill utföra dem var för sig, oberoende av sekvens vid knapptryck). Gör istället så att fundera igenom vad det är du vill göra med den funktion du har. Försök bryta ner den i mindre block (du satt säkert och tänkte igenom vad du ville göra - tex, kopiera mina fält, därefter klistra in dem där etc.)
Försök få till så fristående block som möjligt, sedan kan du lägga dem som egna procedurer/funktioner och anropa dem från din första metod.
Hoppas det hjälper! =)
/EmmaSv:Dela upp kod
Det är så här, jag hörde på Go´kväll att den som konstruerade den första Sudokun tog sex år på sig.
Därför tänkte jag att det skulle vara kul att se hur lång tid det skulle ta´att skriva ett program som löste en Sudukun, så jag skrev ett program i VB, men tyvärr fick jag reda på att programmet blev för stort.
Därför delade jag upp koden på nio knappar. ( Som du vet består en Sudoku av nio "boxar" som ska innehålla talen ett till nio.)
Men då fick jag beskedet att stacken blev full, vid den nionde "boxen".
Jag har en dator med 1,5 GB.
Samma program skrev jag i Excel/VB och gick på samma problem som i VB, programmet blev för stort.
Därför försökte jag att dela upp programet i Excel/VB på samma vis. Alltså på flera knappar.
Och då fick problemet att jag måste kunna "backa" till baka till tidigare kod som jag skrivit i förut definierade "boxar" (knappar).
Alltså om alla talen ett till nio står korrekt i den första "boxen" (knappen) så är det ibland inte möjligt att placera in talen ett till nio i den andra eller följande åtta. Så därför måste andra tal i den föregående "boxen" slumpas fram.
Så mitt problem är: hur "backar" jag tillbaka till tidigare knappar?
Men du kanske har ett helt annan lösning på problemet?
Hälsningar
GöteSv:Dela upp kod
Koden är ju väldigt lång, jag tror inte att det är lämplig att skicka hela. Här kommer små bitar.
dim heltal As Integer, aktb As Integer
Dim akta1 As Integer, z As Integer
Randomize
gote1:
If Range("a1") >= 0 Then
Range("a1") = 0
Else
GoTo b1
End If
b1:
If Range("b1") >= 0 Then
Range("b1") = 0
Else
GoTo c1
End If
c1:
Och så vidare för att nollställa alla rutor som det inte är tal i. Redan ifyllda tal har jag satt negativa.
Resten av denna kod kollar om värdet i A1 är negativt om inte slumpas ett tal fram.
' allt är nu nollställt
heltal = Int(9 * Rnd) + 1
If Range("a1") >= 0 Then
Range("a1") = heltal
Else
GoTo neg1
End If
If Abs(Range("b1")) = heltal Then
GoTo gote1
End If
If Abs(Range("c1")) = heltal Then
GoTo gote1
End If
If Abs(Range("d1")) = heltal Then
GoTo gote1
End If
If Abs(Range("e1")) = heltal Then
GoTo gote1
End If
If Abs(Range("f1")) = heltal Then
GoTo gote1
End If
If Abs(Range("g1")) = heltal Then
GoTo gote1
End If
If Abs(Range("h1")) = heltal Then
GoTo gote1
End If
If Abs(Range("i1")) = heltal Then
GoTo gote1
End If
'Nu är a1 kollad mot b1:i1
If Abs(Range("a2")) = heltal Then
GoTo gote1
End If
If Abs(Range("a3")) = heltal Then
GoTo gote1
End If
If Abs(Range("a4")) = heltal Then
GoTo gote1
End If
If Abs(Range("a5")) = heltal Then
GoTo gote1
End If
If Abs(Range("a6")) = heltal Then
GoTo gote1
End If
If Abs(Range("a7")) = heltal Then
GoTo gote1
End If
If Abs(Range("a8")) = heltal Then
GoTo gote1
End If
If Abs(Range("a9")) = heltal Then
GoTo gote1
End If
'Nu är cell a1 kollad mot a2:a9
If Abs(Range("b2")) = heltal Then
GoTo gote1
End If
If Abs(Range("c2")) = heltal Then
GoTo gote1
End If
If Abs(Range("b3")) = heltal Then
GoTo gote1
End If
If Abs(Range("c3")) = heltal Then
GoTo gote1
End If
' b2,c2,b3,c3 kollade
GoTo vid1
'Nu kollar när a1 är negativ
neg1:
GoTo vid1 (går till nästa cell, B1)
Och koden fortsätter så för alla celler. Men redan vid den 3:"boxen" är stackern fylld.
I VB kom jag till början av den 9:e "boxen" när jag delade upp koden på nio knappar.
Hälsningar
GöteSv: Dela upp kod
Om du bara slumpar ett värde i första rutan så kan ju det spärra att hitta en lösning. Om din kod gör ett rekursivt anrop. Skulle detta förklara ditt Out of stack space problem.
Vill du göra din egen suduko lösare?Sv:Dela upp kod