Jag undra hur jag ska bära mig åt för att inte samma framslumpade text ska komma fram två(eller fler) gånger efter varandra, så här ser koden ut nu: Beror lite på hur du använder arrayen. jag hackade ihop en liten lösning som ska funka. >...åt för att inte samma framslumpade text ska komma fram två(eller fler) gånger efter varandra...<br><br>Inte Slumpa fram samma text två gånger
<code>
Private Sub cmdRandom_Click()
Dim data(0 To 1000) As String
data(0) = "Test"
data(1) = "Det här är också ett test"
data(2) = "Och det här med"
data(3) = "Test igen"
MsgBox data(Rnd(UBound(data)) * 2)
End Sub
</code>
Skulle vara tacksam om någon hade en bra kod som kan lösa mitt problem..
/MVH PerSv: Inte Slumpa fram samma text två gånger
Laddar du inte om arayen med all text varje gång du använder den kan du göra sä här:
1:
Töm den position som har använts till en tom sträng.
Kontrollera att om du valt en position med en tom sträng så slumpa om en gång till. Kan bli svårt till slut om du slumpat många gånger att hitta en sträng.
2:
Radera hela den post som har slupats fram och dimersionra om arrayen. Det är lättare om du då använder dig av en collection iställlet fär en array. Då slippper du flytta alla poster ett steg, collection gör detta automatiskt.
Laddar du om arrayen varje gång du ska slumpa så får du spara det positioner du använt.
3:
Vid första slumpningen skapar du en andra array som innehäller positionerna eller texten som slumpades fram. Vid nästa slumpning kontrollerar du om den slumpade positionen finns i den andra arrayen så slumpar du en gång till.
Tror det blev rätt, lite mycket att komma på rätt upp och ner.Sv: Inte Slumpa fram samma text två gånger
den fungerar så att den går igenom hela arrayen och byter varje värde med ett annat framslumpat värde.
<code>
Dim m, data(0 To 1000) As String
Private Sub Form_Load()
Dim slump, temp
'fyll på med data här:
data(0) = "Test"
data(1) = "Det här är också ett test"
data(2) = "Och det här med"
data(3) = "Test igen"
Randomize
For i = 0 To 3 'ersätt 3:an med antalet data minus ett.
slump = Round(Rnd() , 0)
temp = data(i)
data(i) = data(slump)
data(slump) = temp
Next
m = 0
End Sub
Private Sub cmdRandom_Click()
if m < 4 then ' byt ut fyran mot antalet data
MsgBox data(m)
m = m + 1
Else
MsgBox "Alla värden har gåtts igenom. Nu börjar vi om igen."
m = 0
end if
End Sub
</code>Sv: Inte Slumpa fram samma text två gånger
Detta låter som att man skulle kunna få texten som:<br><br>
a b a b.<br><br>
I så fall är det väldigt enkelt att lösa det.<br><br>
<code>
Private Sub cmdRandom_Click()
Dim data(0 To 1000) As String, iLastIndex As Long, iIndex As Long
data(0) = "Test"
data(1) = "Det här är också ett test"
data(2) = "Och det här med"
data(3) = "Test igen"
iIndex = Rnd(UBound(data)) +1
Do While iIndex = iLastIndex
iIndex = Rnd(UBound(data)) +1
Loop
iLastIndex = iIndex
MsgBox data(iIndex)
End Sub
</code>
För övrigt bör du inte initiera strängarna i suben. Gör dem antingen statiska eller globala och initiera dem en gång.<br><br>
/Niklas Jansson