Private Sub Formular_Fragenkatalog_2_Öffnen_Click()
falsch = 0
b = 0
i = 0
w = 0
For i = 1 To 18
Do
DoCmd.OpenForm "Fragen aus Kategorie 2", acNormal
b = Int(Rnd * 8) + 1
DoCmd.GoToRecord , , acGoTo, b
If Wiederholung = True Then
w = 1
End If
Loop Until w = 0
i = i + 1
Next
MsgBox "Du hast " & falsch & " Fehler!", vbOKOnly
End Sub
Folgender Code:
Nach Betätigung des Button "Formular_Fragenkatalog_2_Öffnen_Click" soll eine Schleife starten. Erster Durchlauf = Zufallszahl ausspucken und Datensatz mit der der Zufallszahl = ID anzeigen lassen. Sollte jetzt ein Kästchen "Wiederholung" = True sein, dann ist w=1 und die Schleife soll von vorne beginnen. Solange suchen bis Kästchen "Wiederholung" = False ist, w=0. Der Datensatz kann nun bearbeitet werden und über ein weiteren Button "Next" soll die Schleife wieder gestartet werden. Der durchlauf der Schleife soll so lange sein bis i = 18 ist und somit 18 Datensätze bearbeitet wurden.
Somit sollte ein Wiederholtes Aufrufen eines Datensatzes nicht mehr möglich sein.
Leider läuft meine Schleife komplett durch und macht nicht das was ich möchte. Ich hoffe es kann mir jemand weiterhelfen. Schleifen sind nicht mein Ding, Sorry.
Hallo,
was in aller Welt hast Du denn vor?
Was ist der Sinn dieses Zufall-Gehoppses?
Soll das Erinnerungsvermögen zur Reihenfolge der Fragen getestet werden?
Lösung könnte sein, das Form mit acDialog zu öffnen (Code wird angehalten) und die Zufallszahl als Where-Condition für die ID mitzugeben....
Zudem sollte die Schleife über einen Recordset gehen, weil Gotorecord (in desem Fall) auf das aktuelle Form wirkt, in dem der Code abläuft. Im Fall von acDialog, kommt der Code zum entspr. Zeitpunkt gar nicht zum Tragen.
Gegenvorschlag: Erstelle ein ungebundenes Listen- oder Komfeld in dem Formular, in dem Du die 18 zufälligen Datensätze bearbeiten willst. Bei eingeschaltetem Assistenten wird das Steuerelement so vorkonfiguriert, dass es bei entsprechend gewählter Option zum darin ausgewählten Datensatz im Formular navigiert. Zum Schluß musst Du nur noch die Datensatzherkunft tunen, so dass nur 18 Datensätze angezeigt werden und diese von zufälliger Reihenfolge sind. Ich gehe hier vereinfacht von einem Feld FrageID und einem Feld Frage aus (erstes Feld ist ausgeblendet).
SELECT TOP 18
FrageID,
Frage
FROM Tabellenname
ORDER BY Rnd(FrageID);
Wenn ein Requery auf das Steuerelement abgesetzt wird, erscheinen natürlich 18 andere zufällige Datensätze.
Hallo!
Public Function ZufallsZahl(ByVal Untergrenze As Long, _
ByVal Obergrenze As Long) As Long
Dim zahl As Long ' Zufallszahl
Randomize
zahl = CLng((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
ZufallsZahl = CLng(zahl)
End Function
Private Sub Formular_Fragenkatalog_2_Öffnen_Click()
Dim frm As Form
Dim strFrm As String
strFrm = "Fragen aus Kategorie 2"
DoCmd.OpenForm strFrm, acNormal
Set frm = Forms(strFrm)
With frm
.Recordset.FindFirst "ID = " & ZufallsZahl(1, .Recordset.RecordCount)
End With
End Sub